2.7 钱包的数据存储方式与特色

根据数据存储方式的不同,数字加密货币钱包又可分为全节点钱包、轻钱包、分层确定钱包。

全节点钱包(Full Nodes Wallet):是指包含了全部历史交易数据的钱包。多被矿工所使用。其优点是安全可靠。缺点是要下载或更新全部数据后才能正常使用,有时候的确很慢,会影响到用户的使用。

轻钱包(Light Wallet):它通过一种名为“简易支付验证”(Simplified Payment Verification ,SPV)的方式来完成交易验证。简易支付验证节点即“SPV节点”又叫“轻量级节点”,相对应的钱包就是轻钱包。SPV节点只需下载区块头信息,而不下载每个区块中的所有交易信息,由此产生的不含交易信息的区块链,比完整区块链小了很多。“简易支付验证”只是“支付验证”而非“交易验证”,所以SPV节点可以证实某个交易的存在,但不能验证某个交易不存在,这个缺陷可被针对SPV节点的拒绝服务攻击或双重支付攻击所利用。为了防御这些攻击,SPV节点往往会随机连接多个节点,以增加与至少一个可靠节点相连接的概率。

轻钱包的优点是使用快捷、占用存储空间小。随着比特币的使用热潮,轻钱包越来越常用。但对于网络有问题的人来说缺点还是更新数据太慢,加上也不是百分百安全,因此近年其风头被分层确定钱包抢走。

分层确定性钱包(Hierarchical Deterministic Wallet, HD Wallet,HD钱包):常常也被称为多层确定钱包,也曾被称为双层确定钱包。

比特币最早的客户端(Satoshi client)是分层确定性钱包。分层确定性钱包会预先生成 100个随机私钥(对应于100个公钥和100个地址),并且每个私钥只使用一次。每个交易使用一个地址的概念是中本聪提出的。如果交易比较频繁,私钥可能很快会用光,然后再产生100个随机私钥,所以每次完成 100 个交易后,你必须备份钱包的wallet.dat文件,否则可能会丢失资产。这就意味着这个钱包必须被经常性地备份。每个私钥都必须备份,否则一旦钱包不可访问时,就可能无法找回钱包。这种钱包难以管理和备份,经常发生有人清空钱包app的缓存和数据,然后资产全数丢失!

分层确定性钱包则无需每次转账后都备份。它的私钥是对种子密码(Seed,一串由随机数生成器生成的随机数)进行单向哈希运算生成的,在分层确定性钱包中,只要有这个种子密码,就可以找回所有私钥,因此备份了种子密码就相当于备份了您的所有资产,所以它非常方便使用。

分层确定性的概念是根据比特币核心开发者Gregory Maxwell的原始描述和讨论,Pieter Wuille在2012年2月11日整理完善通过BIP32提案提出。但它直到2016年6月15日才被合并到Bitcoin Core,目前几乎所有的比特币钱包服务商都整合了该协议。

BIP32 是HD 钱包的核心提案,通过种子密码来生成主私钥,然后派生海量的子私钥和地址,但是种子密码是一串很长的随机数,不利于记录,后来BIP39用算法将种子密码转化为一串助记词 (Mnemonic),方便种子密码的保存。再后来BIP43对BIP32树结构增加了子索引标识purpose的扩展“m/purpose'/ * ”。最后,BIP44在BIP43和BIP32的基础上增加多币种,通过分层确定性钱包派生多个地址,可以同时管理主网和测试网的比特币,BIP44 提出了5层的路径建议,如下:

m/purpse'/coin_type'/account'/change/address_index

BIP44的规则使得HD钱包非常强大,用户只需要保存一个种子密码(12~18个英文单词),就能控制其钱包里的所有币种。

比特币分层确定性钱包实现机制:

1. 生成一个助记词(BIP39)

2. 该助记词使用PBKDF2转化为种子(BIP39)

3. 种子用于使用HMAC-SHA512生成根私钥(BIP39)

4. 从该根私钥,导出子私钥(BIP32),其中节点布局由BIP44设置

可以看出 BIP39 生成助记词的过程非常重要,早期的HD 钱包助记词是12个单词(现在有的钱包已经增加到18个单词),一共有 2048 个单词可能性,根据这个公式“_n!/( n - r )!”_我们可以计算出随机生成的助记词所有可能性:

2048!/(2048-12)! = 5.2715379713014884760003093175282 e+39

地球上的沙子数量在大约是1 后面 18 个零。如果你可以每秒生成 一百万个助记词,那么一年可以生成 1000000*60*60*24*365=3.1536e+13,你大约需要 1.6715937e+26 年遍历以上所有助记词!

以太坊的EIP85提案HD钱包的路径为 : m/44'/60'/a'/0/n

a——表示帐号

n——第 n 生成的地址

60 是在SLIP44提案中暂定的补充协议,对应的币种就是ETH,因为BIP44对币种只定义到0 – 31。

以太坊各钱包的具体实现如下:

m/44'/60'/0'/0/x——imToken(可自定义路径),MetaMask,Jaxx,MyEtherWallet,TREZOR,Exodus

m/44'/60'/x'/0/0——KeepKey,MetaMask

m/44'/60'/0'/x——Electrum,Ledger Chrome App,

m/44'/coin_type'/account'/0——Coinomi

最后更新于