BIP-44 도출 경로: 지갑이 주소를 생성하는 방법
암호화폐 지갑을 설정하고 시드 문구를 생성하면, 그 단일 시드에서 수십 개의 다른 블록체인에 걸쳐 수천 개의 주소를 생성해야 합니다 — 각각 고유한 개인 키, 공개 키, 주소 형식을 가지고 있습니다. BIP-44는 이를 가능하게 하는 조직 구조를 정의합니다: 단일 루트에서 도출된 계층적 키 트리와 지갑 간 호환성을 보장하는 표준화된 경로 표기법입니다.
도출 경로를 이해하는 것은 다른 지갑에서 자금을 복구하거나, 멀티코인 포트폴리오를 관리하거나, 시드 문구 복원 후 "누락된" 잔액을 해결해야 하는 모든 사람에게 필수적입니다.
키 도출 계층
BIP-32: 기반
BIP-44는 단일 마스터 키에서 무한한 키 페어 트리를 도출하는 방법을 정의하는 BIP-32(계층적 결정론적 지갑)를 기반으로 합니다. BIP-32는 두 가지 기본 개념을 도입했습니다:
자식 키 도출 — 모든 확장 키(개인 키 또는 공개 키와 체인 코드의 조합)에서 다양한 인덱스의 자식 키를 도출할 수 있습니다. 각 자식은 자체 자식을 도출할 수 있어 트리를 생성합니다.
강화 vs. 일반 도출 — 일반 도출은 부모 공개 키에서 자식 공개 키를 도출할 수 있게 해줍니다(조회 전용 지갑에 유용). 강화 도출은 부모 개인 키가 필요하며 브랜치 간 더 강력한 보안 격리를 제공합니다. 강화 인덱스는 관례적으로 아포스트로피로 표시됩니다(예: 44').
BIP-43: 목적 필드
BIP-43는 도출 트리의 첫 번째 레벨을 "목적(Purpose)"을 나타내는 데 사용하는 관례를 확립했습니다 — 본질적으로 따르는 BIP 표준을 나타냅니다. BIP-44는 목적 44'를 사용하고, BIP-49는 49'(SegWit 호환 P2SH 주소용), BIP-84는 84'(네이티브 SegWit용), BIP-86은 86'(Taproot용)을 사용합니다.
BIP-44: 전체 경로
BIP-44는 5단계 도출 경로를 정의합니다:
m / purpose' / coin_type' / account' / change / address_index
각 단계는 특정 의미를 가집니다:
| 레벨 | 필드 | 강화 | 설명 |
|---|---|---|---|
| 1 | 목적 | 예 (44') | 도출 표준을 식별 |
| 2 | 코인 유형 | 예 | 암호화폐를 식별 |
| 3 | 계정 | 예 | 자금을 논리적 계정으로 분리 |
| 4 | 변경 | 아니오 (0 또는 1) | 외부(0) 또는 내부 변경(1) |
| 5 | 주소 인덱스 | 아니오 (0, 1, 2...) | 순차적 주소 번호 |
목적 (44')
목적 필드는 BIP-44 표준 도출의 경우 항상 44'입니다. 다른 일반적인 값:
49'— BIP-49 (P2SH 래핑 SegWit)84'— BIP-84 (네이티브 SegWit / Bech32)86'— BIP-86 (Taproot / P2TR)
이것들은 서로 다른 주소 유형을 정의하며 각각의 BIP에서 설명됩니다.
코인 유형
코인 유형은 도출된 키가 어떤 암호화폐에 속하는지 식별합니다. 등록된 코인 유형:
| 코인 | 코인 유형 | 경로 접두사 |
|---|---|---|
| 비트코인 | 0' | m/44'/0' |
| 비트코인 테스트넷 | 1' | m/44'/1' |
| 라이트코인 | 2' | m/44'/2' |
| 도지코인 | 3' | m/44'/3' |
| 이더리움 | 60' | m/44'/60' |
| 이더리움 클래식 | 61' | m/44'/61' |
| 코스모스 | 118' | m/44'/118' |
| 솔라나 | 501' | m/44'/501' |
| 카르다노 | 1815' | m/44'/1815' |
| 폴카닷 | 354' | m/44'/354' |
코인 유형의 전체 레지스트리는 SLIP-44에서 관리되며 1,000개 이상의 항목이 포함되어 있습니다.
계정
계정 레벨은 사용자가 같은 지갑 내에서 여러 은행 계좌를 갖는 것처럼 별도의 논리적 계정을 만들 수 있게 합니다. 계정 0'이 기본값입니다:
m/44'/0'/0'— 비트코인 계정 0m/44'/0'/1'— 비트코인 계정 1m/44'/60'/0'— 이더리움 계정 0
계정은 강화 도출을 사용하므로, 한 계정의 확장 공개 키를 알아도 다른 계정의 키를 드러내지 않습니다. 이는 계정 간 프라이버시 격리를 제공합니다.
변경
변경 레벨은 다음을 구분합니다:
- 0 (외부 체인) — 결제를 받기 위해 다른 사람에게 제공하는 주소.
- 1 (내부 체인) — 지갑이 내부적으로 거스름돈을 반환하는 데 사용하는 주소.
비트코인의 UTXO 모델에서 트랜잭션 출력을 지출할 때 전체 출력이 소비되어야 합니다. 1 BTC 출력에서 0.5 BTC를 보내는 경우, 나머지 0.5 BTC는 여러분의 지갑이 제어하는 거스름돈 주소로 전송됩니다. 변경 체인은 이러한 주소를 수신 주소와 조직 및 프라이버시 목적으로 분리합니다.
이더리움 및 기타 계정 기반 블록체인은 UTXO 모델이 없으므로 같은 방식으로 변경 체인을 사용하지 않습니다. 이더리움 지갑은 일반적으로 외부 체인(변경 = 0)만 사용합니다.
주소 인덱스
주소 인덱스는 체인 내 주소의 순차적 번호입니다. 지갑은 새 주소가 생성될 때마다 이 카운터를 증가시킵니다:
m/44'/0'/0'/0/0— 첫 번째 수신 주소m/44'/0'/0'/0/1— 두 번째 수신 주소m/44'/0'/0'/0/2— 세 번째 수신 주소m/44'/0'/0'/1/0— 첫 번째 거스름돈 주소m/44'/0'/0'/1/1— 두 번째 거스름돈 주소
주요 암호화폐의 도출 경로
비트코인
비트코인은 다양한 주소 유형에 해당하는 여러 도출 경로를 사용합니다:
| 표준 | 경로 | 주소 유형 | 접두사 | 예시 |
|---|---|---|---|---|
| BIP-44 | m/44'/0'/0' | 레거시 (P2PKH) | 1... | 1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa |
| BIP-49 | m/49'/0'/0' | SegWit 호환 (P2SH-P2WPKH) | 3... | 3J98t1WpEZ73CNmQviecrnyiWrnqRhWNLy |
| BIP-84 | m/84'/0'/0' | 네이티브 SegWit (P2WPKH) | bc1q... | bc1qw508d6qejxtdg4y5r3zarvary0c5xw7kv8f3t4 |
| BIP-86 | m/86'/0'/0' | Taproot (P2TR) | bc1p... | bc1p5d7rjq7g6rdk2yhzks9smlaqtedr4dekq08ge8ztwac72sfr9rusxg3297 |
복구 시 중요 사항: 새 지갑에서 시드 문구를 복원한 후 잔액이 보이지 않으면, 지갑이 원래 지갑에서 사용한 것과 다른 도출 경로를 검색하고 있을 수 있습니다. 레거시, SegWit, Taproot 주소 유형을 전환하거나 도출 경로를 수동으로 지정해 보세요.
이더리움
이더리움은 일반적으로 단일 도출 경로를 사용합니다:
m/44'/60'/0'/0/0 — 첫 번째 계정
m/44'/60'/0'/0/1 — 두 번째 계정 (일부 지갑)
그러나 일부 지갑(예: Ledger Live)은 계정 레벨에서 여러 계정을 도출합니다:
m/44'/60'/0'/0/0 — 계정 0
m/44'/60'/1'/0/0 — 계정 1
m/44'/60'/2'/0/0 — 계정 2
반면 다른 지갑(예: MetaMask)은 주소 인덱스를 증가시킵니다:
m/44'/60'/0'/0/0 — 계정 1
m/44'/60'/0'/0/1 — 계정 2
m/44'/60'/0'/0/2 — 계정 3
이 불일치는 복구 시 혼란을 야기할 수 있습니다. 항상 어떤 지갑 소프트웨어가 시드 문구를 생성했는지 기록하세요.
솔라나
솔라나는 Ed25519(secp256k1과 다른 타원 곡선)를 다음 경로로 사용합니다:
m/44'/501'/0' — Phantom, Solflare
m/44'/501'/0'/0' — 일부 구현
카르다노
카르다노는 다른 키 도출 체계(Ed25519-BIP32 / CIP-1852)를 다음 경로로 사용합니다:
m/1852'/1815'/0'/0/0 — 첫 번째 결제 주소
m/1852'/1815'/0'/2/0 — 첫 번째 스테이킹 키
목적 필드가 44' 대신 1852'(Ada Lovelace의 탄생 연도를 딴 CIP-1852)임에 주의하세요.
강화 vs. 일반 도출
강화 도출과 일반 도출의 차이를 이해하는 것은 보안에 매우 중요합니다.
일반 (비강화) 도출
- 0에서 2^31 - 1까지의 인덱스를 사용합니다.
- 부모 개인 키 없이 부모 확장 공개 키에서 자식 공개 키를 도출할 수 있습니다.
- 장점: 조회 전용 지갑을 가능하게 합니다(예: 서버가 xpub만으로 새 수신 주소를 생성하며 개인 키를 보유하지 않음).
- 위험: 공격자가 자식 개인 키와 부모 확장 공개 키를 모두 획득하면 부모 개인 키와 모든 형제 개인 키를 계산할 수 있습니다.
강화 도출
- 2^31에서 2^32 - 1까지의 인덱스를 사용합니다(0'에서 2^31 - 1'로 표기).
- 자식 키를 도출하려면 부모 확장 개인 키가 필요합니다.
- 장점: 자식 키가 손상되어도 부모나 형제가 손상되지 않습니다.
- 위험: 부모 확장 공개 키만으로는 자식 공개 키를 도출할 수 없습니다(이 레벨에서는 조회 전용 기능 없음).
BIP-44가 처음 세 레벨에 강화 도출을 사용하는 이유
목적, 코인 유형, 계정은 모두 강화(44'/0'/0')입니다. 그 이유는:
- 주소 개인 키(비강화 레벨 5)가 손상되어도 계정이 손상되어서는 안 됩니다.
- 계정은 서로 격리되어야 합니다.
- 다른 코인은 서로 격리되어야 합니다.
변경 및 주소 인덱스 레벨은 마스터 개인 키 없이 조회 전용 지갑이 수신 주소를 생성할 수 있도록 비강화(0/0)입니다.
갭 리밋
지갑은 무한한 수의 주소를 검색하지 않습니다. BIP-44 사양은 "갭 리밋(Gap Limit)" 개념을 도입합니다 — 지갑이 중지하기 전에 검색하는 연속 미사용 주소의 수입니다. 표준 갭 리밋은 20입니다.
0에서 25까지 주소를 생성했지만 주소 0, 5, 10, 25만 자금을 받은 경우, 지갑은:
- 주소 0 검색 — 거래가 있음, 계속.
- 주소 1-4 검색 — 미사용이지만 갭 리밋 이내.
- 주소 5 검색 — 거래가 있음, 갭 카운터 재설정.
- 거래가 없는 연속 20개 주소를 만날 때까지 계속.
문제: 갭 리밋을 초과하는 많은 주소를 생성한 경우(가맹점 결제 처리기에서 흔함), 지갑 복원 시 모든 자금을 찾지 못할 수 있습니다. 복구 중 지갑 설정에서 갭 리밋을 늘려야 할 수 있습니다.
**SafeSeed 키 도출 도구**를 사용하여 BIP-44 도출 경로를 대화형으로 탐색하세요. 시드 문구(실제 문구가 아닌 테스트 문구)를 입력하고 다른 도출 경로가 다른 코인에 대해 다른 주소를 생성하는 것을 확인하세요. 모든 처리는 브라우저에서 이루어집니다.
확장 키: xpub, ypub, zpub
확장 키는 도출 경로에 대한 메타데이터와 함께 키 자료를 인코딩합니다:
| 접두사 | 표준 | 주소 유형 | 네트워크 |
|---|---|---|---|
| xpub / xprv | BIP-44 | 레거시 (P2PKH) | 메인넷 |
| ypub / yprv | BIP-49 | SegWit 호환 (P2SH-P2WPKH) | 메인넷 |
| zpub / zprv | BIP-84 | 네이티브 SegWit (P2WPKH) | 메인넷 |
| tpub / tprv | BIP-44 | 레거시 (P2PKH) | 테스트넷 |
접두사는 지갑 소프트웨어에 어떤 주소 유형을 도출할지 알려줍니다. xpub을 내보내어 zpub을 기대하는 지갑에 가져오면 다른 (잘못된) 주소를 볼 수 있습니다.
확장 공개 키 프라이버시 경고
xpub(또는 ypub/zpub)을 공유하면 수신자가 다음을 할 수 있습니다:
- 모든 과거 및 미래 수신 주소를 도출할 수 있습니다.
- 완전한 거래 내역과 잔액을 추적할 수 있습니다.
- 주소를 연결하여 거래마다 새 주소를 사용하는 프라이버시 이점을 파괴합니다.
금융 프라이버시를 완전히 신뢰하는 당사자(예: 회계사, 자체 서버의 조회 전용 지갑)를 제외하고는 확장 공개 키를 공유하지 마세요.
일반적인 도출 경로 문제
"시드 문구를 복원했는데 잔액이 0으로 표시됩니다"
이것은 가장 흔한 도출 경로 문제입니다. 가능한 원인:
- 잘못된 주소 유형 — SegWit 주소(BIP-84,
m/84'/0'/0')를 사용했는데 새 지갑이 레거시 경로(BIP-44,m/44'/0'/0')를 검색하고 있습니다. 주소 유형을 전환하세요. - 잘못된 코인 유형 — 일부 지갑은 이전 구현에서 모든 코인에 코인 유형 0을 사용했습니다.
- 잘못된 계정 — 계정 1 이상을 사용했을 수 있습니다.
- 갭 리밋 — 사용된 주소가 기본 갭 리밋 20을 초과했습니다.
- 커스텀 도출 경로 — 일부 지갑은 비표준 경로를 사용합니다.
"같은 시드 문구로 두 지갑이 다른 주소를 표시합니다"
두 지갑이 같은 시드 문구에서 다른 주소를 생성하면, 다른 도출 경로나 주소 유형을 사용하고 있는 것입니다. 두 지갑의 도출 설정을 확인하세요.
복구 체크리스트
시드 문구에서 지갑을 복원할 때:
- 지갑이 BIP-39를 지원하는지 확인합니다.
- 올바른 주소 유형(레거시, SegWit 또는 Taproot)을 선택합니다.
- 도출 경로가 원래 지갑과 일치하는지 확인합니다.
- 많은 주소를 사용한 경우 갭 리밋을 늘립니다.
- 여러 계정을 만든 경우 계정 0뿐만 아니라 모든 계정을 확인합니다.
고급: 커스텀 도출 경로
일부 고급 사용 사례는 커스텀 도출 경로가 필요합니다:
- 다중 서명 설정 — BIP-48은 멀티시그 지갑의 도출 경로를 정의합니다:
m/48'/0'/0'/2'(네이티브 SegWit 멀티시그용). - 라이트닝 네트워크 — 일부 라이트닝 구현은 채널 키에 커스텀 도출 경로를 사용합니다.
- 프라이버시 지갑 — Wasabi 및 기타 프라이버시 중심 지갑은 특정 경로를 사용할 수 있습니다.
사용하는 도출 경로를 항상 문서화하세요. 정확한 경로를 재구성할 수 없으면 자금을 복구할 수 없습니다.
FAQ
암호화폐에서 도출 경로란 무엇인가요?
도출 경로는 계층적 결정론적(HD) 지갑에서 마스터 시드로부터 특정 키나 주소를 도출하는 방법을 지정하는 구조화된 표기법입니다. m/purpose'/coin_type'/account'/change/address_index 형식을 따르며, 각 레벨이 도출 트리에서 특정 키로 좁혀갑니다.
왜 다른 암호화폐가 다른 코인 유형을 사용하나요?
다른 코인 유형은 같은 시드 문구가 각 블록체인에 대해 별도의 관련 없는 키를 생성하도록 보장합니다. 이는 우발적인 크로스체인 간섭을 방지하고, 한 체인의 키가 손상되어도 다른 체인의 키에 영향을 주지 않도록 합니다.
같은 시드 문구를 비트코인과 이더리움에 사용할 수 있나요?
예. 같은 BIP-39 시드 문구로 비트코인과 이더리움(및 다른 많은 암호화폐)의 키를 도출할 수 있습니다. 다른 도출 경로를 사용합니다 — 비트코인은 m/44'/0'/0'이고 이더리움은 m/44'/60'/0' — 이므로 도출된 키와 주소는 완전히 독립적입니다.
도출 경로에서 아포스트로피(')는 무엇을 의미하나요?
아포스트로피는 강화 도출을 나타냅니다. 강화 도출은 부모 개인 키가 필요하며 더 강력한 보안 격리를 제공합니다: 자식 키가 손상되어도 부모나 형제 키가 드러나지 않습니다. 아포스트로피가 없는 비강화 레벨은 부모 공개 키에서 자식 공개 키 도출을 허용합니다.
시드 문구를 복원한 후 지갑 잔액이 0으로 표시되는 이유는 무엇인가요?
가장 흔한 원인은 도출 경로 불일치입니다. 원래 지갑이 다른 주소 유형(레거시 vs. SegWit vs. Taproot)을 사용했을 수 있으며, 각각 다른 도출 경로를 사용합니다. 복구 지갑에서 주소 유형을 전환하거나, 원래 지갑이 사용한 도출 경로를 수동으로 지정해 보세요.
갭 리밋이란 무엇이며 왜 중요한가요?
갭 리밋은 지갑이 더 이상 사용된 주소가 없다고 가정하기 전에 검색하는 연속 미사용 주소의 수입니다. BIP-44 표준은 이를 20으로 설정합니다. 많은 주소를 생성한 경우(예: 결제를 수락하는 가맹점), 일부 자금이 있는 주소가 갭 리밋을 초과하여 복구 중 보이지 않을 수 있습니다. 이를 찾으려면 지갑 설정에서 갭 리밋을 늘리세요.
모든 지갑이 BIP-44를 사용하나요?
대부분의 현대 지갑은 BIP-44 또는 그 후속 표준(BIP-49, BIP-84, BIP-86)을 지원합니다. 그러나 일부 지갑은 독점적인 도출 경로를 사용합니다. 예를 들어, Electrum은 자체 니모닉 및 도출 체계를 사용합니다. 항상 어떤 지갑이 시드 문구를 생성했고 어떤 도출 경로를 사용하는지 문서화하세요.