30 / 736BIP32

HD Wallet

계층적 결정론적 지갑

지갑은 입금할 때마다 키를 새로 백업하지 않아도 결제마다 새 주소를 제공할 수 있습니다. HD Wallet은 하나의 초기 비밀값에서 키 트리 전체를 파생합니다. 복구할 때는 지갑이 트리의 어느 부분을 사용했는지도 알아야 합니다.

HD Wallet은 시드라는 하나의 비밀 출발점에서 서로 관련된 많은 키를 계산하는 지갑입니다. 개인 키는 결제에 서명하고, 지갑은 대응하는 공개 키로 수신 주소를 만듭니다. 따라서 주소마다 별도의 백업을 만들지 않고도 새 주소를 사용할 수 있습니다.

Alice가 수신 화면을 열자 지갑에 주소가 표시됩니다. 그 주소로 비트코인의 작은 단위인 satoshi 10 000개를 받습니다. 다음 결제에는 앱이 다른 주소를 제시하고, 그곳으로 20 000 satoshi가 들어옵니다. 아직 쓰지 않은 입금이 이 둘뿐이라면 지갑은 합계 30 000 satoshi를 보여 줍니다. 새 주소가 별도의 계정을 만든 것도, 이전 자금이 자동으로 이동한 것도 아닙니다. 앱이 두 입금에 해당하는 키를 관리하는 것입니다. HD Wallet은 이를 편리하게 해 줍니다. HD는 Hierarchical Deterministic의 약자입니다. 키가 가지를 뻗는 구조이므로 계층적이고, 같은 시드와 경로로는 복구할 때도 같은 키가 만들어지므로 결정론적입니다. 경로는 어느 가지의 어느 키를 계산할지 프로그램에 알려 주는 숫자들의 순서입니다. 평소 결제를 받을 때 Alice가 직접 다룰 일은 드물지만, 복구 시에는 올바른 경로를 사용해야 합니다. 따라서 시작 비밀 정보의 백업 하나로 미래 주소까지 관리할 수 있지만, 지갑 설정도 보존해야 합니다. 새 주소는 주소 재사용을 피하는 데 도움이 될 뿐, 그 자체로 익명성을 보장하지는 않습니다. [1] [12]

확장 공개 키는 보통 xpub라고 하며, 이 구조의 일부에 속한 공개 키를 계산할 수 있게 해 줍니다. 결제 서명에 필요한 개인 키는 들어 있지 않습니다. 따라서 xpub만으로 자금을 쓸 수는 없으며, 실제 주소를 만들려면 앱이 주소 형식도 알아야 합니다. 적절한 xpub가 있는 watch-only 지갑은 서명 키 없이 주소를 만들고 결제를 추적합니다. 그러나 xpub가 유출되면 해당 가지의 과거와 미래 주소, 잔액, 거래가 연결될 수 있습니다. 필요한 갈래만 공유하세요. 올바른 xpub라도 침해된 컴퓨터가 남의 주소를 표시하는 것은 막지 못합니다. 해당 지갑을 알고 있는 신뢰할 수 있는 서명 장치에서 수신 주소를 확인하세요. [1] [12] [14]

상점은 주문마다 다른 주소를 만들 수 있습니다. 웹사이트에는 주소가 필요하지만 매출을 쓸 수 있는 키까지 있어서는 안 됩니다. BIP32는 이 수신 가지를 나머지 지갑과 분리합니다. 제안 작성자는 Pieter Wuille이며 할당일은 2012년 2월 11일입니다. 지갑 표준이지 합의 규칙은 아닙니다. BIP39 백업 단어, 스크립트 유형, 전체 복구 절차는 다른 계층에서 다룹니다. [1] [11] [12]

BIP32는 키에 256비트 chain code, 즉 다음 파생에 쓸 32바이트를 더합니다. 비공개 형태는 secp256k1 스칼라 k와 chain code c로 구성되고, 공개 형태는 K = point(k)와 같은 c를 사용합니다. 마스터 키 생성에는 HMAC-SHA512를 사용하며 함수의 키는 정확한 문자열 “Bitcoin seed”, 데이터는 시드입니다. 왼쪽 32바이트는 개인키 후보, 오른쪽 32바이트는 chain code입니다. 후보가 0이거나 곡선의 위수 n 이상이면 마스터 키가 유효하지 않습니다. [1]

파생은 저장된 목록을 찾는 것이 아니라 계산입니다. 파생에는 일반 방식과 hardened 방식이 있습니다. 일반 방식은 부모 확장 공개 키로 다음 공개 키를 계산할 수 있지만, hardened 단계에는 부모 확장 개인 키가 필요합니다. CKDpriv는 I = HMAC-SHA512(cpar, data)를 계산해 IL과 IR로 나눈 뒤, parse256(IL)을 부모 개인키에 더하고 n으로 나눈 나머지를 취합니다. IR은 새 chain code가 됩니다. 일반 파생은 serP(Kpar) || ser32(i), hardened 파생은 0x00 || ser256(kpar) || ser32(i)를 사용하며 i ≥ 2^31입니다. CKDpub는 Kpar에 point(parse256(IL))을 더해 일반 공개키 가지만 만듭니다. 가지 번호가 바뀌면 이후 키도 달라집니다. [1]

