《精通比特币》解读 第五章 - 钱包

时间:2022-10-02 20:32:29

“钱包”一词在比特币中有多重含义。
广义上,钱包是一个应用程序,为用户提供交互界面。 钱包控制用户访问权限,管理密钥和地址,跟踪余额以及创建和签名交易。
狭义上,即从程序员的角度来看,“钱包”是指用于存储和管理用户密钥的数据结构。
本章,我们将深入介绍第二层含义,即钱包是私钥的容器,一般是通过结构化文件或简单数据库来实现。

非确定性(随机)钱包
钱包只是随机生成的私钥集合

下图展示的是一个非确定性钱包
《精通比特币》解读 第五章 - 钱包

确定性(种子)钱包
确定性(种子)钱包包含从公共的种子通过单项离散函数生成的私钥。
下图展示了确定性钱包的逻辑图
《精通比特币》解读 第五章 - 钱包

分层确定性钱包(HD Wallets (BIP-32/BIP-44))
确定性钱包的*形式是通过BIP0032标准定义的HD钱包

下图展示了HD钱包
《精通比特币》解读 第五章 - 钱包

种子和助记词(BIP-39)
助记词(标准由BIP-39定义)可生产种子。
让我们从实际的角度来看以下哪种种子更容易抄录、阅读、导出以及导入。
16进制表示的种子: 0C1E24E5917779D297E14D45F14E1A1A
助记词表示的种子: army van defense carry jealous true garbage claim echo media make crunch

助记词
BIP-39定义了助记符码和种子的创建,我们在这里描述了九个步骤。 为了清楚起见,该过程分为两部分:
1-6步是创建助记词,7-9步是从助记词到种子。
一、创建助记词:
助记词是由钱包使用BIP-39中定义的标准化过程自动生成的。 钱包从熵源开始,增加校验和,然后将熵映射到单词列表:
1、创建一个128到256位的随机序列(熵)。
2、提出SHA256哈希前几位(熵长/ 32),就可以创造一个随机序列的校验和。
3、将校验和添加到随机序列的末尾。
4、将序列划分为包含11位的不同部分。
5、将每个包含11位部分的值与一个已经预先定义2048个单词的字典做对应。
6、生成的有顺序的单词组就是助记码。
下图展示了熵如何生成助记词:
《精通比特币》解读 第五章 - 钱包

表5-2表示了熵数据的大小和助记词的长度之间的关系:
《精通比特币》解读 第五章 - 钱包

二、从助记词生成种子
创建助记词之后的7-9步是:
7、PBKDF2密钥延伸函数的第一个参数是从步骤6生成的助记符。
8、PBKDF2密钥延伸函数的第二个参数是盐。 由字符串常数“助记词”与可选的用户提供的密码字符串连接组成。
9、PBKDF2使用HMAC-SHA512算法,使用2048次哈希来延伸助记符和盐参数,产生一个512位的值作为其最终输出。 这个512位的值就是种子。

下图显示了从助记词如何生成种子
《精通比特币》解读 第五章 - 钱包