Bip39 체크섬을 찾는 의사 코드?

Nov 01 2020

12 단어 BIP39의 체크섬을 찾으려고합니다.

처음 11 개의 단어는 괜찮지 만 12 번째 단어는 항상 몇 가지 위치에서 벗어납니다.

예를 들어 128 비트 엔트로피를 사용 e84eaa26330ccbb2f866a1dc155e94ba합니다.

바이너리에서 11101000010011101010101000100110001100110000110011001011101100101111100001100110101000011101110000010101010111101001010010111010.

처음 11 개의 11 비트 단어는 다음과 같습니다.

11101000010 (bin) => 1858 (decimal) => tribe
01110101010 (bin) => 938  (decimal) => inspire
10001001100 (bin) => 1100 (decimal) => maze
01100110000 (bin) => 816  (decimal) => gravity
11001100101 (bin) => 1637 (decimal) => smile
11011001011 (bin) => 1739 (decimal) => sunny
11100001100 (bin) => 1804 (decimal) => thunder
11010100001 (bin) => 1697 (decimal) => stage
11011100000 (bin) => 1760 (decimal) => swing
10101010111 (bin) => 1367 (decimal) => priority
10100101001 (bin) => 1321 (decimal) => pioneer

사용되지 않은 비트는 여전히 7 개이며 마지막 비트는 0111010.

16 진수 문자열의 SHA-256 해시는 5355d54a3d673c4b1ac20b839ead09af3c6fea6dc24199b477f6ff64e7a68262. 이 중 처음 4 비트는 첫 번째 16 진수 문자로 표시되며 5이진수는 0101입니다.

이 4 바이트를 이진 문자열에 추가합니다. 111010000100111010101010001001100011001100001100110010111011001011111000011001101010000111011100000101010101111010010100101110100101

이제 마지막 11 비트 단어가 있습니다.

01110100101 (bin) => 933 (decimal) => input

그러나 Ian Coleman의 Bip39 에 대해 검증하려고 할 때 체크섬이 0011(아님 0101)이 되어야하며 마지막 단어가

01110100011 (bin) => 931 (decimal) => inner

내가 도대체 ​​뭘 잘못하고있는 겁니까?

답변

1 chytrik Nov 01 2020 at 08:06

16 진수 문자열의 SHA-256 해시는 5355d54a3d673c4b1ac20b839ead09af3c6fea6dc24199b477f6ff64e7a68262입니다. 그 중 처음 4 비트는 첫 번째 16 진수 문자 5로 표시되며 이진수는 0101입니다.

16 진수 문자열이 아닌 원시 바이너리의 shasum을 가져와야합니다.

$ echo "11101000010011101010101000100110001100110000110011001011101100101111100001100110101000011101110000010101010111101001010010111010" | shasum -a 256 -b

출력 제공

3043b02ceb37bb00ab48c91f76bb23d487e1ec822c90e1575967e8838a655f7c *-

이 16 진수 문자열을 바이너리로 변환하면 다음과 같은 결과가 나타납니다.

0011000001000011101100000010110011101011001101111011101100000000101010110100100011001001000111110111011010111011001000111101010010000111111000011110110010000010001011001001000011100001010101110101100101100111111010001000001110001010011001010101111101111100

이 문자열의 처음 4 비트 0011는 Ian Coleman 도구에서 제공 한 출력과 일치하는입니다.