HD钱包和种子
介绍分层确定性钱包(HD Wallet)和种子(Seed)。
详细技术细节请参考BIP-32
1.分层确定性钱包(HD钱包)
分层确定性钱包(Hierarchical Deterministic Wallet,简称HD钱包)是由Bitcoin Improvement Proposal 32(BIP-32)提出的一种钱包结构。HD钱包通过一个种子(seed)生成所有的私钥和公钥,使得用户只需备份一次即可管理多个地址,并且具有良好的扩展性和安全性。
2. 关键概念
2.1 种子(Seed)
种子是HD钱包的核心,它是一个随机生成的初始值,用于生成钱包中的所有密钥对。种子通常是通过用户输入的随机熵和钱包软件生成的随机数混合生成的。
2.2 助记词(Mnemonic)
助记词是将种子转换为一组易于记忆的单词序列。这种方式不仅方便用户备份和恢复钱包,还能减少记错或丢失种子的风险。助记词通常由12、15、18、21或24个单词组成,这些单词从一个标准化的词表中选取。
生成助记词的步骤如下:
- 生成随机熵:生成随机数。
- 计算校验和:对随机数进行SHA-256哈希,并取前若干位作为校验和。
- 组合数据:将随机数与校验和组合。
- 分割数据:将组合后的数据分成每组11位的二进制块。
- 映射词表:将每组11位二进制块映射到标准化词表中的单词。
2.3 根密钥(Master Key)
根密钥是由种子生成的第一个密钥对,包括根私钥(master private key)和根公钥(master public key)。根密钥是HD钱包的起点,从根密钥可以衍生出所有的子密钥。
2.4 子密钥(Child Key)
子密钥是从根密钥或其他子密钥衍生出的密钥。HD钱包使用分层结构,可以从一个根密钥衍生出多个子密钥,每个子密钥可以进一步衍生出更多的子密钥。子密钥的衍生过程是确定性的,即相同的种子总是生成相同的密钥序列。
2.5 扩展公钥(xpub)和扩展私钥(xpriv)
扩展公钥(xpub)和扩展私钥(xpriv)是包含了更多信息的公钥和私钥,用于支持HD钱包的分层结构。
- xpub:扩展公钥包含了公钥、链码和衍生路径信息,可以生成子公钥而不需要知道私钥。
- xpriv:扩展私钥包含了私钥、链码和衍生路径信息,可以生成子私钥和子公钥。
2.6 衍生路径(Derivation Path)
衍生路径是一个字符串,表示从根密钥到特定子密钥的路径。它通常采用斜杠分隔的数字表示法,如m/44'/0'/0'/0/0
。每个数字表示一个级别的子密钥,其中'
表示硬化衍生(hardened derivation),不带'
的数字表示非硬化衍生。
- m:表示根密钥。
- 44':表示遵循BIP-44标准。
- 0':表示币种(0代表比特币)。
- 0':表示账户。
- 0:表示接收地址。
- 0:表示地址索引。