iT邦幫忙

2021 iThome 鐵人賽

DAY 28
0
Security

學密碼學也猜不到你的手機密碼系列 第 28

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 27- 地址 Address
下一篇
DAY 29- BIP39、BIP44
系列文
學密碼學也猜不到你的手機密碼30

尚未有邦友留言

立即登入留言