DAY 28- BIP32- HD wallet

「BIP BIP BIP 」


BIP

由於区块链没有一个中心系统,在协议上没有办法由中心统一更新,
於是就需要一个论坛让大众可以在上面讨论决定区块链未来的走向。
BIP,全名 Bitcoin Improvement Proposal,就是这麽一个存在。
不过相较於论坛,他好像比较算是你提案大家投票的形式。

你可以在 这里 找到所有目前为止的提案内容,
以及他实施的状况。

BIP 0001 提出了提案被提出之後会经过的流程,後来被BIP 0002取代(更新)了。
下图是BIP 0002 的内容。

其中只有被标为 Final/Active 的提案会被正式启用。

"Having a BIP here does not make it a formally accepted standard until its status becomes Final or Active."

https://ithelp.ithome.com.tw/upload/images/20211010/201401122jUTuUJqJd.png

Ethereum 同样也有这个机制,称为EIP,
你同样可以在 这里 找到 Ethereum 的提案们。

我们会把目光聚焦在三个BIP:32、39、44
这三个 BIP 定义了现行的比特币HD钱包(乙太坊也是使用这个)。

相信看过昨天文章的读者会更容易了解比特币钱包是怎麽运作的,
如果你没看昨天的文章的话,强烈建议你去读读(DAY 27- 地址 Address)。

BIP32

我们先想像一下你今天是一个大人物,
手里有好多笔交易,
而且一旦有人知道你的地址,他们就可以知道你所有的交易内容。
你可能不会想让所有人都知道你做了什麽交易,所以在不同交易你会想使用不同的地址。

如果要使用不同地址,你就需要不同的私钥,也就产生了管理的麻烦。
私钥那麽长,又不宜存在容易被骇的电脑里,实在很麻烦。
抄在纸上也很容易抄错。

於是BIP 32出现了,他定义了 HD Wallet(Hierarchical Deterministic Wallets)。
这个HD Wallet翻成中文大概是:分层确定式钱包 。

由刚才的问题出发,
如果只要储存一个值,而这个值可以产出无限多个私钥,那就解决了管理私钥的麻烦。
而这个钱包就是如此,钱包里有数不尽的私钥可以供你使用,
只需要一颗种子(seed)来生成所有的私钥。

我们来看BIP 32的提出者放上的图片。

https://ithelp.ithome.com.tw/upload/images/20211010/20140112kMW8YA0pjn.png

钱包先由一个种子产生一堆公私钥对,再产生一堆地址。
这是怎麽运作的?

首先我们要先由乱数产生器产生一个128、256或512位元的乱数,
这个乱数经过HMAC-SHA512运算後,
前256位元就是主私钥、後256位元是主链编码。
主私钥可以拿来制造出公钥以及地址,主链编码则是在你要继续制造下一层的私钥时才需要。

有了主私钥,我们就可以一层一层往下制造出无限多个子私钥、孙私钥、孙孙私钥...
用下图的方式,更改索引就可以制造出需多子私钥,
再用同样的方式可以制造出更多的孙私钥。

我们可以用m/0来表示由主私钥产生索引为0的子私钥,
用m/5/2 来表示主私钥产生索引为5的子私钥产生的索引为2的孙私钥。
(BIP44有更详尽的规范)

如此一直下去,我们就可以知道这个私钥是在这棵「树」的第几层第几个私钥。

除了从公钥推导出私钥,其实有其他算法可以让私钥直接推导出私钥,
不过有点太过复杂,也不是很有趣(我觉得啦),
所以我就不多做介绍了。
如果你有兴趣的话,你可以去看看 这篇文章底下的部分。
他有探讨到一些 BIP32 的安全性问题。


我原本打算把BIP39和 BIP44 一起讲完,
可是篇幅好像太长了,所以我分成了两天,
明天会继续把其他两个跟钱包有关的BIP讲完。

图片来源:
https://github.com/bitcoin/bips/tree/master/bip-0002
https://github.com/bitcoin/bips/tree/master/bip-0032

参考资料:
https://medium.com/taipei-ethereum-meetup/虚拟货币钱包-从-bip32-bip39-bip44-到-ethereum-hd-wallet-a40b1c87c1f7
https://medium.com/getamis/2-party-bip32-更安全的-hd-wallet-2d53a5f71545
https://kknews.cc/zh-tw/tech/98ngl9l.html
https://medium.com/@bun919tw/hd-wallet-970096a6d72f
https://github.com/bitcoin/bips/tree/master/bip-0032
https://github.com/bitcoin/bips/tree/master/bip-0002


<<:  【Day 26】 实作 - 於 AWS QuickSight 建立 Parameters 以及 Filter 设定

>>:  25 - 建立结构化的 Log (3/4) - Elasticsearch Ingest Pipeline 资料 Index 前的转换好帮手 - 各种常用的 Processor

Windows 10 环境 MINGW64 找不到 PGP Keys 的问题 (Gpg4win)

How to reproduction 在 Windows 10 环境安装 Gpg4win 使用 K...

Day22 ( 游戏设计 ) 小玛莉游戏机

小玛莉游戏机 教学原文参考:小玛莉游戏机 这篇文章会介绍如何使用「函式」、「逻辑判断」、「当按钮按下...

Day#15 Firebase Auth

前言 好的,那就来看看firebase到底是什麽吧。 Firebase 我们这次会用到firebas...

DAY2-EXCEL统计分析:各项绘图功能与特色

如何绘制图表: 先建立一份咖啡厅的销售量资料 点选上方工具列的<插入>--<图表&...

[Day 8] .Net Task 底层(1)

前言 昨天聊过 Task.WhenAll , 得知其底层就是等待多个 Task 完成的机制, 那 T...