Bip39 체크섬을 찾는 의사 코드?
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
내가 도대체 뭘 잘못하고있는 겁니까?
답변
16 진수 문자열의 SHA-256 해시는 5355d54a3d673c4b1ac20b839ead09af3c6fea6dc24199b477f6ff64e7a68262입니다. 그 중 처음 4 비트는 첫 번째 16 진수 문자 5로 표시되며 이진수는 0101입니다.
16 진수 문자열이 아닌 원시 바이너리의 shasum을 가져와야합니다.
$ echo "11101000010011101010101000100110001100110000110011001011101100101111100001100110101000011101110000010101010111101001010010111010" | shasum -a 256 -b
출력 제공
3043b02ceb37bb00ab48c91f76bb23d487e1ec822c90e1575967e8838a655f7c *-
이 16 진수 문자열을 바이너리로 변환하면 다음과 같은 결과가 나타납니다.
0011000001000011101100000010110011101011001101111011101100000000101010110100100011001001000111110111011010111011001000111101010010000111111000011110110010000010001011001001000011100001010101110101100101100111111010001000001110001010011001010101111101111100
이 문자열의 처음 4 비트 0011는 Ian Coleman 도구에서 제공 한 출력과 일치하는입니다.