第三章 数字资产钱包技术实现原理
3.1技术总览
数字资产钱包技术实现主要包含三个部分:1.钱包自身设计,如何生成助记词,keystore和密码等;2.私钥、公钥和地址产生的方法;3.钱包提供商远程调用各公链RPC接口设计;如下图所示,可总体概括数字资产钱包实现的技术流程:
众所周知,私钥为一串无规律字符串,非常不便于记忆,使用更是不方便,所以从钱包设计的角度,为简化操作同时又不失安全性,就出现了助记词的方法。一般情况下,助记词由一些单词组成,只要记住这些单词,按照顺序在钱包中输入,就能打开钱包,下文将详细阐述其中的原理和方法。
根据密钥之间是否有关联可把钱包分为两类:
非确定性钱包(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学习。