HD Wallet and Key Management
지갑은 본질적으로 Key Pair 를 관리하는 시스템이다.
지갑은 Private Key 를 안전하게 보관하고, 이를 사용해서 트랜잭션에 서명하며, 대응하는 Public Key 와 Address 를 생성하는 소프트웨어 혹은 하드웨어다.
거래소의 입출금 지갑을 만든다고 생각해보자. 사용자가 100만명이라면, 100만개의 Private Key 가 필요할까?
이런 방식으로 키를 관리하는 것은 너무나 힘든 일이고, 이런 문제를 해결하기 위해서 HD Wallet 이 등장했다.
HD Wallet 은 하나의 Seed 로 부터 무한한 수의 키 쌍을 결정론적으로 파생할 수 있는 방식이다.
이를 통해 단 하나의 백업(니모닉 12~24단어)로 모든 키를 복구할 수 있게 되었다.
Key Pair 의 기초
블록체인에서 모든 것은 Private Key 에서 시작된다. 키 생성의 기본 흐름은 다음과 같다:
-
Private Key 생성 (256 비트 난수)
-
타원 곡선 암호학 (ECDSA, secp256k1 적용)
-
Public Key 도출 (압축: 33바이트 또는 비압축: 65바이트)
-
해싱 (keccak256 for Ethereum, SHA256 + RIPEMD-160 for Bitcoin)
-
Address 생성
타원곡선 암호학 (ECDSA, secp256k1)
비트코인과 이더리움은 secp256k1 이라는 타원 곡선을 사용한다. 이 암호학의 핵심 특성은:
-
Private Key(d): 임의의 256비트 정수 (1 ~ n-1, n은 곡선의 위수)
-
Public Key(Q): Q = d × G, 여기서 G는 곡선의 생성점, Q는 타원 곡선 상의 점 (x, y) 좌표

결과적으로:
비압축 Public Key: 0×04 + x좌표(32바이트) + y좌표(32바이트) = 65바이트
압축 Public Key: 0×02/0×03 + 좌표(32바이트) = 33바이트
압축 Public Key 의 경우 y의 짝수/홀수에 따라 0×02 또는 0×03 이다)
왜 Private Key 에서 Public Key 는 구할 수 있지만 역은 불가능한가?
이것이 바로 타원 곡선 암호학의 일방향 함수 특징이다.
정방향 (쉬움, O(1)): Private Key (d) → Public Key (Q = d × G)
예: 5 × G를 계산하는 것은 G + G + G + G + G로 쉽게 계산 가능
역방향 (거의 불가능, O(2^128)): Public Key (Q) → Private Key (d)를 찾으려면 “Q = d × G를 만족하는 d를 찾아라”
→ 이산 로그 문제(Discrete Logarithm Problem)
현재 알려진 최선의 공격:
-
무차별 대입(Brute Force): 2^256 경우의 수 (우주의 원자보다 많음)
-
Pollard’s rho: 약 2^128 연산 (여전히 현실적으로 불가능)
BIP-39: 니모닉 (Mnemonic)
니모닉이란?
BIP-39는 사람이 읽을 수 있는 단어 목록으로 시드를 표현하는 표준이다.
256비트의 무작위 16진수를 기억하는 것은 거의 불가능하지만, 12개 또는 24개의 단어는 종이에 보관하거나 기억할 수 있다.
이 12개 단어로부터 수천, 수만 개의 블록체인 주소를 복구할 수 있습니다.
니모닉 생성 과정
-
엔트로피 생성: 128비트(12단어) ㄸ는 256비트(25단어)의 무작위 엔트로피를 생성한다.
-
체크섬 추가: 엔트로피를 SHA256 해싱한 뒤에, 앞 4비트(또는 8비트)를 체크섬으로 사용한다.
-
11비트 단위로 분할: 엔트로피 + 체크섬 = 132비트 (128 + 4) 를 11로 나누면 12그룹이 나온다.
각 11비트는 0 ~ 2047 의 인덱스를 나타낸다. -
BIP-39 는 2048개의 영어 단어 목록을 정의해뒀다. 인덱스에 맞게 단어를 매핑한다.
니모닉을 Seed 로 변환 (PBKDF2)
니모닉 자체는 시드가 아니다. 니모닉을 512비트 시드로 변환해야한다.
입력:
-
니모닉: “witch collapse practice feed … least”
-
Passphrase: 선택적 추가 보안 (없으면 빈 문자열)
알고리즘: PBKDF2-HMAC-SHA512
-
반복 횟수: 2048번
-
Salt: “mnemonic” + passphrase
출력: 512비트 시드 (64바이트)
예: 0x4b381541583be4423346c643850da4b320e46a87ae3d2a4e6da11eba819cd4acba…
이 512비트 시드가 BIP-32 HD Wallet의 Master Seed가 된다.
BIP-32: HD (Hierarchical Deterministic) Wallet
BIP-32는 단일 시드로부터 트리 구조로 무한한 키 쌍을 파생하는 표준이다. 이는 백업과 관리를 극적으로 단순화한다.
핵심 아이디어:
Master Seed (512비트)
↓
Master Private Key + Master Chain Code
↓
Child Keys를 결정론적으로 파생
↓
Child의 Child를 무한히 파생 가능
Hardened vs Normal Derivation
BIP-32는 두 가지 파생 모드를 제공한다:
Normal 과 Hardened 가 그것인데, 특징은:
-
Normal: xpub 만으로 자식 Public Key 파생 가능 → 감시 전용 지갑 구현 가능, xpub + 한 개의 자식 private key 가 노출되면 부모 private 를 역산할 수 있다.
-
Hardened: xpub 만으로는 자식 Public Key 를 파생할 수 없다, Private Key 정보를 파생에 사용한다. Normal 과 같은 역산이 불가능하다.
BIP-44: 다중 체인 경로 표준(Derivation Path)
BIP-44는 다중 블록체인, 다중 계정을 지원하는 표준 경로 체계를 정의한다:

왜 이런 구조인가?
-
다중 체인 지원: 하나의 니모닉으로 이더리움, 비트코인, 기타 체인 모두 관리
-
다중 계정: 개인, 사업, 저축 등 용도별 분리
-
프라이버시: change 주소 분리로 거래 추적 어렵게 함 (비트코인 UTXO)
-
표준화: 지갑 간 호환성 (MetaMask, Ledger, Trezor 모두 BIP-44 지원)