比特幣改進協(xié)議BIP32(翻譯)
英文原文地址:
https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki#extended-keys
題目: 分層確定性錢包(Hierarchical Deterministic Wallets)
摘要
本文件描述了層級確定性錢包(或“HD錢包”):可以部分或全部與不同系統(tǒng)共享的錢包滑黔,每個錢包可以有或沒花費的功能略荡。
該規(guī)范旨在為可在不同客戶之間互相通信的確定性錢包設(shè)定標準歉胶。雖然這里描述的錢包有許多功能通今,但并不是所有的支持客戶端都需要。
該規(guī)范由兩部分組成漏策。 在第一部分中掺喻,提出了用于從單個種子導(dǎo)出密鑰對樹的系統(tǒng)储矩。第二部分演示了如何在這樣的樹之上構(gòu)建錢包結(jié)構(gòu)持隧。
版權(quán)
該BIP根據(jù)2條BSD許可證獲得許可。
目的
比特幣參考客戶端使用隨機生成的密鑰只酥。為了避免在每個交易之后進行備份的必要性(默認情況下)100個密鑰緩存在一個預(yù)留密鑰池中洁仗。然而赠潦,這些錢包并不意圖在多個系統(tǒng)上同時共享和使用她奥。 他們支持通過使用錢包加密功能隱藏他們的私鑰并且不公開密碼怎棱,但這樣的“中性”錢包也失去了生成公鑰的權(quán)力绷跑。
確定性錢包不需要這種頻繁的備份,橢圓曲線數(shù)學(xué)允許可以在不顯示私鑰的情況下計算公鑰的方案谬运。 這允許例如網(wǎng)上商店讓網(wǎng)絡(luò)服務(wù)器為每個訂單或每個客戶生成新的地址(公鑰哈希)垦藏,而不使網(wǎng)絡(luò)服務(wù)器訪問相應(yīng)的私鑰(花費收到的資金需要私鑰)掂骏。
然而弟灼,確定性錢包通常由一個密鑰對“鏈”組成。只有一條鏈就意味著共享一個錢包是全無差異的勤哗。 然而辛馆,在某些情況下昙篙,只有一些(公開)密鑰才能被共享和可恢復(fù)。在網(wǎng)上商店的例子中缴挖,網(wǎng)絡(luò)服務(wù)器不需要訪問商家錢包的所有公鑰;僅用于用于接收客戶付款的那些地址映屋,而不是例如商家花錢產(chǎn)生的更改地址同蜻。分層確定性錢包允許通過支持從單個根導(dǎo)出的多個密鑰對鏈來進行這種選擇性共享湾蔓。
詳細說明:密鑰分散
約定
在本文的其余部分,我們假設(shè)使用Bitcoin公鑰密碼術(shù)贬循,即使用由secp256k1(http://www.secg.org/sec2-v2.pdf)定義的字段和曲線參數(shù)的橢圓曲線加密杖虾。 以下變量是:
- 整數(shù)模數(shù)曲線的順序(簡稱n)奇适。
- 曲線上的點坐標。
- 字節(jié)序列温算。
兩個坐標對的加法(+)定義為EC組操作的應(yīng)用间影。連接(||)是將一個字節(jié)序列附加到另一個字節(jié)序列的操作魂贬。
作為標準轉(zhuǎn)換函數(shù)付燥,我們假設(shè):
- point(p):返回由整數(shù)p表示的secp256k1基點的EC點乘法(EC組操作的重復(fù)應(yīng)用)產(chǎn)生的坐標對展辞。
- ser32(i):將32位無符號整數(shù)i序列化為4字節(jié)序列漩怎,大端存儲(計算機術(shù)語)。
- ser256(p):將整數(shù)p序列化為32字節(jié)序列饭玲,大端存儲(計算機術(shù)語)茄厘。
- serP(P):使用SEC1的壓縮格式將坐標對P=(x谈宛,y)串行化為字節(jié)序列:(0x02或0x03)|| ser256(x)吆录,其中頭字節(jié)取決于省略的y坐標的奇偶校驗。
- parse256(p):將32字節(jié)序列轉(zhuǎn)換為256位數(shù)葛假,大端存儲(計算機術(shù)語)聊训。
擴展密鑰
接下來,我們將定義一個從父密鑰導(dǎo)出多個子密鑰的函數(shù)鼓寺。為了防止這些僅僅依賴于密鑰本身妈候,我們首先使用額外的256位熵來擴展私鑰和公鑰挂滓。稱為鏈碼的擴展對于相應(yīng)的私鑰和公鑰是相同的,由32個字節(jié)組成幔虏。
我們將擴展私鑰表示為(k想括,c)烙博,k為普通私鑰渣窜,c為鏈碼。 擴展公鑰表示為(K夷都,c)囤官,K = point(k)蛤虐,c表示鏈碼驳庭。
每個擴展密鑰有 2^31 個普通子密鑰,2^31個硬化子密鑰狼讨。 這些子密鑰都有一個索引柒竞。 普通子密鑰使用索引0到2^31-1朽基。 硬化的子密鑰使用索引 2^31 到 2^32-1稼虎。 為了簡化硬化密鑰索引的符號,數(shù)字iH表示i + 2^31哀军。
子密鑰分散(CKD)功能
給定父擴展密鑰和索引i排苍,可以計算相應(yīng)的子擴展密鑰学密。這樣做的算法取決于子密鑰是否是硬化密鑰(或等效地腻暮,i是否≥2^31)哭靖,包括私鑰和公鑰侈离。
父私鑰 → 子私鑰
函數(shù)CKDpriv((kpar卦碾,cpar)洲胖,i)→(ki,ci)從父擴展私鑰計算子擴展私鑰:
- 檢查 是否 i ≥ 2^31(子私鑰)擒滑。
如果是(硬化的子密鑰):讓I= HMAC-SHA512(Key = cpar丐一,Data = 0x00 || ser256(kpar)|| ser32(i))库车。 (注意:0x00將私鑰補齊到33字節(jié)長。)
如果不是(普通的子密鑰):讓I= HMAC-SHA512(Key = cpar潘拱,Data = serP(point(kpar))|| ser32(i))芦岂。
- 將I分為兩個32字節(jié)序列禽最,IL和IR袱饭。
- 返回的子密鑰ki是parse256(IL)+ kpar(mod n)虑乖。
- 返回的鏈碼ci是IR疹味。
- 如果parse256(IL)≥n或ki = 0,則生成的密鑰無效诫咱,并且應(yīng)繼續(xù)下一個i值坎缭。 (注:概率低于1/2127)
HMAC-SHA512功能在RFC 4231中規(guī)定掏呼。
父公鑰 → 子公鑰
函數(shù)CKDpub((Kpar哄尔,cpar)柠并,i)→(Ki,ci)從父擴展公鑰計算子擴展公鑰啃沪。它只針對未硬化的子密鑰定義创千。
- 檢查是否 i ≥ 2^31 (子密鑰是否是硬化密鑰)
如果是(硬化子密鑰):返回失敗
如果不是(普通子密鑰):讓I= HMAC-SHA512(Key = cpar, Data = serP(Kpar) || ser32(i)).
將I分為兩個32字節(jié)序列入偷,IL和IR疏之。
返回的子密鑰Ki是point(parse256(IL))+ Kpar锋爪。
- 返回的鏈碼ci是IR其骄。
- 如果parse256(IL)≥n或Ki是無限遠的點,則生成的密鑰無效索抓,并且應(yīng)繼續(xù)下一個i值纸兔。
父私鑰 → 子公鑰
函數(shù)N((k,c))→(K备禀,c)計算與擴展私鑰對應(yīng)的擴展公鑰(“中和”版本曲尸,因為它消除了簽署交易的能力)男翰。
- 返回的密鑰K是point(k)蛾绎。
- 返回的鏈碼c只是傳遞的鏈碼。
要計算父私鑰的公用子密鑰:
N(CKDpriv((kpar薯嗤,cpar)骆姐,i))(總是工作)玻褪。
CKDpub(N(kpar公荧,cpar)稚矿,i)(僅適用于非硬化子密鑰)晤揣。
它們等價的事實是使非硬化密鑰有用(可以在不知道任何私鑰的情況下導(dǎo)出給定父密鑰的子公鑰)昧识,以及它們與硬密鑰的區(qū)別跪楞。 不總是使用非硬化鍵(更有用)的原因是安全性; 后面可以了解更詳細的信息。
父公鑰 → 子私鑰
不可能發(fā)生
密鑰樹結(jié)構(gòu)
下一步是級聯(lián)幾個CKD結(jié)構(gòu)來構(gòu)建樹。我們從一個root開始池户,主擴展密鑰m校焦。通過對i的幾個值評估CKDpriv(m寨典,i)耸成,我們得到了多個1級派生節(jié)點。由于這些都是擴展密鑰赚楚,所以也可以應(yīng)用CKDpriv宠页。
為了縮短符號举户,
我們將寫入CKDpriv(CKDpriv(m俭嘁,3H)供填,2)罢猪,5)作為m / 3H / 2/5膳帕。等同于公鑰危彩,
我們寫入CKDpub(CKDpub(M汤徽,3)谒府,2)狱掂,5)作為M / 3/2/5亲轨。
這導(dǎo)致以下身份:
N(m / a / b / c)= N(m / a / b)/ c = N(m / a)/ b / c = N(m)/ a / b / c = M / a / b / C惦蚊。
N(m / aH / b / c)= N(m / aH / b)/ c = N(m / aH)/ b / c器虾。
然而讯嫂,N(m / aH)不能被重寫為N(m)/ aH,因為后者是不可能的兆沙。
樹中的每個葉節(jié)點對應(yīng)于實際密鑰欧芽,而內(nèi)部節(jié)點對應(yīng)于從它們分散的密鑰的集合。葉節(jié)點的鏈碼被忽略葛圃,只有它們嵌入的私鑰或公鑰是相關(guān)的千扔。由于這種結(jié)構(gòu)库正,知道擴展私鑰允許重構(gòu)所有后代私鑰和公鑰曲楚,并且知道擴展公鑰允許重建所有后代非硬化公鑰。
密鑰標識符
擴展密鑰可以由序列化的ECSDA公鑰K的Hash160(SHA256之后的RIPEMD160)標識褥符,忽略鏈碼龙誊。 這完全對應(yīng)于傳統(tǒng)比特幣地址中使用的數(shù)據(jù)。不建議以base58格式表示此數(shù)據(jù)喷楣,因為它可能被解釋為一種地址(并且錢包軟件不需要接受對鏈密鑰本身的支付)趟大。
標識符的前32位稱為密鑰指紋。
序列化格式
擴展的公鑰和私鑰如下序列化:
4字節(jié):版本字節(jié)(mainnet:0x0488B21E public铣焊,0x0488ADE4 private; testnet:0x043587CF public逊朽,0x04358394 private)
1字節(jié):深度:主節(jié)點為0x00,級別1派生密鑰為0x01粗截。
4字節(jié):父密鑰的指紋(如果主密鑰為0x00000000)
4字節(jié):子數(shù)字惋耙。這是對于i在xi = xpar / i中的ser32(i),其中xi是鍵序列化熊昌。 (如果主密鑰為0x00000000)
32字節(jié):鏈碼
33字節(jié):公鑰或私鑰數(shù)據(jù)(公鑰的serP(K)绽榛,私鑰的0x00 || ser256(k))
可以通過首先添加32個校驗和位(從雙SHA-256校驗和派生),然后轉(zhuǎn)換為Base58表示婿屹,可以像Base58中的其他Bitcoin數(shù)據(jù)一樣對78字節(jié)結(jié)構(gòu)進行編碼灭美。這會導(dǎo)致最多112個字符的Base58編碼的字符串。由于可選擇版本字節(jié)昂利,Base58表示將以“net”届腐,“net”,“tpv”或“tpub”為起始的“xprv”或“xpub”開頭蜂奸。
請注意犁苏,父指紋僅作為在軟件中檢測父節(jié)點和子節(jié)點的快速方式,軟件必須愿意處理沖突扩所。在內(nèi)部围详,可以使用完整的160位標識符。
導(dǎo)入序列化擴展公鑰時,實現(xiàn)必須驗證公鑰數(shù)據(jù)中的X坐標是否對應(yīng)于曲線上的一個點助赞。如果不是买羞,擴展的公鑰是無效的。
主密鑰生成
可能的擴展密鑰對的總數(shù)幾乎為2^512雹食,但生成的密鑰只有256位長畜普,在安全性方面提供約一半的密鑰。 因此群叶,主密鑰不是直接生成吃挑,而是從潛在的短種子值生成。
從(P)RNG生成所選長度(128到512位;建議256位)的種子字節(jié)序列S盖呼。
計算I = HMAC-SHA512(Key =“Bitcoin seed”儒鹿,Data = S)
將I分為兩個32字節(jié)序列,IL和IR几晤。
使用parse256(IL)作為主密鑰约炎,IR作為主鏈碼。
如果IL為0或≥n蟹瘾,則主密鑰無效圾浅。
詳細說明:錢包結(jié)構(gòu)
前面的部分指定了關(guān)鍵樹及其節(jié)點。下一步是在這棵樹上施加錢包結(jié)構(gòu)憾朴。本節(jié)中定義的布局是僅默認的狸捕,客戶端要求具備兼容性,即使不支持所有功能众雷。
缺省的錢包結(jié)構(gòu)
HDW被組織為幾個“帳戶”灸拍。 帳號已編號,默認帳號(“”)為數(shù)字0.客戶端不需要支持多個帳戶 - 如果不是砾省,則只使用默認帳戶鸡岗。
每個帳戶由兩個密鑰鏈組成:內(nèi)部和外部鏈。 外部密鑰鏈用于生成新的公共地址编兄,而內(nèi)部密鑰鏈用于所有其他操作(更改地址轩性,生成地址...,任何不需要傳達的內(nèi)容)狠鸳。 不支持單獨的密鑰鏈的客戶端應(yīng)該使用外部的一個揣苏。
m / iH / 0 / k對應(yīng)于從主站m導(dǎo)出的HDW的帳號i的外部鏈的第k個密鑰對。
m / iH / 1 / k對應(yīng)于從主站m導(dǎo)出的HDW的帳號i的內(nèi)部鏈的第k個密鑰件舵。
示例
全錢包分享:m
在兩個系統(tǒng)需要訪問單個共享錢包的情況下卸察,并且都需要能夠執(zhí)行花費的情況下,需要共享主專用擴展密鑰铅祸。節(jié)點可以保留為外部鏈條緩存的N個預(yù)先密鑰池蛾派,以監(jiān)聽收到的付款。內(nèi)部鏈條的前瞻性可能非常小,因為這里不可能有任何差距洪乍。對于第一個未使用的帳戶的鏈,額外的預(yù)覽可能是活動的 - 在使用時觸發(fā)新帳戶的創(chuàng)建夜焦。請注意壳澳,帳戶的名稱仍然需要手動輸入,無法通過塊鏈同步茫经。
審核:N(m / *)
如果審核員需要完全訪問傳入和傳出付款列表巷波,則可以共享所有帳戶公用擴展密鑰。這將允許審核員在所有帳戶中查看和從錢包中獲得的所有交易卸伞,但不能查看單個保密密鑰抹镊。
每-辦公室余額:m / iH
當一家企業(yè)有幾個獨立的辦公室時,他們都可以使用從一個主人那里獲得的錢包荤傲。這將允許總部維持一個超級錢包垮耳,看到所有辦公室的所有進出口交易,甚至允許在辦公室之間移動資金遂黍。
經(jīng)常性企業(yè)對企業(yè)交易:N(m / iH / 0)
如果兩個業(yè)務(wù)伙伴經(jīng)常轉(zhuǎn)賬终佛,可以將特定賬戶的外部鏈(M / ih / 0)的擴展公鑰用作“超級地址”,允許頻繁的交易(不容易)相關(guān)聯(lián)雾家,但不需要為每個付款請求一個新的地址铃彰。這種機制也可以被礦井運營商用作可變支付地址。
不安全的收款人:N(m / iH / 0)
當使用不安全的網(wǎng)絡(luò)服務(wù)器來運行電子商務(wù)網(wǎng)站時芯咧,需要知道用于接收付款的公共地址牙捉。網(wǎng)絡(luò)服務(wù)器只需要知道單個帳戶的外部鏈路的公共擴展密鑰。這意味著有人非法獲取對網(wǎng)絡(luò)服務(wù)器的訪問權(quán)限敬飒,最多可以看到所有收到的付款邪铲,但是無法竊取錢,不能(簡單地)區(qū)分出去的交易驶拱,在存在交易的情況下也不能看到其他網(wǎng)絡(luò)服務(wù)器收到的付款霜浴。
兼容性
為符合本標準,客戶端必須至少能夠?qū)霐U展的公鑰或私鑰蓝纲,才能將其直接后代作為錢包密鑰訪問阴孟。 說明書第二部分中提供的錢包結(jié)構(gòu)(主/賬戶/鏈/子鏈)僅供參考,但建議作為最小結(jié)構(gòu)税迷,以便易于兼容 - 即使沒有單獨的帳戶或內(nèi)部和外部鏈條之間的區(qū)別永丝。然而,實現(xiàn)可能會因特定需求而偏離它; 更復(fù)雜的應(yīng)用程序可能需要更復(fù)雜的樹結(jié)構(gòu)箭养。
安全
除了期望EC公鑰自己加密之外:
- 給定公鑰K慕嚷,攻擊者無法通過比解決EC離散對數(shù)問題(假定需要2128個組操作)更有效地方式找到相應(yīng)的私鑰。
本標準的預(yù)期安全屬性有:
- 給定一個子擴展私鑰(ki,ci)和整數(shù)i喝检,攻擊者不能比HMAC-SHA512的2^256暴力更有效地方式找到父私鑰kpar嗅辣。
- 給定具有不同ij的(索引,擴展私鑰)元組(ij挠说,(kij澡谭,cij))的任何數(shù)目(2≤N≤2^32-1),確定它們是否從公開父擴展私鑰派生(即损俭, 是否存在一個(kpar蛙奖,cpar),使得對于(0..N-1)中的每個j杆兵,CKDpriv((kpar雁仲,cpar),ij)=(kij琐脏,cij))不能比2^256復(fù)雜度 HMAC-SHA512的更有效的完成攒砖。
請注意以下屬性不存在:
- 給定父擴展公鑰(Kpar,cpar)和子公鑰(Ki)骆膝,很難找到i祭衩。
- 給定一個父擴展公鑰(Kpar,cpar)和一個非強化的子私鑰(ki)阅签,很難找到kpar掐暮。
含義
私鑰和公鑰必須像往常一樣保持安全。泄露私鑰意味著可以花費比特幣泄露公鑰可能意味著失去隱私政钟。
對于擴展密鑰路克,必須更加小心,因為它們對應(yīng)于整個(子)密鑰樹养交。
一個弱點可能不是很明顯的精算,就是知道父擴展公鑰加上從它分散的任何非硬化私鑰相當于知道父擴展私鑰(因此知道從其分散的每個私鑰和公鑰)。這意味著擴展公鑰必須比常規(guī)公鑰更仔細地對待碎连。 這也是硬化密鑰存在的原因灰羽,為什么它們被用于樹中的帳戶級別。這樣一來鱼辙,專用(或更低)私鑰的泄漏就不會危害主賬號或其他賬戶廉嚼。
測試向量
測試向量 1
發(fā)送 (hex): 000102030405060708090a0b0c0d0e0f
Chain m
ext pub: xpub661MyMwAqRbcFtXgS5sYJABqqG9YLmC4Q1Rdap9gSE8NqtwybGhePY2gZ29ESFjqJoCu1Rupje8YtGqsefD265TMg7usUDFdp6W1EGMcet8
ext prv: xprv9s21ZrQH143K3QTDL4LXw2F7HEK3wJUD2nW2nRk4stbPy6cq3jPPqjiChkVvvNKmPGJxWUtg6LnF5kejMRNNU3TGtRBeJgk33yuGBxrMPHi
Chain m/0H
ext pub: xpub68Gmy5EdvgibQVfPdqkBBCHxA5htiqg55crXYuXoQRKfDBFA1WEjWgP6LHhwBZeNK1VTsfTFUHCdrfp1bgwQ9xv5ski8PX9rL2dZXvgGDnw
ext prv: xprv9uHRZZhk6KAJC1avXpDAp4MDc3sQKNxDiPvvkX8Br5ngLNv1TxvUxt4cV1rGL5hj6KCesnDYUhd7oWgT11eZG7XnxHrnYeSvkzY7d2bhkJ7
Chain m/0H/1
ext pub: xpub6ASuArnXKPbfEwhqN6e3mwBcDTgzisQN1wXN9BJcM47sSikHjJf3UFHKkNAWbWMiGj7Wf5uMash7SyYq527Hqck2AxYysAA7xmALppuCkwQ
ext prv: xprv9wTYmMFdV23N2TdNG573QoEsfRrWKQgWeibmLntzniatZvR9BmLnvSxqu53Kw1UmYPxLgboyZQaXwTCg8MSY3H2EU4pWcQDnRnrVA1xe8fs
Chain m/0H/1/2H
ext pub: xpub6D4BDPcP2GT577Vvch3R8wDkScZWzQzMMUm3PWbmWvVJrZwQY4VUNgqFJPMM3No2dFDFGTsxxpG5uJh7n7epu4trkrX7x7DogT5Uv6fcLW5
ext prv: xprv9z4pot5VBttmtdRTWfWQmoH1taj2axGVzFqSb8C9xaxKymcFzXBDptWmT7FwuEzG3ryjH4ktypQSAewRiNMjANTtpgP4mLTj34bhnZX7UiM
Chain m/0H/1/2H/2
ext pub: xpub6FHa3pjLCk84BayeJxFW2SP4XRrFd1JYnxeLeU8EqN3vDfZmbqBqaGJAyiLjTAwm6ZLRQUMv1ZACTj37sR62cfN7fe5JnJ7dh8zL4fiyLHV
ext prv: xprvA2JDeKCSNNZky6uBCviVfJSKyQ1mDYahRjijr5idH2WwLsEd4Hsb2Tyh8RfQMuPh7f7RtyzTtdrbdqqsunu5Mm3wDvUAKRHSC34sJ7in334
Chain m/0H/1/2H/2/1000000000
ext pub: xpub6H1LXWLaKsWFhvm6RVpEL9P4KfRZSW7abD2ttkWP3SSQvnyA8FSVqNTEcYFgJS2UaFcxupHiYkro49S8yGasTvXEYBVPamhGW6cFJodrTHy
ext prv: xprvA41z7zogVVwxVSgdKUHDy1SKmdb533PjDz7J6N6mV6uS3ze1ai8FHa8kmHScGpWmj4WggLyQjgPie1rFSruoUihUZREPSL39UNdE3BBDu76
測試向量2
發(fā)送 (hex): fffcf9f6f3f0edeae7e4e1dedbd8d5d2cfccc9c6c3c0bdbab7b4b1aeaba8a5a29f9c999693908d8a8784817e7b7875726f6c696663605d5a5754514e4b484542
Chain m
ext pub: xpub661MyMwAqRbcFW31YEwpkMuc5THy2PSt5bDMsktWQcFF8syAmRUapSCGu8ED9W6oDMSgv6Zz8idoc4a6mr8BDzTJY47LJhkJ8UB7WEGuduB
ext prv: xprv9s21ZrQH143K31xYSDQpPDxsXRTUcvj2iNHm5NUtrGiGG5e2DtALGdso3pGz6ssrdK4PFmM8NSpSBHNqPqm55Qn3LqFtT2emdEXVYsCzC2U
Chain m/0
ext pub: xpub69H7F5d8KSRgmmdJg2KhpAK8SR3DjMwAdkxj3ZuxV27CprR9LgpeyGmXUbC6wb7ERfvrnKZjXoUmmDznezpbZb7ap6r1D3tgFxHmwMkQTPH
ext prv: xprv9vHkqa6EV4sPZHYqZznhT2NPtPCjKuDKGY38FBWLvgaDx45zo9WQRUT3dKYnjwih2yJD9mkrocEZXo1ex8G81dwSM1fwqWpWkeS3v86pgKt
Chain m/0/2147483647H
ext pub: xpub6ASAVgeehLbnwdqV6UKMHVzgqAG8Gr6riv3Fxxpj8ksbH9ebxaEyBLZ85ySDhKiLDBrQSARLq1uNRts8RuJiHjaDMBU4Zn9h8LZNnBC5y4a
ext prv: xprv9wSp6B7kry3Vj9m1zSnLvN3xH8RdsPP1Mh7fAaR7aRLcQMKTR2vidYEeEg2mUCTAwCd6vnxVrcjfy2kRgVsFawNzmjuHc2YmYRmagcEPdU9
Chain m/0/2147483647H/1
ext pub: xpub6DF8uhdarytz3FWdA8TvFSvvAh8dP3283MY7p2V4SeE2wyWmG5mg5EwVvmdMVCQcoNJxGoWaU9DCWh89LojfZ537wTfunKau47EL2dhHKon
ext prv: xprv9zFnWC6h2cLgpmSA46vutJzBcfJ8yaJGg8cX1e5StJh45BBciYTRXSd25UEPVuesF9yog62tGAQtHjXajPPdbRCHuWS6T8XA2ECKADdw4Ef
Chain m/0/2147483647H/1/2147483646H
ext pub: xpub6ERApfZwUNrhLCkDtcHTcxd75RbzS1ed54G1LkBUHQVHQKqhMkhgbmJbZRkrgZw4koxb5JaHWkY4ALHY2grBGRjaDMzQLcgJvLJuZZvRcEL
ext prv: xprvA1RpRA33e1JQ7ifknakTFpgNXPmW2YvmhqLQYMmrj4xJXXWYpDPS3xz7iAxn8L39njGVyuoseXzU6rcxFLJ8HFsTjSyQbLYnMpCqE2VbFWc
Chain m/0/2147483647H/1/2147483646H/2
ext pub: xpub6FnCn6nSzZAw5Tw7cgR9bi15UV96gLZhjDstkXXxvCLsUXBGXPdSnLFbdpq8p9HmGsApME5hQTZ3emM2rnY5agb9rXpVGyy3bdW6EEgAtqt
ext prv: xprvA2nrNbFZABcdryreWet9Ea4LvTJcGsqrMzxHx98MMrotbir7yrKCEXw7nadnHM8Dq38EGfSh6dqA9QWTyefMLEcBYJUuekgW4BYPJcr9E7j
測試向量3
These vectors test for the retention of leading zeros. See bitpay/bitcore-lib#47 and iancoleman/bip39#58 for more information.
Seed (hex): 4b381541583be4423346c643850da4b320e46a87ae3d2a4e6da11eba819cd4acba45d239319ac14f863b8d5ab5a0d0c64d2e8a1e7d1457df2e5a3c51c73235be
Chain m
ext pub: xpub661MyMwAqRbcEZVB4dScxMAdx6d4nFc9nvyvH3v4gJL378CSRZiYmhRoP7mBy6gSPSCYk6SzXPTf3ND1cZAceL7SfJ1Z3GC8vBgp2epUt13
ext prv: xprv9s21ZrQH143K25QhxbucbDDuQ4naNntJRi4KUfWT7xo4EKsHt2QJDu7KXp1A3u7Bi1j8ph3EGsZ9Xvz9dGuVrtHHs7pXeTzjuxBrCmmhgC6
Chain m/0H
ext pub: xpub68NZiKmJWnxxS6aaHmn81bvJeTESw724CRDs6HbuccFQN9Ku14VQrADWgqbhhTHBaohPX4CjNLf9fq9MYo6oDaPPLPxSb7gwQN3ih19Zm4Y
ext prv: xprv9uPDJpEQgRQfDcW7BkF7eTya6RPxXeJCqCJGHuCJ4GiRVLzkTXBAJMu2qaMWPrS7AANYqdq6vcBcBUdJCVVFceUvJFjaPdGZ2y9WACViL4L
實現(xiàn)
(這里太簡單,就不翻了)
Two Python implementations exist:
PyCoin (https://github.com/richardkiss/pycoin) is a suite of utilities for dealing with Bitcoin that includes BIP0032 wallet features. BIP32Utils (https://github.com/jmcorgan/bip32utils) is a library and command line interface specifically focused on BIP0032 wallets and scripting.
2 Java implementations exist: https://github.com/bitsofproof/supernode/blob/1.1/api/src/main/java/com/bitsofproof/supernode/api/ExtendedKey.java and https://github.com/bushidowallet/bushido-java-core/tree/master/src/main/java/com/bushidowallet/core/bitcoin/bip32
A C++ implementation is available at https://github.com/ciphrex/mSIGNA/blob/master/deps/CoinCore/src/hdkeys.h
An Objective-C implementation is available at https://github.com/oleganza/CoreBitcoin/blob/master/CoreBitcoin/BTCKeychain.h
A Ruby implementation is available at https://github.com/GemHQ/money-tree
Two Go implementations exist:
hdkeychain (https://github.com/conformal/btcutil/tree/master/hdkeychain) provides an API for bitcoin hierarchical deterministic extended keys (BIP0032). Go HD Wallet (https://github.com/WeMeetAgain/go-hdwallet).
Two JavaScript implementations exist: available at https://github.com/sarchar/brainwallet.github.com/tree/bip32 and https://github.com/bitpay/bitcore
A PHP implemetation is available at https://github.com/Bit-Wasp/bitcoin-lib-php
A C# implementation is available at https://github.com/NicolasDorier/NBitcoin (ExtKey, ExtPubKey)
A Haskell implementation is available at https://github.com/haskoin/haskoin together with a CLI interface at https://github.com/np/hx
致謝
Gregory Maxwell提出了2型確定性錢包的原始想法倒戏,并對此進行了許多討論怠噪。
Alan Reiner在Armory中實施這一計劃,并隨后提出了一些建議杜跷。
Eric Lombrozo審查和修改此BIP傍念。
Mike Caldwell為版本字節(jié)表示便于識別的Base58字符串作出貢獻矫夷。