如何理解钱包涉及的BIP32、BIP44、BIP39
imToken 是一款全球领先的区块链数字资产管理工具[ZB],帮助你安全管理BTC, ETH, ATOM, EOS, TRX, CKB, BCH, LTC, DOT, KSM, FIL, XTZ 资产,同时支持去中心化币币兑换功能 ...
什么是加密货币钱包?
在区块链中,我们的数字资产并不是存放在(举例来说)钱包服务商的服务器中,而是“存储”在由私钥衍生出来的钱包地址中,放在区块链网络上,只有拥有该地址对应私钥的人,才有权力转移资产。
所以数字货币钱包其实就是一个生成和存储私钥的工具,它不存储资产,所有资产都在链上。
创建钱包地址的关键是随机生成私钥,私钥是一个32字节的数字。生成私钥的本质是在1到2^256之间选取一个数字。因此,生成私钥的第一步是找到一种安全的方法获取真正的随机数imToken钱包官网,确保得到的随机数是不可预测或不可重复的。
举个例子:你可以抛一枚硬币256次,用纸和笔记录下正面和反面并转换成0和1,随机得到的256位二进制数可以作为钱包的私钥。
BIP 32 是如何产生的?
钱包是私钥管理工具,我们可以根据使用需求生成很多私钥。但你会发现备份和管理私钥非常麻烦。最早的 BTC 钱包就是这样的,所以有个绰号叫“Just a Bunch Of Keys”。为了解决这个问题,BIP32 被提出:基于一个随机数种子,通过分层确定性推导得到 N 个私钥。这样,保存的时候,只需要一个种子,通过种子就可以推导出私钥,如图:
1055×697 177 KB
(图片来自)
注:BIP(),比特币改进提案,BIP32是第32个改进提案。BIP32提案名称:,也就是我们所说的分层确定性钱包(HD钱包)。
一句话总结BIP32:提出了一种分层派生方案,以避免管理一堆私钥的麻烦。
密钥路径和BIP44
这种分层方式衍生出来的密钥通常用路径表示,每层之间用斜线隔开,而由主私钥衍生出来的私钥都以“m”开头。因此,第一个主密钥生成的子私钥是m/0。第一个公钥是M/0。第一个子密钥的子密钥是m/0/1,以此类推。
BIP44 为这条路径规定了标准化的含义(同时也扩展了对多种货币的支持)。BIP44 指定了一个包含 5 个预定义树级别的结构:
米/'/硬币'/'//
m 是固定的,也是固定的,值为 44(或)
硬币类型
这个代表的是货币,0代表比特币,1代表比特币测试链,60代表以太坊
完整币种列表地址:
代表此币种的账户索引,从0开始
常数 0 用于外部链,常数 1 用于内部链(也称为找零地址)。外部链用于钱包外部可见的地址(例如,用于接收付款)。内部链用于钱包外部不可见的地址,用于返回交易找零。(所以一般使用 0)
这是地址索引,从0开始,代表生成的地址数量。官方建议每个地址不超过20个
根据EIP85提案的讨论,以太坊钱包也遵循BIP44标准,确定路径为m/44'/60'/a'/0/n
a代表账号,n是第n次生成的地址,60是提案中确定的以太坊代码。这就是为什么在使用导入助记词时会看到选择路径的选项的原因。
图片来自: 556×850 111 KB
一句话总结BIP44:它定义了BIP32的分层路径规范。
什么是BIP39?
BIP32 允许我们保存一个随机数种子,而不是一串密钥。但是这对大多数用户来说还是很不友好,这促使了 BIP39 的出现。它使用助记词来生成种子。这样用户只需要记住助记词就可以创建一个随机种子作为 BIP32 的种子。
(相比较而言,备份助记词比备份随机数种子方便得多)
整个过程分为两个步骤:1.生成助记词 2.从助记词中衍生种子
生成助记词
助记词生成流程为:先生成一个128位的随机数,再对随机数加上4位的校验和,得到一个132位的数,再除以11位,得到12个二进制数,再用每个数去查找BIP39定义的单词表imtoken钱包是什么,这样就得到了12个助记词,流程如下图所示:
图片来自维基百科,来源:维基百科
(图片来自网络)
助记符种子导出
这个过程利用了密钥拉伸函数来增强弱密钥的安全性。(这里就不详细解释了,有兴趣的可以自行查找资料)
一句话总结BIP39:通过定义助记词,让种子备份更加友好。
总结
HD钱包()是BIP32中提出的分层派生方案,以避免管理一堆私钥的麻烦。
BIP44是对BIP32的路径定义规范的分层增强,同时还增加了对多种货币的支持。
BIP39通过定义助记词,让种子备份更加友好。
它完全符合这些标准,因此任何支持这些协议的钱包助记词都可以导入。
参考:
分层确定性钱包 HD 简介
区块链博客