BIP32 지문은 압축 공개키의 HASH160 결과 중 처음 4바이트입니다. HASH160은 SHA-256 다음에 RIPEMD-160을 적용한다는 뜻으로, 두 함수는 데이터의 숫자 요약값을 계산합니다. 결과인 32비트는 보통 숫자와 영문자를 쓰는 8자리 16진수로 표시됩니다. 추가 키를 파생하는 데 쓰이는 부가 데이터인 chain code는 이 짧은 지문 계산에 포함되지 않습니다.
여러 지갑의 기록을 구분해야 하는 상황을 떠올려 보세요. 지문은 정확히 정해진 형식으로 표현한 공개키에서 계산하는 짧은 이름표입니다. 백업 단어나 개인키를 직접 해시한 값은 아닙니다. 이름표만으로는 돈을 받을 주소가 되지도, 결제에 서명하거나 키를 복구할 수도 없습니다. 따라서 지문을 적어 두는 것은 실제로 지갑을 복구할 수 있는 백업을 대신하지 못합니다. [1]
BIP32는 키의 나무를 만듭니다. 하나의 줄기에서 가지가 나듯 마스터 키로부터 다른 키를 파생합니다. 확장 공개키 xpub 또는 확장 개인키 xprv의 기록에는 한 단계 위 부모 키의 지문이 들어 있습니다. 마스터 키에는 부모가 없으므로 그 필드는 00000000입니다. 하지만 이것은 마스터 키 자신의 지문이 아닙니다. 앱은 마스터 키 자체의 지문을 보여 주기도 하므로, 비교 전에 어느 값을 읽고 있는지 확인해야 합니다. [1]
공개 BIP32 테스트 벡터 1에 있는 마스터 키 자체의 지문은 3442193e입니다. 그런데 해당 마스터 xpub의 부모 필드는 여전히 00000000입니다. 모순이 아닙니다. 하나는 키 자신을 나타내고, 다른 하나는 존재하지 않는 부모를 나타냅니다. 테스트 벡터란 프로그램을 검증하도록 공개한 입력과 예상 결과의 묶음입니다. 누구나 아는 이 데이터를 자기 돈을 보관할 지갑의 기반으로 사용해서는 안 됩니다. [1]
PSBT는 서명 장치에 전달할 수 있는 거래 정보 묶음입니다. BIP174에 따라 마스터 지문과 파생 경로, 즉 특정 공개키에 이르는 절차를 연결합니다. 키와 지출 조건을 텍스트로 설명하는 Output Descriptor도 키의 출처를 기록할 수 있습니다. 서명 장치가 결제의 잔돈을 확인할 때는 지문 일치만으로 충분하지 않습니다. 실제 키를 파생하고 키와 해당 조건을 비교해야 다른 사람의 출력을 자기 것으로 잘못 판단하지 않습니다. [2] [3]
짧은 지문은 공간을 아끼지만 표현 범위가 제한됩니다. 32비트로는 4294967296가지 값만 나타낼 수 있습니다. 따라서 서로 다른 키가 같은 지문을 가질 수 있습니다. 이를 충돌이라고 하며, BIP32는 소프트웨어가 이를 고려하도록 명시합니다. 지문 일치만으로 모든 계정과 파생 경로, 스크립트 유형, 즉 지출 규칙을 확인할 수는 없습니다. 필요한 개인키를 갖고 있다는 증거도 아닙니다. [1] [3]
먼저 키 나무의 같은 단계에서 같은 종류의 지문을 비교하는지 확인하세요. 다른 값은 키의 비밀 기반인 seed나 추가 비밀번호인 passphrase가 다르다는 단서일 수 있습니다. 다만 결론을 내리기 전에 마스터 필드와 부모 필드를 혼동하지 않았는지 확인해야 합니다. 일치하더라도 알고 있는 주소, 파생 경로와 지출 규칙을 추가로 점검하세요. 지문은 유용한 부분 확인 수단이지만, 잘 보관한 백업과 검증된 복구 절차를 대신할 수 없습니다. [1] [3]
더 정확히 이해하려면 이 항목과 함께 다음도 읽어 보세요 HD Wallet, PSBT, BIP39 passphrase, Output Descriptor. 다음 항목에서도 이 글을 참조합니다 SeedQR.