본문 바로가기
IT

[비트코인] KISA SHA256 테스트

by 블랙오닉스 2025. 1. 2.

2025.01.02

KISA의 SHA256을 다시 테스트 하다보니 무언가 이상해서 다시 정리.

https://seed.kisa.or.kr/kisa/Board/21/detailView.do

 

gcc는 warnig,  g++ 로 컴파일 하면 에러 발생

invalid conversion from 'UINT* {aka unsigned int*}' to 'ULONG_PTR {aka long unsigned int*}' [-fpermissive]
typedef unsigned long ULONG;
typedef ULONG* ULONG_PTR;
void SHA256_Transform(ULONG_PTR Message, ULONG_PTR ChainVar)
        SHA256_Transform((ULONG_PTR)Info->szBuffer, Info->uChainVar);

 

SHA256_Encrpyt

  |- SHA256_Process

       |- SHA256_Transform

Pointer로 전달해야 되는데 typecasting이 안된 것 같다.

SHA256_Transform((ULONG_PTR)Info->szBuffer, (ULONG_PTR)Info->uChainVar);

 

그리고, SHA256 입력이 64Byte(512bit) 단위로 팩킹되고 마지막에 0x80 추가된다고 알고 있는데,

KISA코드에서는 Process.Transform 으로 한번 처리하고 Close.Transform에서 0x80관련 코드가 있다.

str(block_number) + transactions + previous_hash + str(nonce) => text
text + 8'b1000_0000 + 8'b0000_0000 * n + 64'b(text size [bit]) = message (512'b * m) -> SHA256

원래 알고 있던 개념으로 테스트하면 정상적으로 출력된다.

Initial hash value
 H[0] 6a09e667
 H[1] bb67ae85
 H[2] 3c6ef372
 H[3] a54ff53a
 H[4] 510e527f
 H[5] 9b05688c
 H[6] 1f83d9ab
 H[7] 5be0cd19
Input Message: "abc"
Digest: BA7816BF 8F01CFEA 414140DE 5DAE2223 B00361A3 96177A9C B410FF61 F20015AD

Input Message: "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq"
Digest: 248D6A61 D20638B8 E5C02693 0C3E6039 A33CE459 64FF2167 F6ECEDD4 19DB06C1

 

KISA 결과

int main(int argc, char* argv[])
{
    unsigned char i_d[1024]={0,};
    unsigned char o_d[32]={0,};
    string i_string = "abc";
    unsigned int len=0;
    len = i_string.length();
    for (int i=0;i<len;i++) i_d[i] = i_string[i];
    SHA256_Encrypt(i_d, len, o_d);
    cout << i_string << endl;
    for (int i=0;i<32;i++) printf("%02x", o_d[i]);
    return 0;
}
abc
8302f36526bc91ea7a9b15da985370bd477545ca25abd0c51eed56a3c560f074

https://csihyeon.tistory.com/46

 

sha256(hash algorithm)에 대해서 알아보자 (C++)

1) sha는 'Secure Hash Algorithm'의 약자고, 256은 메모리를 차지하는 비트 수이다. 2) 해시(16진법)의 길이는 언제나 64자이고 숫자뿐만 아니라 문자가 올 수 있다.sha256을 테스트해보고 싶으면 아래 사

csihyeon.tistory.com

zedwood 에서 받은 sha256으로 "abc" -> BA7816BF 8F01CFEA 414140DE 5DAE2223 B00361A3 96177A9C B410FF61 F20015AD

는 확인 되었는데

bitcoin 정보를 가지고 하면 블로그 결과와 다르다.


https://www.analyticsvidhya.com/blog/2021/05/how-to-mine-bitcoin-using-python-part-i/

 

How to mine Bitcoin using Python? ( Part - I )

Bitcoin ecosystem is made out of nodes or miners who execute the bitcoin code and store it in the blockchain. Lets mine bitcoin using python

www.analyticsvidhya.com

C++ 코드 영향일 수도 있으니 Python으로.


2024.01.03

https://emn178.github.io/online-tools/sha256.html

 

SHA256

This SHA256 online tool helps you calculate hashes from strings. You can input UTF-8, UTF-16, Hex, Base64, or other encodings. It also supports HMAC.

emn178.github.io

여기에서 테스트하니 정상

abc
ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad

abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq
248d6a61d20638b8e5c026930c3e6039a33ce45964ff2167f6ecedd419db06c1

 

BitCoin Python 예제로 하면 비정상

684260
A->B->10
B->c->5
000000000000000000006bd3d6ef94d8a01de84e171d3553534783b128f06aad
36674

50b29f77f0b970646939619caa6b561b4f1d3418898089335a559875c30361fa

 

String을 어떻게 하느냐에 따라 결과가 다르다.

684260
A->B->10
B->c->5
000000000000000000006bd3d6ef94d8a01de84e171d3553534783b128f06aad36674

000086ae35230f32b08e9da254bd7ba1b351f11d40bde27a7ebd5e7ec9568f8d

 

C Code의 string에서도 줄바꿈 처리가 필요


string i_string = "684260\nA->B->10\nB->c->5\n000000000000000000006bd3d6ef94d8a01de84e171d3553534783b128f06aad36674";

수정된 KISA 코드에서는 정상 출력

'IT' 카테고리의 다른 글

[현미경] FHD 500x & 200x + YIZHAN 테스트  (0) 2025.01.04
[개발환경] VSCode 설정 파일  (0) 2025.01.04
[현미경] EMZ-TR + 링라이트  (0) 2024.12.31
[현미경] 구조 분석  (0) 2024.12.29
[드론] MJX Bugs3 업그레이드 2  (0) 2024.12.26