BIP39에서는 초기 엔트로피가 니모닉이 되고, 니모닉과 선택적 passphrase가 바이너리 시드를 만듭니다. BIP32는 여기서 마스터 키와 chain code를 도출합니다. 이 값과 단계는 서로 바꿔 쓸 수 없으며 다른 백업 형식은 다른 절차를 사용할 수 있습니다.
BIP39는 컴퓨터가 생성한 난수를 읽기 쉽게 옮기는 용도이며 사람이 만든 문장을 위한 방식이 아닙니다. 익숙한 인용문이나 개인적인 단어 배열을 고르는 것은 지정된 과정으로 엔트로피를 생성하는 것과 같지 않습니다. [BIP39 — Mnemonic generation and seed conversion]
Linux getrandom()은 기본 설정에서 소스 초기화를 기다립니다. GRND_NONBLOCK은 기다리지 않고 EAGAIN을 반환할 수 있습니다. 구현은 상태와 반환 길이를 처리해야 하며 읽기 실패를 성공적으로 얻은 입력으로 취급해서는 안 됩니다. [Linux getrandom — Initialization and return values]
Web Crypto getRandomValues()는 정수 배열에 암호학적으로 안전한 바이트를 제공하며 65536 바이트를 넘으면 QuotaExceededError를 발생시킵니다. 이 인터페이스를 준수하는 것만으로 로드된 코드, 후속 처리 또는 니모닉 유출 방지를 검증하지는 못합니다. [W3C Web Crypto — getRandomValues contract]
BIP39는 128 입력 비트에 체크섬 4 비트를 붙여 12 단어를 만들고, 256 비트에는 8 비트를 붙여 24 단어를 만듭니다. 이 비트는 SHA256에서 나오며 추가적인 독립 엔트로피가 아닙니다. [BIP39 — Mnemonic generation and seed conversion]
BIP39는 PBKDF2-HMAC-SHA512를 2048회 반복하여 512비트 시드를 도출합니다. 니모닉과 리터럴 문자열 mnemonic에 passphrase를 붙인 솔트를 UTF-8 NFKD로 사용합니다. passphrase가 없으면 빈 문자열이며 출력 길이는 입력 엔트로피가 512비트임을 입증하지 않습니다. [BIP39 — Mnemonic generation and seed conversion]
BIP32는 Bitcoin seed를 키로 HMAC-SHA512를 적용해 시드를 처리하고 결과를 마스터 개인키와 chain code로 나눕니다. 키 값이 0이거나 허용 범위 밖이면 무효이며 전체 시드를 하나의 개인키로 직접 사용하는 것은 아닙니다. [BIP32 — Master key generation]
BIP39는 엔트로피, 니모닉, 시드가 포함된 벡터를 공개하며 테스트 passphrase TREZOR를 사용합니다. 일치는 해당 입력의 변환을 입증할 뿐 실제 생성기의 예측 불가능성을 입증하지 않습니다. 공개 테스트 입력은 실제 자금의 비밀 백업으로 사용하면 안 됩니다. [BIP39 — Mnemonic generation and seed conversion]
NIST SP 800-90C는 엔트로피 소스와 생성 메커니즘을 연결합니다. 지갑 평가는 구체적 버전, 오류 처리, 후속 단계로의 값 전달도 확인해야 합니다. 한 구성 요소의 증거만으로 전체 과정이나 이후 백업 보관의 안전성을 입증할 수 없습니다. [NIST SP 800-90C — Random bit generator constructions]
더 정확히 이해하려면 이 항목과 함께 다음도 읽어 보세요 Random Number Generator, BIP 39, HD Wallet, Seed Phrase. 다음 항목에서도 이 글을 참조합니다 Random Number Generator, CSPRNG, Deterministic RNG, Entropy Mixing.