용어집 / 주소와 키
파생 경로
- 파생 경로란 무엇입니까?
- 파생 경로는 HD 지갑의 키 트리에서 키를 찾아가는 경로로, m/84h/0h/0h/0/0처럼 표기하며, 시드로부터 수십억 개의 키 가운데 어떤 키를 복구해야 하는지 소프트웨어에 정확히 알려줍니다.
BIP-44에 명시되어 있습니다.
경로는 좌표이지 비밀이 아닙니다. 앞쪽의 두 숫자가 여러분의 단어가 1, 3, bc1q 또는 bc1p로 시작하는 주소를 복원하는지를 결정합니다. BIP-44, BIP-49, BIP-84, BIP-86이 각각 같은 문구를 다르게 읽기 때문입니다. 백업 옆에 경로를 기록해 두는 것이 여러분의 코인을 찾아내는 복원과 0을 보고하는 복원을 가르는 차이입니다.
작동 방식
경로는 왼쪽에서 오른쪽으로 읽으며, 슬래시 하나마다 한 단계이고 각 단계는 검색 범위를 좁힙니다. 맨 앞의 m은 시드에서 생성된 마스터 키입니다. 그 뒤의 모든 것은 인덱스이며, 아포스트로피나 h는 그 인덱스가 강화(hardened)되었음을 나타냅니다.
첫 번째 단계는 목적(purpose)이며, 여러분의 주소가 어떤 모습일지를 결정하는 단계입니다.
| 표준 | 계정 경로 | 생성되는 주소 |
|---|---|---|
| BIP-44 | m/44h/0h/0h | 레거시, 1로 시작 |
| BIP-49 | m/49h/0h/0h | 중첩 SegWit, 3으로 시작 |
| BIP-84 | m/84h/0h/0h | 네이티브 SegWit, bc1q로 시작 |
| BIP-86 | m/86h/0h/0h | Taproot, bc1p로 시작 |
두 번째 단계는 SLIP-0044 등록부에서 가져온 코인 유형이며, 여기서 비트코인은 0이고 모든 테스트넷은 1입니다. 세 번째는 계정 번호로, 하나의 시드가 0h에 개인 지갑을, 1h에 사업용 지갑을 서로 이력을 공유하지 않게 담을 수 있게 하는 방식입니다. 그다음부터는 강화가 멈춥니다. 네 번째 단계는 체인으로, 여러분이 배포하는 주소에는 0, 잔돈에는 1이며, 다섯 번째는 여러분이 결제를 받을수록 올라가는 주소 인덱스입니다.
강화된 단계와 일반 단계의 이러한 구분은 의도된 것입니다. 계정 단계가 강화되어 있기 때문에 m/84h/0h/0h의 확장 공개 키를 휴대전화나 회계사에게 내보낼 수 있으며, 그들은 그 아래의 모든 수신 및 잔돈 주소를 파생할 수 있지만 다른 계정으로 옆으로 이동하거나 마스터 키 쪽으로 올라갈 수는 없습니다.
다중 서명은 자체 브랜치를 사용합니다. BIP-48은 네이티브 SegWit의 경우 공동 서명자 키를 m/48h/0h/0h/2h에 두며, 마지막 강화 단계가 스크립트 유형을 명시하므로 기기는 서명하기 전에 단일 서명 계정과 다중 서명 계정을 구별할 수 있습니다.
비트코인을 구매할 때 이것이 중요한 이유
경로는 여러분의 보안에 전혀 관여하지 않습니다. 코인을 훔치기 어려운 정도에는 아무것도 바꾸지 않으며, 여러분 앞의 소프트웨어가 코인을 찾을 수 있는지 여부에는 모든 것을 바꿉니다.
이것이 일으키는 문제는 흔하고 확실히 무섭습니다. 여러분은 거래소에서 구매하여 기기로 출금하고, 코인은 m/84h/0h/0h 아래의 bc1q 주소에 도착합니다. 1년 뒤 같은 24개의 단어를 레거시를 기본값으로 쓰는 다른 앱에 복원하면, 잔액은 0.00000000으로 표시되는데 블록 탐색기에는 여전히 여러분의 자금이 예전 주소에 손대지 않은 채로 남아 있습니다. 잃은 것은 없습니다. 그 앱이 단계마다 40억 개의 자식이 있는 트리에서 잘못된 브랜치를 살펴보고 있는 것입니다.
기본값은 이 사이트에서 리뷰한 지갑마다 다릅니다. Trezor Suite과 Ledger Live는 각각 주소 유형별로 계정을 제시하고 여러분 대신 조용히 목적을 고릅니다. Electrum은 복원 시 어떤 스크립트 유형을 원하는지 묻고 고급 옵션 뒤에 자유 입력 경로 필드를 숨겨 둡니다. Sparrow는 여러 표준 경로를 한 번에 스캔하여 어느 것에 이력이 있는지 보여 줍니다. 어느 것도 틀리지 않았으며, 어느 것도 다른 쪽이 무엇을 했는지 추측할 수 없습니다.
두 가지 습관이 문제 전체를 없앱니다. 계정 경로와 주소 유형을 지갑 이름과 같은 메모에 적고, 그 메모를 시드 없이도 닿을 수 있는 곳, 가령 비밀번호 관리자에 보관하십시오. 그 자체로는 아무것도 드러내지 않기 때문입니다. 그런 다음 복원을 신뢰하기 전에 그것이 보여 주는 첫 번째 수신 주소를 원래 기기가 보여 주는 주소와 비교하십시오. 그 두 문자열이 일치하면 그 아래의 모든 주소도 일치합니다.
24개의 단어를 Electrum에 복원했는데 0이 보일 때
잘못된 경로에서의 복원은 이렇게 전개됩니다. Trezor Model T를 24개의 단어로 설정했고, 거래소 출금이 첫 번째 네이티브 SegWit 주소로 갔으며, 이제 기기는 서랍에 놓여 있습니다. 몇 달 뒤 그 문구를 노트북의 Electrum에 입력합니다.
Electrum은 스캔하기 전에 스크립트 유형을 묻습니다. 레거시 p2pkh를 고르면 m/44h/0h/0h를 파생하고, 1로 시작하는 주소를 보여 주고, 아무것도 찾지 못하며, 빈 지갑이라고 보고합니다. 코인은 여전히 bc1q 주소에 있고, 여전히 컨펌되어 있으며, txid를 가진 누구에게나 여전히 보입니다.
해결에는 1분이 걸립니다. 다시 복원하여 네이티브 SegWit을 고르거나, 고급 파생 필드를 열어 m/84'/0'/0'을 직접 입력하십시오. Electrum이 다시 스캔하고 잔액이 나타나며, 주소 목록이 Trezor가 수신 탭 아래에 표시하는 것과 같은 문자열로 시작합니다. 그래도 0으로 표시되고 결제가 브랜치 더 아래로 갔음을 알고 있다면, 무언가 빠졌다고 단정하기 전에 기본값 20에서 갭 한도를 올리십시오.
그 과정 어디에도 코인에 대한 위험은 없었습니다. 복원은 읽기 작업이기 때문입니다. 각 목적을 차례로 하나씩 시도할 수 있으며, 유일한 비용은 각 재스캔에 걸리는 시간입니다.
파생 경로 vs 출력 디스크립터
경로는 어디인지를 말하고, 디스크립터는 어디인지, 무엇인지, 어느 키에서 시작하는지를 말합니다. 디스크립터 wpkh([fingerprint/84h/0h/0h]xpub/0/*)에는 같은 경로에 더해 래퍼 함수로서의 스크립트 유형, 확장 키 자체, 그리고 잘못 입력된 문자를 잡아내는 체크섬이 담겨 있습니다. 누군가에게 경로를 건네는 것은 여러분의 지갑에 대해 아무것도 알려 주지 않습니다. 디스크립터를 건네는 것은 여러분의 전체 주소 이력과 그 브랜치의 모든 미래 주소를 넘겨주는 것이며, 그래서 하나는 이메일로 보내도 안전하고 다른 하나는 그렇지 않습니다.