# 마스터 체인 코드 (Master Chain Code)

마스터 체인 코드(master chain code)는 BIP32 계층적 결정적(HD) 지갑에서 시드로부터 마스터 개인 키와 함께 만들어지는 32바이트(256비트) 값입니다. 하위 키를 파생할 때 키와 짝을 이루어 쓰이는 추가 엔트로피이며, 체인 코드 하나만으로는 어떤 개인 키도 계산할 수 없습니다.

## 자세히 알아보기

BIP32는 먼저 128~512비트(권장 256비트)의 시드 S를 준비하고 I = HMAC-SHA512(Key = "Bitcoin seed", Data = S)를 계산합니다. 512비트 결과를 32바이트씩 둘로 나누어 왼쪽 절반(IL)을 마스터 개인 키로, 오른쪽 절반(IR)을 마스터 체인 코드로 씁니다.

키와 체인 코드를 묶은 것을 확장 키라고 합니다. 개인 키 k와 체인 코드 c의 쌍 (k, c)는 확장 개인 키, 공개 키 K와 같은 체인 코드의 쌍 (K, c)는 확장 공개 키입니다. 확장 키는 78바이트로 직렬화되고 Base58Check로 인코딩되면 111자 문자열이 되며, 메인넷에서는 xprv와 xpub로 시작합니다. 자식 키를 만들 때는 부모 체인 코드를 HMAC-SHA512의 키로, 부모 키와 인덱스를 데이터로 넣습니다. 결과의 왼쪽 절반은 자식 키 계산에, 오른쪽 절반은 자식 체인 코드로 쓰입니다. 공개 키만 알고 체인 코드를 모르면 하위 키를 계산할 수 없다는 점이 체인 코드의 역할입니다.

보안상 경계는 다음과 같습니다. 체인 코드만 유출되면 키는 드러나지 않습니다. 확장 공개 키(xpub)가 유출되면 그 아래의 일반(비강화) 자식 공개 키와 주소를 모두 계산할 수 있어 자금은 안전해도 거래 내역의 프라이버시가 사라집니다. 더 나아가 부모 확장 공개 키와 그 아래 비강화 자식 개인 키 하나가 함께 유출되면 부모 확장 개인 키를 계산할 수 있습니다. 강화 파생(hardened derivation)은 부모 개인 키를 입력으로 쓰므로 이 경로를 막으며, BIP32는 계정 단계에 강화 파생을 쓰도록 권합니다.

마스터 체인 코드는 시드에서 언제든 다시 계산되므로 따로 백업할 대상이 아닙니다. 백업해야 하는 것은 시드(또는 시드를 만드는 니모닉 문구)입니다.

## 블록체인·암호화폐에서는

지갑은 확장 공개 키를 이용해 개인 키 없이도 새 수신 주소를 계속 만들 수 있습니다. 예를 들어 결제 서버에는 xpub만 두어 주문마다 다른 주소를 발급하고, 개인 키는 오프라인 기기에 보관하는 방식입니다. 이 경우 서버가 침해되어도 공격자는 주소 목록을 알 수 있을 뿐 자금을 옮길 수 없습니다. 다만 같은 계층의 비강화 자식 개인 키가 함께 새어 나가면 위에서 설명한 조건이 성립하므로, 개인 키는 xpub와 같은 곳에 두지 않는 것이 원칙입니다.

## 쉽게 말하면

체인 코드는 도장과 함께 보관하는 "새 도장을 새기는 규칙표"와 비슷합니다. 규칙표만 가지고는 어떤 도장도 찍을 수 없지만, 원래 도장과 규칙표가 함께 있으면 정해진 순서대로 하위 도장을 계속 새길 수 있습니다.

## 예시

경로 m/0'/1에서 m은 마스터 확장 키(마스터 개인 키 + 마스터 체인 코드), 0'은 강화 파생으로 만든 첫 번째 자식, 1은 그 아래 인덱스 1의 비강화 자식을 뜻합니다. 각 단계에서 부모의 체인 코드가 다음 자식 키와 자식 체인 코드를 정합니다.

---
출처: https://achivx.kr/glossary/master-chain-code-%EB%A7%88%EC%8A%A4%ED%84%B0-%EC%B2%B4%EC%9D%B8-%EC%BD%94%EB%93%9C/ · ACHIVX 용어 사전 · 수정일 2026-10-20
