BIP原理:多幣種錢包地址生成機制

買賣虛擬貨幣
BIP 全名是 Bitcoin Improvement Proposals,是提出Bitcoin 的新功能或改進措施的檔案。可由任何人提出,經過稽覈後公佈在bitcoin/bips 上。

BIP32:定義 Hierarchical Deterministic wallet(簡稱"HD Wallet",”分層確定性錢包”),是一個系統可以從單一個 seed 產生一樹狀結構儲存多組keypairs(私鑰和公鑰)。好處是可以方便的備份、轉移到其他相容裝置,以及分層的許可權控制等。這種母鑰匙可以生成子鑰匙的序列。這些子鑰匙又可以衍生出孫鑰匙,以此無窮類推。

BIP32提出,可以以特定規則生成私鑰,這樣只需要儲存少量“種子”,就能推算出無數個可用私鑰,它的實現稱為“分層確定性錢包”。是HD的核心HD Wallets因其只需要一個主(根)私鑰,就能生成海量子私鑰,這個特性廣受歡迎,越來越多的解決方案和企業開始支援或採用HD模型來進行私鑰管理。HD模型的最大優點是不使用私鑰就能生成大量的由您掌握的地址,其原理就在於直接透過主公鑰就可以生成任意數量的子公鑰,整個過程無需訪問主私鑰。這個特性有如下好處:

· 備份容易,只需備份主私鑰,新增地址無需再次備份私鑰;
· 保證主私鑰的冷儲存,無論新增多少個地址,僅需主公鑰就能完成,無需主私鑰介入;
· 方便的第三方審計,只需給第三方機構或會計提供主公鑰,他就可以看到所有下級地址的交易,但又不能花費任何幣(因為沒有子私鑰);

BIP39標準就是為了解決助記詞的需求,透過隨機生成12~24個容易記住的單詞,單詞序列透過PBKDF2與HMAC-SHA512函式建立出隨機種子作為BIP32的種子。

BIP39生成助記詞過程:

· 生成一個長度為128~256 位(bits) 的隨機序列(熵);
· 取熵雜湊後的前n 位作為校驗和(n= 熵長度/32),就可以創造一個隨機序列的校驗和;
· 將校驗和新增在隨機序列(熵)的末尾;
· 將序列化分為包含11位的不同部分;
· 將每個包含11位不分的值與一個已經預先定義2048個單詞的字典作對應;
· 生成的有順序的單片語就是助記詞。

在上面的例子中,我們選取了長度為128位的熵,來生成了有12個單詞的助記碼。在實際的應用中,熵的長度越長,校驗碼的長度和助記詞的長度也會相應的增長。下圖展示了熵資料的大小和助記詞的長度之間的關係:

步驟一:隨機序列的長度為【128,160,192,224,256】。(熵一定是32的倍數,so熵是16進位制數的序列)
步驟二:校驗和的長度為【4,5,6,7,8】。(熵/32=校驗和)
步驟三+步驟四:隨機序列一定是11的倍數,平均劃分為不同的11位倍數。
步驟五:與2048個單詞的預定義字典作對應。
步驟六:生成助記詞的數量:(熵+校驗和)/11=助記詞的數量。

BIP43提出了BIP32的一個規範(或者說是限制),因為BIP32過於自由,使基於BIP32的各種應用總是互相不能相容。是32增加了域的擴充套件。

BIP44是BIP43的一個特殊應用,一個特點是能夠包容更多賬戶(幣種),是在43和32的基礎上增加多幣種,例如你一個HD的錢包可以同時管理主網和測試網的比特幣。

BIP0043提出使用第一個強化子索引作為特殊的識別符號表示樹狀結構的“purpose”。基於BIP0043,HD錢包應該使用且只用第一層級的樹的分支,而且有索引號碼去識別結構並且有名稱空間來定義剩餘的樹的目的地。舉個例子,HD錢包只使用分支m/i'/是為了表明那個被索引號“i”定義的特殊為目地。

在BIP0043標準下,為了延長的那個特殊規範,BIP0044提議了多賬戶結構作為“purpose”。所有遵循BIP0044的HD錢包依據只使用樹的第一個分支的要求而被定義:m/44'/。

BIP0044指定了包含5個預定義樹狀層級的結構:
m / purpose' / coin_type' / account' / change / address_index

第一層的目的地總是被設定為44'。第二層的“coin_type”特指密碼貨幣硬幣的種類並且允許多元貨幣HD錢包中的貨幣在第二個層級下有自己的亞樹狀結構。目前有三種貨幣被定義:Bitcoin is m/44'/0'、Bitcoin Testnet is m/44'/1',以及Litecoin is m/44'/2'。

樹的第三層級是“account”,這可以允許使用者為了會計或者組織目的,而去再細分他們的錢包到獨立的邏輯性亞賬戶。舉個例子,一個HD錢包可能包含兩個比特幣“賬戶”:m/44'/0'/0' 和m/44'/0'/1'。每個賬戶都是它自己亞樹的根。

第四層級就是“change”。每一個HD錢包有兩個亞樹,一個是用來接收地址一個是用來創造找零地址。注意無論先前的層級是否使用是否使用強化衍生,這一層級使用的都是常規衍生。這是為了允許這一層級的樹可以在可供不安全環境下,輸出擴充套件的公共鑰匙。被HD錢包衍生的可用的地址是第四層級的子級,就是第五層級的樹的“address_index”。比如,第三個層級的主賬戶收到比特幣支付的地址就是M/44'/0'/0'/0/2。表4-9展示了更多的例子。

參考文獻:
https://www.jianshu.com/p/aadcee51fc8e
https://www.jianshu.com/p/bcc350c4d43b
https://blog.csdn.net/qq634416025/article/details/79686015 

文章釋出只為分享區塊鏈技術內容,版權歸原作者所有,觀點僅代表作者本人,絕不代表區塊鏈兄弟贊同其觀點或證實其描述。

免責聲明:

  1. 本文版權歸原作者所有,僅代表作者本人觀點,不代表鏈報觀點或立場。
  2. 如發現文章、圖片等侵權行爲,侵權責任將由作者本人承擔。
  3. 鏈報僅提供相關項目信息,不構成任何投資建議

推荐阅读

;