上一本书说如果你要开发一个比特币钱包,它应该被构建成一个HD钱包。那么,钱包是如何工作的呢?钱包的行业标准是什么?由于确定性钱包的密钥可以通过种子生成,HD 钱包用户可以仅使用原始种子生成所有密钥。钱包的具体细节将在两篇文章中介绍。第一部分介绍钱包的种子是如何生成的,第二部分将介绍如何使用种子创建一个HD钱包。因此,本文将重点介绍创建种子的过程。本文将按以下结构展开:
全文结构1.BIP 比特币改进建议
比特币提案是向比特币 社区提供信息或描述比特币 的新功能、流程和环境的设计文档。根据BIP-01,即BIP的宗旨和指导方针01.个比特币,BIP分为三种类型,即标准BIP、信息BIP和流程BIP。BIP 记录在 . 下面简单介绍一下这三种BIP:
(1)标准类 BIP
描述影响 比特币 实施的更改提案,此类提案具有“比特币行业标准”能力。比如网络协议的变化、区块有效性规则的变化等。这类标准的主要作用是提出新功能、新标准、新改进,代表了比特币社区的共识和建议。
(2)信息 BIP
描述比特币设计问题,或希望比特币社区提供一般指南或信息,但不提供新功能。此类 BIP 不代表 比特币 社区的共识,读者和实施者可能会忽略此类信息。
(3)流程类 BIP
描述一个 比特币 流程,或提议对流程进行更改。这种类型的 BIP 类似于标准 BIP,但适用于 比特币 协议本身以外的领域。这样的 BIP 可能会提出一个实现,但这个实现并没有在 比特币 的代码库中实现。流程 BIP 需要社区的共识,用户不能随意忽视。
因此,这三类BIP协议中,信息型BIP可以忽略不计,而标准型BIP和流程型BIP对于比特币网络的改进非常重要,不可忽略。比特币 钱包的以下标准源自这些标准 BIP。
2.通用钱包标准
比特币钱包技术比较成熟,当然也有一些行业通用的标准。这些行业标准使 比特币钱包具有广泛的互操作性、易用性、安全性和灵活性。常见的标准是:
(1)助记码,基于 BIP-39
(2)高清钱包,基于 BIP-32
(3)多用途高清钱包结构,基于BIP-43
(4)多币种多账户钱包,基于BIP-44
这些标准已被广泛的软件和硬件钱包采用,使所有这些钱包都可以互操作。用户可以将一个钱包上生成的助记词导入另一个钱包,恢复所有交易、密钥和地址。
支持这些标准的软件钱包包括(按字母顺序)、Copay、HD 等。支持这些标准的硬件钱包包括(按字母顺序)等。如果你准备开发一个比特币钱包,那么它应该被构建为一个HD钱包,种子编码为助记码以进行备份,遵循 BIP-32、BIP-39、BIP-43 和 BIP -44 标准。
3.助记词(BIP-39)| 种子创建过程
助记词使用一系列英语单词对种子进行编码,这些种子对应于确定性钱包中的随机数。简单来说,助记词是一系列单词形式的种子,通过记忆助记词可以用来找回钱包。
确定性钱包是通过种子派生创建的。为了便于使用,种子被编码为助记符。种子是一个 128 到 256 位的随机数,面向程序的底部。助记词是12到24个单词的随机序列,面向用户。两者是统一事物的两种不同表现形式,本质是相同的。下表显示了助记符及其对应的种子:
助记符-种子-对应表
助记符和“大脑钱包”经常被混淆。他们是不一样的!主要区别在于01.个比特币,大脑钱包通过用户选择的词序生成对应的种子,而助记词则是由钱包随机创建并呈现给用户。这个重要的区别使助记符更加安全,因为猜测随机数对人类来说是无能为力的。
使用 BIP-39 标准创建种子钱包的过程主要分为两部分。第一部分是创建助记词,第二部分是从助记词生成种子。
助记词由钱包使用 BIP-39 中定义的标准化流程自动生成。钱包从熵源开始,增加校验和,然后将熵映射到词表,主要分为以下六个步骤:
创建一个 128 到 256 位(熵)的随机序列。通过提取哈希的前几位(熵长度/32),创建随机序列的校验和。将校验和添加到随机序列的末尾。将序列分成包含11位的不同部分。将每个 11 部分的值与包含 2048 个预定义单词的字典相关联,得到的有序单词组就是助记符。
从上述文章内容步骤可以看出,在创建助记词的过程中,仍然用到了哈希函数、随机数、校验和等。映射部分主要在第5步。下图展示了熵是如何生成助记词的。
助记词生成过程
在上面的例子中,我们使用长度为 128 位的熵来生成一个 12 个单词的助记符。在实际应用中,熵越长,校验码和助记符也会相应增加。下图展示了熵数据大小与助记词长度的关系:
熵 – 校验码 – 助记符长度 – 列表
从上面的过程可以看出,助记词实际上代表的是128到256位的熵。在接下来的过程中,将使用密钥扩展功能(-Based Key)导出更长的(512位)种子。生成的种子用于构建确定性钱包并获取其密钥。
密钥扩展函数有两个参数,助记符和盐。salt 的目的是增加构建能够进行暴力攻击的查找表的难度。在 BIP-39 标准汇总中,盐还有另一个目的,即允许引入密码作为额外的安全因素来保护种子。创建助记词后的7-9步流程如下:
密钥扩展函数的第一个参数是第6步生成的助记词。密钥扩展函数的第二个参数是salt。由字符串常量“助记符”和可选的用户提供的连接密码字符串组成。使用 HMAC 算法,使用 2048 个哈希来扩展助记符和盐参数,产生一个 512 位的值作为其最终输出。这个 512 位的值就是种子!
下图显示了如何从助记符生成种子:
生成助记词种子的过程
从上图中可以看出,BIP-39 标准在派生种子时允许使用可选密码。如果不使用密码,助记词会使用由常量字符串“”组成的盐进行扩展,从而为任何给定的助记词生成一个特定的 512 位种子。如果使用密码短语,则密钥扩展功能使用相同的助记符来生成不同的种子。这样,助记码和可选密码的组合大大增加了生成的种子数量。
从种子生成过程中,我们可以看到使用了很多单向哈希函数。最终生成的种子是一个 512 位的随机数。正是因为有 512 位,这提供了无穷无尽的地址。
参考链接: