ArcBlock 课堂 No. 11 | 深入浅出 HD 钱包基本原理(全程视频 + 文字)

28 日上午 9:00(美国太平洋时间 27 日下午 5:00),ArcBlock Technical Learning Series 第十期“深入浅出 HD 钱包基本原理”, 由 ArcBlock 资深前端工程师 王仕军 讲授。

# 讲座视频

# 分层确定性钱包 HD Wallet 剖析:设计和实现

你真的了解钱包么?

了解区块链、或者持有数字货币(比如比特币和以太坊)的同学可能都知道把数字货币存在自己的钱包,目前市面上的钱包应用非常多,有支持单链的、支持多链的,有手机 APP、有网页、有桌面客户端,还有浏览器插件如 MetaMask。

绝大多数钱包应用在创建钱包时千叮咛万嘱咐让你做好备份的助记词是怎么回事儿?为什么这些钱包自称是 HD 钱包?为什么说泄露了助记词就丢失了所有的币?为什么用单个助记词可以产生、控制很多个账户?助记词究竟是怎么产生私钥的?安全性有没有保障?破解的难度究竟有多大?如果你有耐心读完本文,相信这些问题的答案都会了然于胸。

废话少说,接下来我们就用层层递进、抽丝剥茧的方式去了解下分层确定性钱包的设计和实现。

重新认识钱包

分层确定性钱包常被简写成 HD Wallet,简写来源于 Hierarchical Deterministic Wallet,如果要彻底搞清楚什么是 Hierarchical Deterministic Wallet,从语言层面来看这个名词性短语:

  • Hierarchical 是形容词

  • Deterministic 是形容词

  • Wallet 是名词

搞清楚每个词语在技术上的含义、设计动机,对于我们理解 HD 钱包非常有帮助。

钱包里面到底有没有币?

确切的说,任何区块链钱包里面都没有币,里面有的只是私钥、公钥对,可能有点反常识,但是事实确实如此。钱包可以包含任意数量的私钥、公钥对,其中私钥可以用来签名交易,从而把这个私钥能控制的币花出去,但是币本身是存在区块链大账本上的。把区块链钱包理解为钥匙串可能更形象些,因为钥匙并不是你的资产,而是控制资产的凭据。

在技术性的区块链文章里面,私钥、公钥、地址都是有特定的符号表示的,如下图:

  • k,私钥,通常是随机产生,需要绝对保密的

  • K,公钥,由私钥通过椭圆曲线乘法运算而来,不可倒推出私钥,可以不保密

  • A,地址,由公钥通过单向哈希运算而来,不可倒推出公钥,是完全公开的

什么是确定性钱包?

比特币早期的钱包客户端 Satoshi Client 里面会自动随机生成 100 个私钥、公钥对,这些私钥之间完全没有关联,这种钱包也叫做随机钱包(Random Wallet)或者非确定性钱包(Non-Deterministic Wallet),钱包的备份和恢复必须针对每个私钥进行。

如果能随机产生一个种子,然后根据这个种子去生成一系列的私钥、公钥对,这样钱包的备份就会容易很多,因为只需要备份随机的种子就行了,这种根据随机种子按确定规则生成一系列钱包的方式就叫做种子钱包(Seeded Wallet)或确定性钱包(Deterministic Wallet),种子钱包在生成多个私钥时会用到序号作为参数,所以这种钱包也叫线性确定性钱包(Sequential Deterministic Wallet)。

种子钱包解决了备份的问题,但是还是不完美,没有办法把钱包的一部分共享出去给别人管理,但同时自己保有知情权、控制权。社区的智慧是无穷的,分层确定性钱包应运而生:

因为生成的钱包结构是有层次的,所以就被叫做 Hierarchical Deterministic Wallet:

  • 树状的钱包结构可以让钱包的组织方式更加灵活,或者赋予其现实世界的意义,比如可以用单个 HD 钱包来管理组织的所有资产;

  • 每个节点都会有私钥、公钥,也可以派生出更多的子节点;

  • 树状结构中的某个分支及其子树可以根据实际需要共享出去;

  • 备份和恢复只需要关心主节点;

分层确定性钱包的设计和实现

现如今 HD 钱包俨然已经成为事实上的行业标准,知道 HD 钱包的含义之后,我们来看看他的设计和实现。

HD 钱包的想法最早出现在比特币社区,而比特币社区里面提出新功能、流程、改进建议都有标准化的流程,发起者需要用文档的形式把内容书面化,提交给社区去讨论、论证,这种文档就叫做 BIP(Bitcoin Improvement Proposal),比特币社区甚至连 BIP 本身该如何工作也写成了 BIP,定义 BIP 格式、工作流的的元 BIP 见此(https://github.com/bitcoin/bips/blob/master/bip-0002.mediawiki),而和 HD 钱包紧密关联的几个 BIP 如下:

  • BIP32: HD 钱包的核心提案,说明了自私钥生成方法以及树壮结构的构造方式;

  • BIP43: 为 HD 钱包子私钥派生路径增加有广泛共识的段;

  • BIP44: 确定支持多链 HD 钱包子私钥派生路径的标准格式;

我们先来看 BIP32,其中定义了如下两个内容:

  • 根据父节点公(私)钥匙派生子节点公(私)钥的算法;

  • 将派生出来的钥匙对组织成树状结构的方法;

在 BIP32 中根据父节点去派生子节点的方法被称作 Child Key Derivation Function,简称为 CKD,CKD 根据如下 3 个参数去生成子节点:

  • 父节点私钥或者

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值