경로가 hardened 단계를 지나지 않는 동안은 xpub에서 공개키를 파생할 수 있습니다. 대신 중요한 위험이 있습니다. 부모 xpub와 유출된 일반 자식 개인키를 함께 알면 부모 개인키를 계산할 수 있습니다. 그 부모의 다른 가지도 위험해집니다. Hardened는 이 역산을 막지만, 시드 도난이나 약한 난수, 악의적인 거래의 잘못된 승인은 막지 못합니다. [1]

mainnet의 표준 공개키 표기는 xpub, 개인키 표기는 xprv로 시작하며 버전은 각각 0x0488B21E와 0x0488ADE4입니다. Base58Check 인코딩 전 레코드는 78바이트입니다. 버전 4, 깊이 1, 부모 지문 4, 자식 번호 4, chain code 32, 키 데이터 33으로 구성됩니다. 결과는 111자입니다. 짧은 지문은 키를 연결하는 데 도움이 되지만 신원 증명은 아닙니다. SLIP132의 ypub/zpub 접두사는 때로 스크립트 유형을 나타내지만, 접두사만 바꿔도 키나 지갑 규칙이 바뀌는 것은 아닙니다. [1] [9]

BIP43는 첫 hardened 수준을 용도에 할당했습니다. BIP44는 m / 44' / coin_type' / account' / change / address_index를 사용합니다. 계정 다음에는 수신용 가지 0 또는 잔돈용 가지 1, 그 뒤에 주소 번호가 옵니다. 아포스트로피나 h는 인덱스에 2^31을 더한다는 뜻입니다. BIP44 탐색은 gap limit 20을 사용해 미사용 수신 주소가 20개 연속 나오면 멈춥니다. BIP48는 Multisig, BIP84의 용도 84'는 네이티브 SegWit, BIP86의 86'는 단일 키 Taproot를 설명합니다. 이 관례는 시드 자체에 저장되지 않으며 노드가 강제하지도 않습니다. [2] [3] [4] [5] [6]

키만으로는 자금을 보호할 스크립트가 정해지지 않습니다. Output Descriptor는 키의 출처, 경로, wpkh() 같은 구성, 필요한 서명 수, 다른 Multisig 참여자와 체크섬을 기록할 수 있습니다. Multipath descriptor는 수신 가지와 잔돈 가지를 함께 표현합니다. 한 참여자의 시드는 다른 xpub나 공통 규칙을 복원하지 못합니다. 검증된 공개 descriptor 또는 설정 내보내기도 백업하고 사생활 정보를 보호하세요. 내보내기에 개인키가 포함되어 있다면 비밀로 취급해야 합니다. [7] [8] [10] [13]

시드로 키를 다시 파생할 수 있지만 앱에는 시드 형식, 사용한 BIP39 passphrase, 네트워크, 스크립트 유형, coin type, 계정, 두 갈래와 탐색 범위가 필요합니다. Multisig에는 공통 설정도 필요합니다. 복구 후 잔액이 0이라고 반드시 코인이 사라진 것은 아닙니다. 다른 경로를 검색했을 수 있습니다. 신뢰할 수 있는 장치에서 안전하게 시험해 올바른 UTXO, 즉 아직 쓰지 않은 거래 출력을 찾고 서명을 확인해야 합니다. 실제 시드나 백업 단어를 웹 도구나 일반 온라인 컴퓨터에 입력하지 마세요. [3] [7] [10] [11]

BIP32는 parse256(IL) ≥ n, 파생 개인키가 0이거나 공개 점이 무한원점인 드문 무효 결과도 다룹니다. 이런 자식 키에서는 다음 인덱스를 시도합니다. 복구에서 더 흔한 문제는 경로나 잔돈 가지가 없거나 스크립트 유형을 지원하지 않는 것입니다. 앱을 바꾸기 전에 자금 탐색과 소액 시험 송금을 확인하세요. 새 절차가 작동할 때까지 원래 백업과 설정을 유지합니다. xprv는 서명에 필요한 키를 제공하고, xpub는 금융 관계를 드러내며, descriptor는 지갑 구성 방법을 설명합니다. [1] [7] [9] [10]

더 정확히 이해하려면 이 항목과 함께 다음도 읽어 보세요 지갑, Seed Phrase, Extended Public Key (xpub), Derivation Path, Gap Limit, Bitcoin. 다음 항목에서도 이 글을 참조합니다 비트코인 주소, BIP 39, Cold Storage, Watch-only Wallet.

DOC · 001BIP 32 — Hierarchical deterministic wallets명세 DOC · 002BIP 43 — Purpose field for deterministic wallets명세 DOC · 003BIP 44 — Multi-account hierarchy명세 DOC · 004BIP 48 — Multi-script hierarchy for multisig wallets명세 DOC · 005BIP 84 — Native SegWit derivation명세 DOC · 006BIP 86 — Single-key Taproot derivation명세 DOC · 007BIP 380 — Output script descriptors명세 DOC · 008BIP 389 — Multipath descriptor key expressions명세 DOC · 009SLIP 132 — Registered HD version bytes명세 DOC · 010Bitcoin Core — Output descriptors문서 DOC · 011BIP 39 — Mnemonic code for deterministic keys명세 DOC · 012Bitcoin Developer Guide — Wallets문서 DOC · 013Bitcoin Optech — Output script descriptors문서 DOC · 014Trezor Learn — Hierarchical deterministic wallets문서
개정일: 1차 출처 우선 · 투자 조언이 아닙니다