HD Wallets:全称Hierarchical Deterministic Wallets,中文名称分层确定性钱包,是目前广泛使用的虚拟货币钱包标准。下面小编就来给大家讲讲HD Wallets的工作机制以及开发原理。
1、简介
HD Wallets可以从一个 seed 生成一个树状结构储存多组 keypairs(私钥和公钥 ),并根据一定规则可生成多个具体的钱包(如BTC钱包、ETH钱包)。HD Wallets让同一个seed可以支持多币种、多账号、多地址。目前几乎所有的钱包客户端都支持HD Wallets。
2、相关BIPs
BIPs 全名Bitcoin Improvement Proposals,是提出 Bitcoin 的新功能或改进措施的文件。详情可见:
https://github.com/bitcoin/bips
BIP32, BIP39, BIP44 共同定义了目前被广泛使用的 HD Wallets,包含其理念、设计动机、实现方式、实例等。
BIP32:Hierarchical Deterministic Wallets
定义Hierarchical Deterministic Wallets。通过种子来生成主私钥,然后派生海量的子私钥和地址。
HD Wallets从一个 seed 生成一个树状结构储存多组 keypairs(私钥和公钥),进而根据树状结构具体结点上的keypair生成具体的钱包(如BTC钱包、ETH钱包)。
分层是指一个seed可以生成一个有层级关系的树状结构储存多组keypairs,子节点是由父节点根据一定的算法派生出来的。 例如,一个大公司可以为一级部门生成不同的私钥,一级部门可以再为自己的二级部门生成不同的私钥。由于二级部门的私钥是由所属的一级部门的私钥派生的,每个一级部门可以拥有管理自己二级部门私钥的权限,即可以花里面的币。也可以只给会计人员某个层级的公钥,让他可以看到这个部门的收支记录,但不能花里面的钱,使得财务管理更方便了。
确定性是与非确定性相对应的。比特币最早的客户端(Satoshi client)就是非确定性钱包,钱包是一堆随机生成的集合。客户端会预先生成100个私钥。每次交易使用一个私钥。私钥用完,再生成一批私钥。这种钱包难以管理和备份。每个私钥都必须单独备份。确定性钱包则不需要每次转账都要备份,确定性钱包的私钥是对种子进行单向哈希算法生成的,种子是一串随机数生成器生成的随机数。在确定性钱包中,只要有这个种子,就可以找回所有的私钥。
BIP39:Mnemonic code for generating deterministic keys
将 seed 用方便记忆和书写的单词表示。一般由 12 个单词组成,称为 mnemonic code,中文称为助记词。
符合BIP39标准的助记词可以是 3个、6个、9个、12个、15个、18个、21个和24个单词。它们所对应的强度分别是:2048(3次方) 、2048(6次方) … 2048(24次方) ,一般采用12个单词,强度为:2048(12次方)
例如:
lobster october warfare eye normal awkward blood ready safe extend army social
5cca81c65fa1e02982f3a8db097f5ffcb7a3d995a9a87749085649dac1bebd55bdc2ba42998e69bc3c5421c70ddeb72037e399ea82a873721bcde8f4c54d1f41
BIP44:Multi-Account Hierarchy for Deterministic Wallets
基于 BIP32 的系统,赋予树状结构中的各层特殊的意义。让同一个 seed 可以支持多币种、多帐户等。
各层定义如下:
m / purpose’ / coin_type’ / account’ / change / address_index
其中的 purporse’ 固定是 44′,代表使用 BIP44。而 coin_type’ 用来表示不同币种,例如Bitcoin就是 0′,Ethereum是60′。
例如:
m/44′/0′/0′/0/0代表一个BTC钱包path
m/44′/60′/0′/0/0代表一个ETH钱包path
3、生成HD Wallets钱包过程
生成HD Wallets钱包的过程简单来说以下4步就可以搞定:
1)生成一个助记词(参照BIP39);
2)该助记词使用PBKDF2转化为种子(参照BIP39);
3)种子用于使用HMAC-SHA512生成根私钥(参照BIP32);
4)通过根私钥生成子私钥(参照BIP32),其中节点布局由BIP44设置。
4、优势
说了这么多,那么HD Wallets钱包的优势到底是什么呢?
1)方便备份;
2)在不同的应用间使用;
3)可同时管理多个钱包;
4)可同时管理多种币;
5)支持分层的权限控制;
6)可实现私钥离线存放,更安全。
好了,今天的干货就讲到这里,如果大家还有什么想学习的技术性知识,欢迎留言讨论