根据密钥之间是否有关联可把钱包分为两类:
非确定性钱包(nondeterministic wallet):每个密钥都是从随机数独立生成,密钥彼此之间无关联,这种钱包也被称为“Just a Bunch Of Keys(一堆密钥)”,简称JBOK钱包。
确定性钱包(deterministic wallet):所有密钥都是从一个主密钥派生出来,这个密钥即为种子(Seed)。该类型钱包中所有密钥都相互关联,通过原始种子可以找到所有密钥。确定性钱包中使用了很多不同的密钥推导方法,最常用的是使用树状结构,称为分级确定性钱包或者HD (hierarchical deterministic)钱包。
比特币钱包(Bitcoin Core)生成密钥对之间没有直接关联,属于nondeterministic wallet,这种类型的钱包如果想备份导入是比较麻烦的,用户必须逐个操作钱包中的私钥和对应地址,如下图包含的为松散结构的随机密钥集合的非确定性钱包:
Deterministic wallet基于BIP32(Bitcoin Improvement Proposal32)/BIP39/BIP44标准实现,通过一个共同的种子维护n多私钥,种子推导私钥采用不可逆哈希算法,在需要备份钱包私钥时,只备份这个种子即可(大多数情况下的种子是通过BIP44生成了助记词,方便抄写),在支持BIP32,BIP39,BIP44标准的钱包只需导入助记词即可导入全部的私钥,如下图种子派生密钥的确定性钱包:
上面提到了BIP32,BIP39,BIP44标准,概括来说BIP32标准定义了种子使用HMAC-SHA512生成根私钥,并导出子私钥,这是HD钱包的主要标准;BIP39 标准定义了钱包助记词和种子生成规则; BIP44标准定义了节点布局,用于多币种和多账户钱包;除此之外,还有BIP43标准用于定义多用途HD钱包结构。具体可以前往https://github.com/bitcoin/bips学习。