分層確定性錢包(HD Wallets)
HD Wallets的全稱是Hierachical Deterministic Wallets, 對應(yīng)中文是 分層確定性錢包哄酝。
分層確定性的概念在BIP32提案提出祷膳。根據(jù)比特幣核心開發(fā)者 Gregory Maxwell 的原始描述和討論,Pieter Wuille 在2012 年 02月 11日整理完善提交 BIP32 直晨。直到 2016年 6月 15 日 才被合并到 Bitcoin Core膨俐,目前幾乎所有的錢包服務(wù)商都整合了該協(xié)議罩句。BIP32 是 HD 錢包的核心提案,通過種子來生成主私鑰乳愉,然后派生海量的子私鑰和地址,但是種子是一串很長的隨機數(shù)蔓姚,不利于記錄慨丐,所以我們用算法將種子轉(zhuǎn)化為一串助記詞 (Mnemonic),方便保存記錄咖气,這就是 BIP39挖滤,他拓展了HD錢包種子的生成算法。BIP43對BIP32樹結(jié)構(gòu)增加了子索引標(biāo)識purpose的拓展m/purpose'/* 斩松。BIP44是在BIP43和BIP32的基礎(chǔ)上增加了多幣種, 通過HD錢包可以派生多個地址乳幸,可以同時管理主網(wǎng)和測試網(wǎng)的比特幣钧椰, BIP44提出了5層的路徑建議, 如下:
m / purpose' / coin_type' / account' / change / address_index
詳細的BIP44設(shè)置可以參考https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki
BIP44的規(guī)則使得HD錢包非常強大嫡霞, 用戶只要保存一個種子,就能控制所有幣種养筒,所有賬戶的錢包端姚。
生成HD錢包及根據(jù)種子生成子私鑰的步驟:
首先晕粪,生成一個
助記詞
(BIP39 Mnemonic)該助記詞使用PBKDF2轉(zhuǎn)化為
種子
(BIP39 Seed)種子用于使用HMAC-SHA512生成
根私鑰
(BIP32 Root Key)通過根私鑰生成
子私鑰
(參見BIP32),其中節(jié)點布局由BIP44設(shè)置
可以看出BIP39生成助記詞的過程非常重要巫湘,如果一個HD錢包的助記詞是12個有序單詞, 單詞擁有2048個不同單詞的單詞庫中隨機選擇剩膘, 那么根據(jù)排列組合公式,n! / (n-r)!, 即2048畏梆!/ (2048-12)! = 5.27e+39 奈懒。地球上的沙子數(shù)量大概是1e18奠涌, 如果每秒生成一百萬個助記詞磷杏, 那么一年可以生成 1000000606024365 = 3.15e+13, 大概需要 1.67e+26年才能遍歷所有的助記詞
HD錢包生成工具
除了各主流錢包均加入了對BIP39規(guī)則的支持, github上有很多HD錢包生成工具慈格,例如:https://github.com/iancoleman/bip39, 建議下載下來后在斷網(wǎng)環(huán)境下使用
使用HD錢包的好處
備份更容易
傳統(tǒng)錢包的問題是一個錢包可能存有一堆密鑰地址遥金,每個地址都有一些比特幣。這樣備份錢包的時候稿械,需要備份所有的密鑰。但如果之后生成了一個新地址美莫,你就需要重新備份一次。事實上窝撵,每次生成新地址的時候襟铭,你都需要做一次備份。 HD錢包允許你從一個主(根)密鑰創(chuàng)建海量的子密鑰蝌矛。這意味著,一旦你控制了主密鑰入撒,你就可以生成所有的子密鑰,主密鑰和子密鑰形成樹狀結(jié)構(gòu)璃赡。所以你就不需要頻繁的備份錢包,你只需要在創(chuàng)建錢包的時候備份一次就可以了碉考,因為你可以從主密鑰重新創(chuàng)建所有的子密鑰。
私鑰離線存放更安全
HD錢包還帶來了一些新特性锌仅,比如不需要任何私鑰,就可以從一個父公鑰生成所有的子公鑰热芹。具體來說惨撇,你的主私鑰是以紙錢包的方式備份的,并且離線存放在一個安全的地方魁衙。你手頭有主公鑰,用這個公鑰剖淀,你就可以生成所有的子公鑰。 舉個實際的例子茅撞,我們要開一個網(wǎng)店巨朦,接受比特幣付款剑令。你可以離線存放你的私鑰,只把公鑰放在公網(wǎng)的服務(wù)器上吁津。你的網(wǎng)站可以使用這個公鑰為網(wǎng)站上的每一個商品生成一個收款地址,或者給你的每個顧客生成一個唯一的地址梭依,甚至為每次交易生成一個地址(如何使用,取決于你的想象)役拴。 并且因為私鑰是離線存放的钾埂,沒人可以黑進你的服務(wù)器偷走比特幣科平。
權(quán)限控制
HD錢包有個額外好處姜性,它讓你可以控制你的組織里誰可以控制哪些密鑰瞪慧。 和一個商業(yè)組織的組織結(jié)構(gòu)類似部念,HD錢包也是以樹形結(jié)構(gòu)組織密鑰的。你可以給你的組織里的每個分支部門創(chuàng)建密鑰矢腻,把私鑰交給這個分支部門射赛,這個部門就可以花它的分支上的幣,而你楣责,因為有主私鑰,所以你可以看到并花費整個樹上的幣秆麸。
記賬
想讓會計看到所有的交易,但不想讓他花你的錢屯烦?沒問題房铭,你可以給他任何一級上的公鑰,他就可以看到該級下的所有交易缸匪,并且不能花任何的幣。