BIP32, BIP39, BIP44 프로토콜을 통한 구현 방법 및 샘플코드
참고자료 : https://learnmeabitcoin.com/technical/extended-keys
HD Wallet 이란?
HD Wallet은 Hierarchical Deterministic Wallet의 약자로, 계층적 결정론적 지갑이라고도 합니다. 이는 암호화폐를 저장, 관리하고 거래하는 데 사용되는 디지털 지갑입니다. HD Wallet의 주요 특징과 장점은 다음과 같습니다.
- 계층적 구조: HD Wallet은 여러 개의 계층적 서브지갑을 생성할 수 있는 구조를 가지고 있습니다. 이를 통해 사용자는 자금을 다양한 용도로 분리하여 관리할 수 있습니다.
- 결정론적 키 생성: HD Wallet은 단일 마스터 시드(seed)를 사용하여 계층적 구조의 모든 키 쌍(개인 키와 공개 키)을 생성합니다. 이 시드는 보통 12개 또는 24개의 단어로 구성된 니모닉 코드(mnemonic code)로 표현됩니다.
- 백업 용이성: HD Wallet의 모든 키 쌍은 마스터 시드로부터 파생되므로, 사용자는 오직 니모닉 코드만 안전하게 저장해두면 전체 지갑을 복구할 수 있습니다. 이는 전통적인 비결정적 지갑(non-deterministic wallet)과 비교하여 백업이 더 간편하다는 장점이 있습니다.
- 개인정보 보호: HD Wallet은 각 거래에 대해 새로운 주소를 생성할 수 있기 때문에, 사용자의 거래 내역을 추적하기가 어렵습니다. 이로 인해 개인 정보 보호 수준이 향상됩니다.
- 호환성: HD Wallet은 BIP-32, BIP-39, BIP-44와 같은 표준을 준수합니다. 이 표준들은 지갑 소프트웨어 간의 호환성을 제공하여, 여러 지갑 프로그램 간에 사용자의 자산을 쉽게 전환할 수 있습니다.
HD Wallet은 암호화폐 사용자들에게 편리한 기능과 개인정보 보호를 제공하므로, 많은 암호화폐 지갑 솔루션에서 사용되고 있습니다.
HD Wallet 구현을 위한 프로토콜들과 필요 패키지
Go 언어로 HD Wallet을 구현하려면 BIP-32, BIP-44, BIP-39 프로토콜을 사용하면 좋습니다. 다음은 각 프로토콜에 대한 간단한 설명과 Go로 구현하는 데 필요한 라이브러리 및 패키지입니다.
- BIP-32 (Hierarchical Deterministic Wallets): BIP-32는 계층적 결정론적 지갑을 위한 기본 프로토콜입니다. 이 프로토콜을 사용하여 마스터 시드에서 개인 키와 공개 키를 생성할 수 있습니다.
- BIP-39 (Mnemonic code for generating deterministic keys): BIP-39는 마스터 시드를 니모닉 코드로 변환하고 역변환하는 방법을 정의합니다. 이 프로토콜을 사용하면 사용자가 마스터 시드를 쉽게 백업하고 복원할 수 있습니다.
- BIP-44 (Multi-Account Hierarchy for Deterministic Wallets): BIP-44는 HD Wallet의 계층 구조를 보다 효율적으로 관리할 수 있는 방법을 제공합니다. BIP-44를 사용하면 여러 암호화폐와 여러 계정을 하나의 마스터 시드로 관리할 수 있습니다.
- Go 패키지: BIP-44는 BIP-32를 확장한 것이므로, 이미 언급한
github.com/btcsuite/btcutil/hdkeychain
패키지를 사용하여 BIP-44 경로를 따르는 키를 생성할 수 있습니다.
이러한 패키지를 사용하여 Go 언어로 HD Wallet을 구현하려면, 다음 단계를 따라 구현할 수 있습니다.