HD Wallet and Key Management

· 5분 읽기

지갑은 본질적으로 Key Pair 를 관리하는 시스템이다.

지갑은 Private Key 를 안전하게 보관하고, 이를 사용해서 트랜잭션에 서명하며, 대응하는 Public Key 와 Address 를 생성하는 소프트웨어 혹은 하드웨어다.

거래소의 입출금 지갑을 만든다고 생각해보자. 사용자가 100만명이라면, 100만개의 Private Key 가 필요할까?

이런 방식으로 키를 관리하는 것은 너무나 힘든 일이고, 이런 문제를 해결하기 위해서 HD Wallet 이 등장했다.

HD Wallet 은 하나의 Seed 로 부터 무한한 수의 키 쌍을 결정론적으로 파생할 수 있는 방식이다.

이를 통해 단 하나의 백업(니모닉 12~24단어)로 모든 키를 복구할 수 있게 되었다.

Key Pair 의 기초

블록체인에서 모든 것은 Private Key 에서 시작된다. 키 생성의 기본 흐름은 다음과 같다:

  1. Private Key 생성 (256 비트 난수)

  2. 타원 곡선 암호학 (ECDSA, secp256k1 적용)

  3. Public Key 도출 (압축: 33바이트 또는 비압축: 65바이트)

  4. 해싱 (keccak256 for Ethereum, SHA256 + RIPEMD-160 for Bitcoin)

  5. Address 생성

타원곡선 암호학 (ECDSA, secp256k1)

비트코인과 이더리움은 secp256k1 이라는 타원 곡선을 사용한다. 이 암호학의 핵심 특성은:

  • Private Key(d): 임의의 256비트 정수 (1 ~ n-1, n은 곡선의 위수)

  • Public Key(Q): Q = d × G, 여기서 G는 곡선의 생성점, Q는 타원 곡선 상의 점 (x, y) 좌표

EllipticCurveReal.png

결과적으로:

비압축 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개 단어로부터 수천, 수만 개의 블록체인 주소를 복구할 수 있습니다.

니모닉 생성 과정

  1. 엔트로피 생성: 128비트(12단어) ㄸ는 256비트(25단어)의 무작위 엔트로피를 생성한다.

  2. 체크섬 추가: 엔트로피를 SHA256 해싱한 뒤에, 앞 4비트(또는 8비트)를 체크섬으로 사용한다.

  3. 11비트 단위로 분할: 엔트로피 + 체크섬 = 132비트 (128 + 4) 를 11로 나누면 12그룹이 나온다.
    각 11비트는 0 ~ 2047 의 인덱스를 나타낸다.

  4. 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는 다중 블록체인, 다중 계정을 지원하는 표준 경로 체계를 정의한다:

BIP-44 Derivation Path and Wallet Structure - theBTCindex

왜 이런 구조인가?

  1. 다중 체인 지원: 하나의 니모닉으로 이더리움, 비트코인, 기타 체인 모두 관리

  2. 다중 계정: 개인, 사업, 저축 등 용도별 분리

  3. 프라이버시: change 주소 분리로 거래 추적 어렵게 함 (비트코인 UTXO)

  4. 표준화: 지갑 간 호환성 (MetaMask, Ledger, Trezor 모두 BIP-44 지원)