BIP 全名是 Bitcoin Improvement Proposals,是提出Bitcoin 的新功能或改進(jìn)措施的文件。可由任何人提出,經(jīng)過審核后公布在bitcoin/bips 上。
BIP32:定義 Hierarchical Deterministic wallet(簡稱“HD Wallet”,”分層確定性錢包”),是一個系統(tǒng)可以從單一個 seed 產(chǎn)生一樹狀結(jié)構(gòu)儲存多組keypairs(私鑰和公鑰)。好處是可以方便的備份、轉(zhuǎn)移到其他相容裝置,以及分層的權(quán)限控制等。這種母鑰匙可以生成子鑰匙的序列。這些子鑰匙又可以衍生出孫鑰匙,以此無窮類推。
BIP32提出,可以以特定規(guī)則生成私鑰,這樣只需要存儲少量“種子”,就能推算出無數(shù)個可用私鑰,它的實現(xiàn)稱為“分層確定性錢包”。是HD的核心HD Wallets因其只需要一個主(根)私鑰,就能生成海量子私鑰,這個特性廣受歡迎,越來越多的解決方案和企業(yè)開始支持或采用HD模型來進(jìn)行私鑰管理。HD模型的最大優(yōu)點(diǎn)是不使用私鑰就能生成大量的由您掌握的地址,其原理就在于直接通過主公鑰就可以生成任意數(shù)量的子公鑰,整個過程無需訪問主私鑰。這個特性有如下好處:
· 備份容易,只需備份主私鑰,新增地址無需再次備份私鑰;
· 保證主私鑰的冷存儲,無論新增多少個地址,僅需主公鑰就能完成,無需主私鑰介入;
· 方便的第三方審計,只需給第三方機(jī)構(gòu)或會計提供主公鑰,他就可以看到所有下級地址的交易,但又不能花費(fèi)任何幣(因為沒有子私鑰);
BIP39標(biāo)準(zhǔn)就是為了解決助記詞的需求,通過隨機(jī)生成12~24個容易記住的單詞,單詞序列通過PBKDF2與HMAC-SHA512函數(shù)創(chuàng)建出隨機(jī)種子作為BIP32的種子。
BIP39生成助記詞過程:
· 生成一個長度為128~256 位(bits) 的隨機(jī)序列(熵);
· 取熵哈希后的前n 位作為校驗和(n= 熵長度/32),就可以創(chuàng)造一個隨機(jī)序列的校驗和;
· 將校驗和添加在隨機(jī)序列(熵)的末尾;
· 將序列化分為包含11位的不同部分;
· 將每個包含11位不分的值與一個已經(jīng)預(yù)先定義2048個單詞的字典作對應(yīng);
· 生成的有順序的單詞組就是助記詞。
在上面的例子中,我們選取了長度為128位的熵,來生成了有12個單詞的助記碼。在實際的應(yīng)用中,熵的長度越長,校驗碼的長度和助記詞的長度也會相應(yīng)的增長。下圖展示了熵數(shù)據(jù)的大小和助記詞的長度之間的關(guān)系:
步驟一:隨機(jī)序列的長度為【128,160,192,224,256】。(熵一定是32的倍數(shù),so熵是16進(jìn)制數(shù)的序列)
步驟二:校驗和的長度為【4,5,6,7,8】。(熵/32=校驗和)
步驟三+步驟四:隨機(jī)序列一定是11的倍數(shù),平均劃分為不同的11位倍數(shù)。
步驟五:與2048個單詞的預(yù)定義字典作對應(yīng)。
步驟六:生成助記詞的數(shù)量:(熵+校驗和)/11=助記詞的數(shù)量。
BIP43提出了BIP32的一個規(guī)范(或者說是限制),因為BIP32過于自由,使基于BIP32的各種應(yīng)用總是互相不能兼容。是32增加了域的擴(kuò)展。
BIP44是BIP43的一個特殊應(yīng)用,一個特點(diǎn)是能夠包容更多賬戶(幣種),是在43和32的基礎(chǔ)上增加多幣種,例如你一個HD的錢包可以同時管理主網(wǎng)和測試網(wǎng)的比特幣。
BIP0043提出使用第一個強(qiáng)化子索引作為特殊的標(biāo)識符表示樹狀結(jié)構(gòu)的“purpose”。基于BIP0043,HD錢包應(yīng)該使用且只用第一層級的樹的分支,而且有索引號碼去識別結(jié)構(gòu)并且有命名空間來定義剩余的樹的目的地。舉個例子,HD錢包只使用分支m/i‘/是為了表明那個被索引號“i”定義的特殊為目地。
在BIP0043標(biāo)準(zhǔn)下,為了延長的那個特殊規(guī)范,BIP0044提議了多賬戶結(jié)構(gòu)作為“purpose”。所有遵循BIP0044的HD錢包依據(jù)只使用樹的第一個分支的要求而被定義:m/44’/。
BIP0044指定了包含5個預(yù)定義樹狀層級的結(jié)構(gòu):
m / purpose‘ / coin_type’ / account‘ / change / address_index
第一層的目的地總是被設(shè)定為44’。第二層的“coin_type”特指密碼貨幣硬幣的種類并且允許多元貨幣HD錢包中的貨幣在第二個層級下有自己的亞樹狀結(jié)構(gòu)。目前有三種貨幣被定義:Bitcoin is m/44‘/0’、Bitcoin Testnet is m/44‘/1’,以及Litecoin is m/44‘/2’。
樹的第三層級是“account”,這可以允許使用者為了會計或者組織目的,而去再細(xì)分他們的錢包到獨(dú)立的邏輯性亞賬戶。舉個例子,一個HD錢包可能包含兩個比特幣“賬戶”:m/44‘/0’/0‘ 和m/44’/0‘/1’。每個賬戶都是它自己亞樹的根。
第四層級就是“change”。每一個HD錢包有兩個亞樹,一個是用來接收地址一個是用來創(chuàng)造找零地址。注意無論先前的層級是否使用是否使用強(qiáng)化衍生,這一層級使用的都是常規(guī)衍生。這是為了允許這一層級的樹可以在可供不安全環(huán)境下,輸出擴(kuò)展的公共鑰匙。被HD錢包衍生的可用的地址是第四層級的子級,就是第五層級的樹的“address_index”。比如,第三個層級的主賬戶收到比特幣支付的地址就是M/44‘/0’/0‘/0/2。表4-9展示了更多的例子。
評論
查看更多