主页 > imtoken不让安装 > 什么是分层确定性钱包(HD Wallet) | 小哥笔记

什么是分层确定性钱包(HD Wallet) | 小哥笔记

imtoken不让安装 2023-03-20 07:38:33

1 简介

最近在看Filecoin的应用,学习Filecoin的交易和签名工具。 第一步是导入 HD 钱包。 本以为这个出现在古老圣经《精通比特币》中的概念早就为大家所熟知,但实际研究后发现,中文技术社区的文章大多是BIP32的直译,或者简单的接口用法讨论,以及更深入的问题,例如:“为什么强化派生密钥是安全的?” 不予讨论。 本文记录下我的担忧和理解,为想进一步了解HD钱包原理的朋友提供一些参考。

二、HD钱包的由来

HD Wallet是Hierarchical Deterministic Wallet的简称。 在HD Wallet出现之前,比特币钱包通过随机数生成多个互不相关的私钥。 这种类型的钱包称为非确定性钱包(或随机钱包)。

在中本聪的UTXO模型中,客户端默认每个比特币地址只能用于一次交易参考文献中用到比特币白皮书,因此在钱包使用过程中需要反复备份、导入、再使用密钥对交易进行签名,非常不方便。

为了解决非确定性钱包的私钥管理问题,社区成员提出了一种使用“种子”使用哈希函数单向生成一组私钥的方法。 并且在这个思路的基础上,增加了密钥推导(BIP32)、助记词(BIP39)、推导路径规范(BIP43/44)等功能参考文献中用到比特币白皮书,形成了现在统一标准化的HD钱包。

3. BIP32 及其朋友

BIP32是分层确定性钱包的核心改进,提出了一套基于严谨密码算法的高级钱包管理方法。 BIP32刚提出时,确定性钱包主要有两种:Electrum钱包和BIP32钱包; 这两个钱包的算法和设计都差不多,但最终BIP32钱包成为了后来的标准。

BIP39 是 Bitcoin HD Wallet 规范中对用户最友好的规范。 用过数字钱包的人都会对它有印象。 还记得手写的私钥吗? 它使用一组易于记忆的单词(助记词)来生成确定性钱包的种子密钥。

BIP43和BIP44统一了钱包软件对层级路径和数字编号的理解和使用,使用户能够在同一条区块链中使用同一个助记词,有把握地生成同一套密钥。

BIP39、BIP43、BIP44都是兼容BIP32的协议,后来被比特币以外的区块链借鉴,形成了区块链行业的共识。 本文重点介绍BIP32密钥推导的细节,其他改进协议不再一一介绍。

火币转账到比特币钱包要多久_用比特币源码做山寨币_参考文献中用到比特币白皮书

4.关于BIP32的问题

第一次阅读《精通比特币》时,大多数人可能对密码学还是一知半解,对于超出理解范围的知识可能会选择跳过或抓住结论而忽略过程。 那么对HD Wallet的第一层理解就会得到:

HD钱包是一种通过哈希算法逐层推导出私钥,用一个种子(或助记词)管理无数多个密钥的方法。

再次阅读本章时,我注意到了“扩展密钥”这个特殊名词,对HD Wallet有了第二个认识:

HD钱包有实现父私钥导出子私钥,父公钥导出子公钥的设计。 子私钥和子公钥是“一对密钥”。

忍不住发问:

“父私钥”生成“子私钥”,“父公钥”生成“子公钥”。 这是通过某种神奇的算法实现的吗? 或者某种协议? 还是整个系统只使用一个“真私钥”,“次私钥”和“扩展密钥”只是定义的抽象概念?

5. 确定性钱包的特点

我们说确定性钱包有两个直观的特点:

可以通过父密钥获取子密钥(包括:父私钥获取子私钥,父公钥获取子公钥),反之则不然;

参考文献中用到比特币白皮书_火币转账到比特币钱包要多久_用比特币源码做山寨币

可以公开主公钥而不用担心资金损失。

宣传此功能的主要场景是在分层组织中,例如公司将子私钥提供给部门,将子公钥提供给会计师和审计师,将根私钥提供给财务主管。 这种算法带来的近乎神奇的功能,让很多人(包括懂技术的人)都神化了HD Wallet的功能。 但这种对分层钱包的描述存在致命缺陷。

这个缺陷也是我对HD Wallet的第三层理解:虽然子私钥可以安全分发给父私钥无风险,主公钥也可以无风险分发给主私钥,但是两者都不能同时进行。 种操作。 风险在于分层确定性钱包的算法。 在介绍这个漏洞之前,我们先研究一下BIP32和密钥推导函数。

6. BIP32规范

为了更准确地介绍BIP32的定义和内涵,建议有专业计算机背景的读者直接阅读BIP32规范。

BIP32规范中使用了很多密码学公式来定义HD Wallet如何推导出密钥,这对非计算机专业的人来说不是很友好。 这里我们抛开密码学严谨的定义和推导,用白话来描述BIP32规范。

BIP32主要引入了三个概念:密钥派生函数、密钥树和主密钥生成。

6.1 子密钥派生函数

密钥推导函数是专门设计的函数,核心部分是使用消息认证码HMAC-SHA512(本质上是先对数据进行Hash,再进行对称加密)。 HMAC-SHA512有一个特点,就是当输入Data和Key已知时,可以得到输出I; 只有输出 I 和输入 Key 是已知的,无法推导出 Data。

