iT邦幫忙

2021 iThome 鐵人賽

DAY 29
0
Security

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

DAY 29- BIP39、BIP44

BIP39

解決了記很多私鑰的問題之後,
人類面對著另外一個問題,因為對他們(我們啦)來說,記一個種子還是太困難了。
所以BIP 39 就來拯救腦袋渺小的人類了!

如果你有用任何錢包軟體申請一個錢包的話,
你會得到的是一串單字,而不是一串亂碼(當然你也可以得到)
而這串單字,其實就是私鑰的存在,
這就是BIP39做到的事情。

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

這是從github上截下來的圖,內容是BIP39。
看到第三行 Mnemonic code,是助記詞的意思,就是我前面講的內容。
那究竟這個助記詞是怎麼變來的,
我們繼續看下去。

首先要先建立一個初始熵(就是一串二進位的數字),長度為ENT。
ENT必須是32的倍數,且只能介於128-256 bits。
將這串數字進入SHA-256後取前 ENT/32 個位元作為校驗和,接在初始熵後。
將這總共ENT+ENT/32個位元每11個為一組。

接著用查表的方式將每一組得到一個字。

https://ithelp.ithome.com.tw/upload/images/20211010/201401124pB6WgBaTa.jpg

舉例來說,
如果我們使用ENT=128,
總長度就會是128+128/32=132。
最後會得到132/11=12個單字。

這個單字表有做成各個語言的版本,在這裡可以看到,
裡面有英文、日文、韓文、中文(還分簡體繁體)......

不管甚麼語言,這個表都是經過設計的,
理想的單字表符合一些條件

  • 前四個字母就可以確認該單字
  • 避免類似詞語
  • 好查

將助記詞轉換成種子

助記詞若想轉換成種子,需要使用一種密鑰推導函數PBKDF2,
該函數有五個輸入參數:偽隨機函數、主密碼、鹽*、重複次數、需產生多少位元的密碼。
而轉換過程使用的參數分別是:HMAC-SHA512、助記詞、"mnemonic"+"(自選密碼)"、2048、512。

*鹽就只是一個增加破解難度的數字而已,取其加鹽的意象。

最後你就會得到一個熱騰騰的種子,可以用 BIP32 定義的方式生出一個錢包。
以上就是BIP39內容。

BIP 44

回想一下昨天的BIP32,
在master key 底下可以生成出無限多的子密鑰、孫密鑰、...。
所以如果你隨便使用了一個地址,你很難找到他所屬的私鑰在哪裡,於是我們需要BIP44。

BIP44定義了密鑰的路徑規範,這樣的規範定義了各個層級,
使不同帳戶、不同幣種分屬在固定的路徑之下。

https://ithelp.ithome.com.tw/upload/images/20211010/20140112C6rfE9xWqM.jpg

路徑的格式如上圖。
第一個m代表的是master node。
第二個purpose固定是44,代表使用BIP44所規範的路徑。
第三個coin_type提供不同加密貨幣的區隔,每個貨幣都有一個編號,
BTC是0、ETH是60,這裡有所有已登記的幣的編號。
第四個account提供不同用途的帳戶。
第五個change分成兩個,0是外部鏈(對外公開)可用來收錢,1是內部鏈(對外不公開)用來找零。
第六層即是你的地址編號,從0開始逐一遞增。

如此一來就定義了整個HD wallet。


圖片來源:
https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki

參考資料:
https://www.youtube.com/watch?v=p_SJKiff5Ng
https://github.com/bitcoin/bips


上一篇
DAY 28- BIP32- HD wallet
下一篇
DAY 30- NFT & 結語
系列文
學密碼學也猜不到你的手機密碼30

尚未有邦友留言

立即登入留言