2장 · 신원증명과 키
1장에서 본 것처럼, 이 네트워크는 자격 심사 없이 누구나 노드를 띄울 수 있다. 그건 누구나 메시지를 보낼 수 있다는 뜻이기도 하다. 누군가 "철수가 영희에게 100만원 보냄"이라는 가짜 메시지를 만들어 뿌리면?
❓ 이 챕터의 질문
기존 방식의 문제
은행 시스템에서는 신원 증명이 단순했어요. 비밀번호를 서버에 보내면, 서버가 "맞다/틀리다"를 판단해줬어요. 그런데 블록체인에는 이 비밀번호를 받아줄 중앙 서버가 없어요. 비밀번호를 네트워크에 뿌리는 순간 누구나 보고, 그대로 가져가요.
완전히 다른 접근이 필요했어요.
공개키 암호화: 자물쇠와 열쇠를 분리한다
해결책은 이미 암호학에 있었어요. 공개키 암호화(비대칭 암호화)예요. 핵심 아이디어는 자물쇠와 열쇠를 분리하는 거예요.
- 개인키(Private Key): 나만 갖고 있는 비밀 열쇠. 서명을 만드는 데 쓴다.
- 공개키(Public Key): 세상에 공개해도 되는 자물쇠. 서명이 진짜인지 검증하는 데 쓴다.
작동 방식은 이래요. 철수가 "영희에게 1 ETH 보냄"이라는 메시지를 자신의 개인키로 서명하면 서명값(v, r, s)이 나와요. 이 서명값을 메시지와 함께 네트워크에 뿌리면, 누구나 철수의 공개키로 "맞다, 철수가 서명한 게 맞다"고 검증할 수 있어요. 개인키는 절대 네트워크 밖으로 나가지 않아요. 서명된 결과물만 나가요.
그런데 개인키를 어떻게 보관하나
여기서 새로운 문제가 생겼어요. 개인키는 256비트 난수예요.
a3f1c2d4e5b6...8b9e0f1a이걸 사람이 외우거나 종이에 적는 건 사실상 불가능해요. 그리고 잃어버리면 자산이 영구 소멸해요. 복구할 방법이 없어요. 은행은 비밀번호를 잊어버리면 신분증으로 재발급해줬지만, 블록체인에는 그런 창구가 없어요.
니모닉 코드: 12개 영단어로 키를 백업한다
해결책은 개인키를 사람이 읽을 수 있는 형태로 변환하는 거예요. BIP-39 표준은 랜덤 숫자를 12개(또는 24개)의 영단어로 변환해요.
army van defense carry jealous true
garbage claim echo media make crunch이 12단어만 안전하게 보관하면 언제든 개인키를 복원할 수 있어요.
🔍 니모닉 하나로 주소 수천 개를 쓰는 법: HD 지갑
니모닉에서 키가 하나만 나온다면, 주소를 여러 개 쓰려고 할 때마다 니모닉을 새로 만들어 따로 백업해야 해요. 그래서 실제 지갑은 니모닉 하나에서 키와 주소를 계층적으로 뻗어나가게 만들어요. 이게 HD 지갑(Hierarchical Deterministic Wallet) 이에요.
니모닉으로 Seed를 만들고, Seed에서 Master Key를 만들고, 그 마스터 키에서 Account #0, #1, #2… 를 얼마든지 파생해요. 같은 니모닉이면 언제 계산해도 같은 순서로 같은 주소가 나오니까(Deterministic), 주소가 수천 개여도 백업은 여전히 12단어 하나로 끝나요.
공개키에서 지갑 주소로
개인키가 생겼으니 공개키도 나와요. 그런데 공개키는 512비트로 너무 길어요. 이걸 주소로 쓰면 오타 하나로 돈이 사라질 수 있어요. 그래서 공개키를 Keccak-256 해시 함수에 넣고 마지막 20바이트를 꺼내면 40자 지갑 주소가 나와요.
0x742d35Cc6634C0532925a3b844Bc454e4438f44e해시는 단방향이라 주소만 보고 공개키를 역산하는 건 불가능해요. 주소를 공개해도 개인키가 노출되지 않아요.
기관은 어떻게 키를 관리하나
개인이 니모닉 12단어로 키를 관리한다면, 수백억 원의 자산을 다루는 기관은 어떻게 할까요?
| 방식 | 키 관리 | 보안 | 복구 | 용도 |
|---|---|---|---|---|
| Single Key | 단일 개인키 | ★☆☆☆☆ | 복구 불가 | 개인 소액 |
| HD Wallet | 니모닉 기반 계층 파생 | ★★☆☆☆ | 니모닉 복구 | 개인/소규모 |
| HSM | 하드웨어 보안 모듈 | ★★★★☆ | 백업 HSM | 금융기관/거래소 |
| 멀티시그 | N개 키 중 M개 서명 필요 | ★★★★☆ | 임계값 복구 | 기관/기업 |
| MPC | 키를 조각으로 분산 | ★★★★★ | 임계값 복구 | 기관/기업 |
HSM은 키가 하드웨어 칩 안에서만 존재해요. 물리적으로 탈취해도 키를 꺼낼 수 없어요.
멀티시그는 "3개 중 2개(2-of-3)" 방식으로, A·B·C 세 명 중 두 명이 서명해야 트랜잭션이 실행돼요. 스마트 컨트랙트 레벨에서 온체인으로 검증해요.
MPC는 겉으로 보기엔 멀티시그와 비슷하지만 속을 보면 완전히 달라요. 키를 여러 조각(샤드)으로 나눠서 분산 보관하는데, 완전한 키는 어디에도 없어요. 서명할 때 샤드들이 오프체인에서 수학적 연산에 참여하고, 온체인에는 최종 서명값만 올라가요.
실습: MetaMask 지갑 만들기
개념을 직접 확인해볼 수 있어요. MetaMask는 가장 널리 쓰이는 HD 지갑이에요. 설치하면 니모닉 12단어가 만들어지고, 거기서 지갑 주소가 파생되는 과정까지 직접 볼 수 있어요.
그런데 새로운 문제가 생겼어요
신원 증명과 키 체계가 완성됐어요. 이제 "철수가 영희에게 보낸다"는 걸 증명할 수 있어요. 그런데 이 요청을 네트워크에 보낼 때 세 가지 문제가 동시에 생겼어요.
- 같은 메시지를 복사해서 100번 뿌리면 100번 출금될 수 있어요.
- 중간에 누군가 금액만 바꿔치기할 수 있어요.
- 노드마다 메시지를 다르게 파싱하면 합의가 깨져요.
❓ 다음 챕터의 질문
→ 3장에서 트랜잭션이 이 세 가지 문제를 한 번에 어떻게 해결하는지 알아볼게요.
핵심 요약
| 개념 | 역할 | 비유 |
|---|---|---|
| 개인키 | 서명 생성. 절대 공개 불가 | 도장 |
| 공개키 | 서명 검증. 공개해도 안전 | 도장 이미지 |
| 니모닉 | 개인키 백업·복원용 12단어 | 마스터 열쇠 복사본 |
| 지갑 주소 | 공개키를 해시한 40자 식별자 | 계좌번호 |
| ENS | 주소에 붙이는 이름 | 도메인 |
| HSM | 키가 칩 밖으로 나가지 않는 하드웨어 | 금고 |
| 멀티시그 | N개 키 중 M개 서명 필요, 온체인 검증 | 공동 인감 |
| MPC | 키를 조각으로 분산, 완전한 키는 없음 | 분산 금고 |
📚 참고자료 보기
- BIP-39 표준: 니모닉 코드 공식 표준
- BIP-32 HD Wallet: 계층적 결정론적 지갑 표준
- BIP-44: 다중 계정 계층 표준
- ENS 공식 문서: Ethereum Name Service
- Keccak-256: 이더리움이 사용하는 해시 함수
- MetaMask 공식 사이트: 설치 및 공식 문서