BIP和HD钱包

什么是BIP

Bitcoin improvement proposals 比特币改进协议,是比特币社区提供的一种规范。 之后的EIP也一样,都是为了让整个生态更加可持续发展。 当然,BIP的各种提案都会有编号,具体可以看这里 BIP

BIP茫茫多,我们今天就要挑选两个和钱包有关的,BIP-32/BIP-44。 这两个标准是和HD钱包相关的标准,他可以生成一个更加简单的钱包。

那HD钱包呢

Hierarchical Deterministic Wallet 分层确定性钱包,比较通俗的理解就是,HD钱包根据“种子”(种子密钥)按顺序导出未来的地址,每个新地址相当于“种子+计数器”。通过这种方式,你只用一个种子就可以恢复所有的私钥和地址。

那这个和传统的钱包有什么区别呢? 看看,传统的钱包是什么样的?

私钥 + 地址,或者说私钥可以计算出地址。 一两个这样的钱包,如果属于个人,那会十分好管理,只要把私钥记下来,保存好就好了。 就算更换钱包APP,只需要重新导入私钥就可以了。 但如果一个人有好多好多钱包怎么办? 那可能就很麻烦了,光是备份保存就有我受得了。 HD钱包就很好解决了这个问题,现在我们需要引入一个新的东西,叫做种子。我们用它,就可以不用记私钥,有规律地生成一系列的私钥。

神奇的钱包种子

种子对于我们普通用户来说就是一串简单的助记词。 依托于大佬的智慧,我们可以将一长串(多个)的密钥,按照一定的规则简化为十几个【助记词】,只需要记住助记词,以后如果导入到使用同样标准的钱包dapp中,就能直接恢复你的所有账户和资产。

一般来说,一个 HD 钱包的生成过程是这样的:

  1. 生成一个助记词
  2. 该助记词使用 PBKDF2转化为种子
  3. 种子用于使用 HMAC-SHA512 生成根私钥
  4. 从该根私钥,导出子私钥

我们一步一步来看:

1.生成一个助记词

在单词库中随机挑选 2048 个单词。 然后生成一个 128~256位的随机数(必须是32倍数) 比如我选择一个256位的随机数,转换成16进制显示就是

179e5af5ef66e5da5049cd3de0258c5339a722094e0fdbbbe0e96f148ae80924

在随机数末尾加上校验码,校验码取SHA-256的前若干位,并使得总位数凑成11的倍数,即。上述随机数校验码的二进制表示为

00010000

校验码可以在用户输错了助记词后提醒用户

将随机数+校验码按每11 bit一组,得到范围是0~2047的24个整数,把这24个整数作为索引,就得到了最多24个助记词,例如:

bleak version runway tell hour unfold donkey defy digital abuse glide please omit much cement sea sweet tenant demise taste emerge inject cause link

其实我们最终也是拿着索引去抓词,所以只要词库数量足够,什么语言都行,比如汉字助记词

2.PBKDF2

PBKDF2(Password-Based Key Derivation Function)是一个用来导出密钥的函数,常用于生成加密的密码。 它的基本原理是通过一个伪随机函数(例如HMAC函数),把明文和一个盐值作为输入参数,然后重复进行运算,并最终产生密钥。

Table of Contents