용어집 / 주소와 키
HD 지갑
별칭은 HD 프로토콜, 계층적 결정적 지갑, BIP32, HD wallet입니다.
- HD 지갑이란 무엇입니까?
- HD 지갑은 앞으로 필요로 할 모든 키를 무작위 시드 하나에서 만들어 내며, 그 키들은 BIP-32가 2012년에 규정한 부모와 자식의 트리 구조로 배열됩니다.
BIP-32에 명시되어 있습니다.
시드 하나가 마스터 키를 만들고, 마스터 키가 가지를 만들며, 그 가지가 사용하는 모든 주소를 만듭니다. BIP-32는 2012년 2월 11일에 할당되었으며, 오늘 배포되는 사실상 모든 하드웨어·모바일·데스크톱 지갑이 이를 따릅니다. 그래서 카드에 적힌 열두 단어로 10년 동안 사용해 온 지갑을 복원할 수 있습니다.
작동 방식
HD 지갑은 키가 있는 해시를 반복해서 실행하여 숫자 하나를 계층 구조로 바꿉니다. 시드는 고정 키 문자열 "Bitcoin seed"와 함께 HMAC-SHA512에 입력되어 64바이트를 만들어냅니다. 왼쪽 32바이트가 마스터 개인 키가 되고 오른쪽 32바이트가 마스터 체인 코드가 됩니다. 이 쌍이 그 아래 모든 것의 뿌리입니다.
그다음 단계마다 키와 그 체인 코드, 인덱스 번호를 받아 같은 방식으로 해시하고, 자체 체인 코드를 가진 자식 키를 만들어냅니다. 모든 노드에는 4,294,967,296개의 가능한 자식이 있으며, 두 부분으로 나뉩니다. 2,147,483,648 미만의 인덱스는 일반 인덱스로 공개 측만으로 계산할 수 있고, 그 경계 이상의 인덱스는 강화 인덱스로 개인 키가 필요합니다. 이 단계를 반복하면 트리가 만들어지며, 그 트리에서의 위치를 파생 경로로 표기합니다.
결정성이 이 설계를 가치 있게 만듭니다. 같은 시드를 올바른 구현에 입력하면 영원히 똑같은 키가 똑같은 순서로 만들어집니다. 키는 저장되지 않고 다시 계산될 뿐이며, 그래서 백업은 입금을 받을 때마다 커지는 파일이 아니라 문장 하나입니다.
단어는 별개의 계층이며, 이 두 계층을 혼동하는 것이 대부분의 복구 문제를 일으킵니다. BIP-39는 2,048개 단어 목록에서 고른 문구가 어떻게 시드가 되는지를 정의하며, 문자열 "mnemonic"과 선택적 패스프레이즈를 솔트로 하여 HMAC-SHA512로 2,048회 반복해 PBKDF2를 거쳐 늘립니다. BIP-32는 단어에 대해 아무것도 모르고 BIP-39는 트리에 대해 아무것도 모릅니다. 두 계층은 관례에 의해 연결되며, 그래서 두 지갑이 문구에는 동의하면서도 주소에는 동의하지 않을 수 있습니다.
Bitcoin Core는 버전 0.16.0부터 계층적 결정적 지갑만 만들어 왔습니다. 그 이전에는 지갑이 서로 무관한 무작위 키의 풀을 보관했고, 백업은 풀이 그 백업을 넘어서는 순간 쓸모없어졌습니다.
비트코인을 구매할 때 이것이 중요한 이유
지갑 설정 중에 적어 두는 문구는 앞으로 구매할 모든 코인과 사용자 사이에 놓인 유일한 것이며, 트리 구조가 그 말을 사실로 만듭니다.
한 번 백업하면 백업은 완전한 상태로 유지됩니다. 거래소에서 새 주소 100개로 출금한 100건은 모두 하나의 뿌리에서 나온 자손이므로, 이후 무엇을 하든 보호해야 할 대상이 커지지 않습니다. 이는 최초의 클라이언트가 출시된 이래 비트코인 수탁에서 가장 큰 실질적 개선이며, 동시에 시드 문구를 한 번 촬영하면 영구적으로 손상되는 이유이기도 합니다. 그 사진은 아직 구매하지 않은 코인까지 포괄하기 때문입니다.
이식성은 두 번째 이점이며, 여기에는 함정이 따릅니다. Trezor나 Ledger에 적어 둔 문구는 Sparrow, Electrum, BlueWallet에 복원되는데, 이들이 모두 같은 표준을 구현하기 때문입니다. 함정은 경로에 있습니다. BIP-44는 1로 시작하는 주소를, BIP-49는 3으로 시작하는 주소를, BIP-84는 bc1q로 시작하는 주소를, BIP-86은 bc1p로 시작하는 주소를 모두 동일한 단어에서 만들어냅니다. 기본값이 다른 목적을 쓰는 소프트웨어에 복원하면 잔액은 0으로 표시되지만 코인은 다른 가지에 그대로 남아 있습니다. 백업 옆에 파생 경로를, 그리고 그것만 기록해 두면 그러한 당황을 막을 수 있습니다.
갭 한도는 세 번째로 알아 둘 만한 사항입니다. 복원된 지갑은 BIP-44에 따라 사용하지 않은 주소 20개를 앞으로 스캔한 뒤 탐색을 멈춥니다. 한 번도 백업하지 않은 지갑에서 받기 버튼을 40번 누른 뒤 마지막 주소를 사용하는 것은 잔액이 비어 있다고 보고하는 복원을 만드는 확실한 방법입니다.
m/84'/0'/0'/0/0을 한 단계씩 읽기
파생 경로는 우편 주소처럼 작동하며 각 단계에서 범위가 좁아집니다. 표준 네이티브 SegWit 경로를 왼쪽에서 오른쪽으로 읽으십시오.
- m은 시드에서 파생된 마스터 키입니다.
- 84'는 BIP-84 목적을 선택하며, 이는 bc1q로 시작하는 네이티브 SegWit 주소를 만들어냅니다. 아포스트로피는 해당 단계가 강화되었음을 표시합니다.
- 0'은 코인 유형이며, 0은 비트코인 메인넷을 뜻합니다. 테스트넷이라면 1'입니다.
- 0'은 계정이며, 따라서 사업용 별도 계정은 1'이 됩니다.
- 0은 체인입니다. 사용자가 건네는 주소에는 0을, 잔돈에는 1을 씁니다.
- 0은 주소 인덱스이며, 입금을 받을 때마다 증가합니다.
처음 세 단계는 강화되었고 마지막 두 단계는 그렇지 않으며, 이는 의도된 것입니다. 이 구분 덕분에 계정 수준의 확장 공개 키를 감시 전용 지갑으로 내보낼 수 있고, 그 지갑은 형제 계정에 도달하거나 마스터 키 쪽으로 거슬러 올라갈 수 없으면서도 입금 주소와 잔돈 주소를 만들 수 있습니다.
HD 지갑 vs 시드 문구
HD 지갑은 파생 체계이고, 시드 문구는 그것이 시작하는 숫자를 적는 한 가지 방법입니다. BIP-32는 트리를 정의하며 128~512비트의 시드를 모두 받아들이고 256비트를 권장합니다. BIP-39는 단어를 정의합니다. Electrum은 호환되지 않는 자체 문구 형식을 배포하면서도 완전히 계층적 결정적 지갑이며, 이는 두 계층이 실제로 독립적임을 보여 줍니다. 이 구분은 소프트웨어가 BIP-39 복구를 지원한다고 주장할 때 중요합니다. 그것은 사용자의 단어를 읽는 것에 대한 약속이지, 이후 어느 가지에서 찾을 것인지에 대한 약속이 아닙니다.
HD 지갑 vs 파생 경로
HD 지갑은 트리이고, 파생 경로는 그 트리를 지나는 하나의 경로입니다. 사람들은 마치 제품 범주인 것처럼 지갑을 "BIP-84 지갑"이라고 부르지만, 어떤 BIP-32 지갑이든 어떤 경로든 이동할 수 있으며, 대부분의 최신 소프트웨어는 시드 하나로 서로 다른 목적의 여러 계정을 손쉽게 보여 줍니다. 경로는 우연히 설치한 앱의 속성이 아니라 백업과 함께 기록하는 좌표로 취급하십시오.