MSTR Cat

블록체인/레벨 IV · 프로토콜 심화/4.3 커스터디와 프라이버시/수업 1

HD 지갑(BIP32, BIP44, BIP84, BIP86)

하나의 시드에서 키 트리 파생하기

준비물테스트 모드(테스트넷 또는 시그넷)의 지갑(실제 시드는 절대 사용하지 않음)파생 경로를 표시하는 HD 지갑 또는 도구공책

호기심

  1. 어떻게 단 하나의 시드로 사실상 무제한에 가까운 고유하고 복구 가능한 개인 키를 생성할 수 있을까요?
  2. 왜 유출된 자식 개인 키 하나와 부모의 확장 공개 키가 함께 있으면 비강화 브랜치의 모든 키가 노출될 수 있을까요?
  3. 수수료 효율성 측면에서 레거시 P2PKH 주소와 네이티브 세그윗 또는 탭루트 주소를 구분하는 구조적 차이는 무엇일까요?

탐구

  1. 2012년 Pieter Wuille가 제안한 BIP32 이전에는 지갑이 새 주소마다 무작위 키 쌍을 생성했습니다. 지갑을 백업하려면 모든 개인 키를 하나하나 따로 저장해야 했고, 백업 파일 하나를 잃어버리면 해당 자금은 복구할 수 없었습니다. BIP32는 단일 마스터 시드에서 결정론적 키 트리를 파생하는 방식으로 이 모델을 바꾸었습니다. 이제 전체 자금 이력은 그 하나의 시드에 묶여 있으며, 이 시드는 보통 128비트 또는 256비트의 엔트로피로 생성되어 12개 또는 24개의 단어로 기록됩니다.
  2. 파생 경로는 BIP44(2014)에서 정의한 구조 `m / purpose' / coin_type' / account' / change / index`를 따릅니다. 아포스트로피는 강화 파생(hardened derivation)을 뜻합니다. 이는 매우 중요한 보안 메커니즘입니다. 비강화 파생에서는 공격자가 부모 확장 공개 키(xpub)와 자식 개인 키 하나만 손에 넣어도 부모 개인 키를 수학적으로 계산해 낼 수 있습니다. 강화 파생은 이 연결 고리를 끊습니다. 유출된 자식 개인 키와 xpub를 함께 가져도 부모의 비밀에 대해서는 아무것도 알아낼 수 없습니다.
  3. BIP44는 하나의 계층 구조 안에서 여러 암호화폐를 지원하기 위해 처음 세 단계를 표준화했습니다. `purpose'` 단계는 표준을 식별합니다(예: BIP44는 44, BIP84는 84). `coin_type'` 단계는 자산을 구분하며, 비트코인은 인덱스 0입니다. 덕분에 하나의 시드로 키를 섞지 않고 여러 암호화폐를 관리할 수 있습니다. `account'` 단계는 자금을 별도의 계정으로 나누며, 각 계정은 자체 잔돈(change) 체인을 가집니다. 확장 공개 키(xpub)는 보통 이 깊이에서 파생됩니다.
  4. BIP84는 `bc1q`로 시작하는 네이티브 세그윗 주소를 위해 표준을 갱신했습니다. 여기서는 purpose를 84로 지정합니다. 이 주소들은 트랜잭션 무게(weight) 계산에서 위트니스 데이터가 할인되어 수수료가 줄어들기 때문에 레거시 형식보다 효율적입니다. 파생 경로는 `m / 84' / 0' / account' / change / index`가 됩니다. 예를 들어 계정 0의 첫 번째 외부 주소는 `m/84'/0'/0'/0/0`에서 파생됩니다. 이 구조 덕분에 서버는 개인 키에 전혀 손대지 않고도 xpub로 수신 주소를 생성할 수 있습니다.
  5. BIP86은 2021년 Ava Chow가 탭루트용으로 작성한 별도의 파생 표준으로, purpose를 86으로 설정하고 `bc1p`로 시작하는 단일 키 탭루트 주소를 파생합니다. BIP86은 스크립트 트리가 없는 단일 키 탭루트 출력을 다룹니다. 탭루트 키 경로에는 MuSig2 키 같은 집계 키도 담을 수 있으므로, 다자간 지갑의 출력도 온체인에서는 이런 단일 키 출력과 똑같아 보일 수 있습니다.
  6. 지갑은 사용된 주소를 찾기 위해 미리 앞쪽 주소까지 스캔하며, 보통 한 체인에서 미사용 주소가 연속으로 20개 나오는 '갭 리밋(gap limit)'에 도달하면 스캔을 멈춥니다. 그 범위에서 거래가 발견되지 않으면 지갑은 해당 계정의 기존 키를 모두 찾았다고 간주합니다. 이 메커니즘을 확인하려면 최신 HD 지갑을 열고 파생 경로 설정을 찾아보세요. purpose, 코인 유형, 계정, 잔돈(change), 인덱스의 각 단계를 확인하세요. 같은 시드에서 서로 다른 두 경로를 파생해, 각각 고유한 키가 만들어지면서도 원래 니모닉으로 완전히 복구할 수 있는지 확인하세요.

핵심 사실

  • BIP32는 단일 마스터 시드에서 결정론적인 자식 키 트리를 파생합니다.
  • 강화 파생(`'`로 표시)은 자식 개인 키와 xpub가 유출되더라도 부모 키가 노출되지 않도록 막아 줍니다.
  • BIP44 경로 구조는 `m / purpose' / coin_type' / account' / change / index`입니다.
  • purpose 84는 레거시 형식보다 수수료 효율이 높은 네이티브 세그윗 주소(`bc1q`)에 해당합니다.
  • purpose 86은 단일 키 탭루트 주소(`bc1p`)에 해당합니다.
  • 지갑은 보통 미사용 주소가 연속으로 20개 나오면(갭 리밋) 스캔을 멈춥니다.

연습 아홉, 여섯, 셋, 하나

9모으기서로 다른 지갑이나 표준에서 사용하는 파생 경로 9가지를 나열하세요. 각 경로의 목적(purpose), 코인 유형, 주소 형식을 적으세요.
6묶기9개를 스크립트 유형에 따라 레거시 P2PKH, 네스티드 세그윗, 네이티브 세그윗, 탭루트, 멀티커런시, 기타의 6개 범주로 분류하세요.
3추리기6개를 지갑 개발자가 특정 파생 경로를 다른 경로 대신 선택하는 이유 3가지로 줄이세요.
1결정화강화 파생이 자식 키를 통한 노출로부터 마스터 키를 어떻게 보호하는지 한 문장으로 설명하세요.

팩트 체크

날짜, 수치 및 주장은 아래에 명시된 출처들을 통해 확인되었습니다.

인터랙티브 아카데미에서 열기 →

EN PT ES ZH JA RU DE FR MS