용어집 / 주소와 키
마스터 체인 코드
별칭은 Master chain code입니다.
- 마스터 체인 코드란 무엇입니까?
- 마스터 체인 코드는 시드의 64바이트 해시 오른쪽 절반으로, HD 지갑 트리의 깊이 0에 위치한 마스터 개인 키의 짝입니다.
BIP-32에 명시되어 있습니다.
앞으로 사용하게 될 모든 키는 이 한 쌍에서 파생됩니다. 시드에 ASCII 문자열 Bitcoin seed를 키로 사용해 HMAC-SHA512를 한 번 수행하면 64바이트가 반환됩니다. 처음 32바이트가 마스터 개인 키가 되고 마지막 32바이트가 마스터 체인 코드가 됩니다. 시드를 복사하면 그 아래의 모든 것을 복사한 것이 되며, 백업이 서류함이 아니라 한 문장인 이유가 바로 여기에 있습니다.
작동 방식
마스터 생성은 지갑 생성 시 정확히 한 번 실행됩니다. BIP-32는 128비트에서 512비트 사이의 시드를 허용하고 256비트를 권장하며, 이를 위의 키 사용 해시에 입력합니다. 그 결과 나오는 쌍은 모든 파생 경로 앞에 m으로 표기되는 노드이며, 그 위에는 아무것도 없습니다.
이 단계에는 유효성 검사가 숨어 있습니다. 왼쪽 32바이트가 0으로 나오거나 secp256k1 곡선의 차수보다 크거나 같은 수로 나오면 BIP-32는 시드를 유효하지 않은 것으로 선언하며, 구현은 이를 거부해야 합니다. 두 경우 중 하나에 해당할 확률은 2의 127제곱분의 1보다 낮으므로 어떤 지갑도 이를 보고한 적이 없지만, 이 규칙 덕분에 승인된 모든 시드는 명확하게 사용할 수 있습니다.
직렬화되면 루트는 스스로를 드러냅니다. 메인넷 개인 확장 키는 버전 바이트 0x0488ADE4를 가지며 xprv로 표시되고, 공개 확장 키는 0x0488B21E를 가지며 xpub로 표시됩니다. 루트에서 깊이 바이트는 0x00이고 부모 지문과 자식 번호는 모두 4개의 0 바이트인데, 가리킬 부모가 없기 때문입니다.
실제로 다루는 숫자는 원시 바이트가 아니라 지문입니다. 마스터 공개 키를 SHA-256으로 해시한 다음 RIPEMD-160으로 해시하고 처음 4바이트를 유지하면, 그로부터 파생될 수 있는 어떤 것도 드러내지 않으면서 지갑을 식별하는 8자리 16진수 문자열이 생성됩니다.
확인할 수 있는 곳
소비자용 소프트웨어는 마스터 쌍을 완전히 숨기고 대신 지문을 표시합니다. Sparrow는 각 키스토어 옆에 지문을 표시하고, Bitcoin Core는 listdescriptors 출력의 모든 줄을 대괄호 안에 지문으로 시작하며, Coldcard는 홈 화면에 지문을 표시하여 기기가 현재 어떤 시드를 보유하고 있는지 확인할 수 있게 합니다. PSBT가 도착하면 서명 기기는 키 출처 필드의 지문을 자신의 지문과 비교한 뒤에야 요청이 자신에게 향한 것인지 판단합니다.
다중 서명에서는 루트 정체성이 더 이상 사소한 정보가 아닙니다. 2-of-3 지갑은 시드 문구 3개만으로는 복구할 수 없는데, 재구성하려면 각 공동 서명자의 지문과 경로도 알아야 하기 때문입니다. 그래서 모든 진지한 다중 서명 도구는 단어 옆에 지갑 디스크립터를 보관하라고 하며, 디스크립터를 잃으면 단일 문구로는 도달할 수 없는 코인이 고립될 수 있는 이유이기도 합니다.
마스터 개인 키를 직접 다루는 유일한 순간은 가져오기입니다. xprv를 소프트웨어에 붙여 넣으면 모든 용도, 모든 계좌, 모든 미래 주소를 포함한 전체 트리가 넘어가며, 권한을 하나의 가지로 좁힐 방법이 없습니다. 루트의 부분 버전은 존재하지 않으며, 그래서 하드웨어 지갑은 루트의 내보내기를 아예 거부합니다.
마스터 체인 코드 vs 시드 문구
문구가 먼저이고 마스터 쌍이 그다음이며, 둘은 서로 다른 표준에 속합니다. BIP-39는 12개 또는 24개의 단어를 2,048회의 PBKDF2 실행으로 512비트 시드로 변환하고, BIP-32는 그 시드를 마스터 개인 키와 마스터 체인 코드로 변환합니다. 두 계층은 충분히 독립적이어서 패스프레이즈를 추가하면 시드가 바뀌고 따라서 마스터 쌍과 그 아래의 모든 주소가 바뀌지만, 카드에 적힌 단어는 그대로 유지됩니다. Electrum은 반대 방향에서 이를 보여 줍니다. Electrum의 복구 문구는 BIP-39가 아니며, 그래도 일반적인 BIP-32 루트를 생성합니다.