I = HMAC-SHA512(密钥,数据)

火币转账到比特币钱包要多久_用比特币源码做山寨币_参考文献中用到比特币白皮书

父层I决定取前32位和后32位分别作为扩展私钥和加密密钥。 Key是使用加密后的密钥,Data是扩展私钥(或扩展公钥)和数字i简单拼接得到的。

然后通过严谨的算法证明,得出我们前面提到的结论:父私钥导出子私钥,父公钥导出子公钥,子私钥和子公钥是一对密钥. (以下参考原文)

参考文献中用到比特币白皮书_火币转账到比特币钱包要多久_用比特币源码做山寨币

另外,不同于一般的密钥推导函数,人为设计了另外一个函数来“加固”密钥推导。 这里用数字i的第一位(共32位)作为标识。 当首位为0,即第i < 2^31个数时,使用通用的密钥推导函数。 第一位为1,即当i >= 2^31时,使用“硬化”的密钥推导函数。 对于“硬化”的密钥推导函数,无论是获取子私钥还是子公钥,都需要使用父私钥进行推导计算,因此失去了公钥直接推导公钥的特性key 在通用的密钥推导函数中,变得不灵活,但也更安全,“硬了”。 后面会介绍硬键的使用场景。

火币转账到比特币钱包要多久_参考文献中用到比特币白皮书_用比特币源码做山寨币

6.2. 密钥树

由于密钥派生关系可以多层迭代,因此可以用一个密钥进行多级派生,构建树状的密钥层次结构。 如果是公钥派生关系,公钥派生子公钥的特征也可以层层传递。 当某一层的密钥派生关系“硬化”时,传导关系终止。 公式可以表示为:

N(m/a/b/c) = N(m/a/b)/c = N(m/a)/b/c = N(m)/a/b/c = M/a/b/ C。

N(m/aH/b/c) = N(m/aH/b)/c = N(m/aH)/b/c。

_H 用于硬密钥派生_

参考文献中用到比特币白皮书_用比特币源码做山寨币_火币转账到比特币钱包要多久

用比特币源码做山寨币_参考文献中用到比特币白皮书_火币转账到比特币钱包要多久

6.3. 主密钥生成

上面已经提到了密钥的派生函数和多级派生关系,BIP32中也讨论了生成种子密钥和主密钥的方法。 如上图所示,种子可以是任意长度的值,通过一次HMAC-SHA512计算就可以得到主密钥。

BIP32 建议使用 PNG 文件来处理种子数据的随机性。 BIP32、BIP39、BIP43、BIP44之友在主密钥生成方面做了进一步的规范。

7. BIP32安全讨论

BIP32 的安全问题是开始撰写本文的动机之一。 BIP32 中一个已知的漏洞就是前面提到的父公钥和子私钥都被分发,父私钥存在风险的情况。 2013 年,Vitalik 已经在 Bitcoinmagazine 的博客中指出了这个风险,并用代码进行了演示。 他分别测试了Electrum钱包和BIP32钱包,结果表明,通过知道父公钥和子私钥,不仅可以得到peer pair other child private keys,还可以破解父私钥。

> wp = bip32_privtopub(w)

> w0 = bip32_ckd(w,0)

> crack_bip32_privkey(wp,w0)

'xprv9s21ZrQH143K2KhRQVuMqhz798mvW89J1aJMWEKNfZzv3BPAgBc4TH59K8ZcLt8RrNJvbUzA72A92Grm3MorG2FnFaoZ7B8SDTYXgUBALoi'

用比特币源码做山寨币_火币转账到比特币钱包要多久_参考文献中用到比特币白皮书

因此,在密钥的分级管理中,当有可能同时公开父公钥和子私钥时,不应采用通用的密钥推导方法,而应采用“加硬”的密钥推导方法。

为防止该漏洞,企业或组织在使用BIP32分层钱包时需要特别注意。 对于普通用户来说,无需过多担心HD Wallet的安全性。 因为相关协议规范了钱包的推导过程,并考虑了加硬链接。 同时,个人使用场景一般不涉及子密钥分发的问题,因此HD Wallet钱包仍然是密钥管理的首选。

8.总结

HD Wallet是主流数字钱包的首选。 作为用户,您可以在不同的钱包应用程序中轻松管理自己的密钥; 作为开发者,它提供了一套现成的、多语言的开发工具,降低了钱包软件的开发成本。 作为一个想要深入研究钱包原理,同时又想利用分层钱包的特性设计一些创新场景的产品经理,在设计的时候需要注意安全方面的考虑,避免大容量后密钥泄露-规模化使用。

9. 参考文献

掌握比特币

BIP32.en.bitcoin.it/wiki/BIP_0032

私钥恢复组合攻击……eprint.iacr.org/2014/848.pdf

HD钱包详解:Part 2——BIP32注解.chainnews.com/articles/145568296316.htm

.Vitalik。 确定性钱包,它们的优势和低调的缺陷.bitcoinmagazine.com/articles/deterministic-wallets-advantages-flaw-1385450276

千里大堤毁于蚁穴(谨慎使用HD钱包)。8btc.com/article/36233