比特幣之錢包

錢包技術(shù)概述

比特幣錢包只含有密鑰眷柔,而不是錢幣翁巍。 每個(gè)用戶有一個(gè)包含多個(gè)密鑰的錢包。 錢包只包含私鑰/公鑰對(duì)的密鑰鏈慌植。

用戶用密鑰簽名交易甚牲,從而證明他們擁有交易輸出(他們的錢幣)。 錢幣以交易輸出的形式存儲(chǔ)在區(qū)塊鏈中(通常記為vout或txout)蝶柿。

有兩種主要類型的錢包丈钙,區(qū)別在于它們包含的多個(gè)密鑰是否相互關(guān)聯(lián)。

  1. 第一種類型是非確定性錢包(nondeterministic wallet)交汤,其中每個(gè)密鑰都是從隨機(jī)數(shù)獨(dú)立生成的雏赦。密鑰彼此無(wú)關(guān)。這種錢包也被稱為“Just a Bunch Of Keys(一堆密鑰)”,簡(jiǎn)稱JBOK錢包星岗。

  2. 第二種類型是確定性錢包(deterministic wallet)填大,其中所有的密鑰都是從一個(gè)主密鑰派生出來(lái),這個(gè)主密鑰即為種子(seed)伍茄。該類型錢包中所有密鑰都相互關(guān)聯(lián)栋盹,如果有原始種子,則可以再次生成全部密鑰敷矫。確定性錢包中使用了許多不同的密鑰推導(dǎo)方法例获。最常用的推導(dǎo)方法是使用樹(shù)狀結(jié)構(gòu),稱為分級(jí)確定性錢包或HD錢包曹仗。

確定性錢包由種子衍生創(chuàng)造榨汤。為了便于使用,種子被編碼為英文單詞怎茫,也稱為助記詞收壕。

非確定性(隨機(jī))錢包

在最早的一批比特幣客戶端中( Bitcoin Core,現(xiàn)在稱作比特幣核心客戶端)轨蛤,錢包只是隨機(jī)生成的私鑰集合蜜宪。這種類型的錢包被稱作零型非確定錢包。舉個(gè)例子祥山,比 特幣核心客戶端預(yù)先生成100個(gè)隨機(jī)私鑰圃验,從最開(kāi)始就生成足夠多的私鑰并且每個(gè)密鑰只使用一次。這種錢包現(xiàn)在正在被確定性錢包替換缝呕,因?yàn)樗鼈冸y以管理澳窑、 備份以及導(dǎo)入。隨機(jī)密鑰的缺點(diǎn)就是如果你生成很多私鑰供常,你必須保存它們所有的副本摊聋。這就意味著這個(gè)錢包必須被經(jīng)常性 地備份。每一個(gè)密鑰都必須備份栈暇,否則一旦錢包不可訪問(wèn)時(shí)麻裁,錢包所控制的資金就付之東流。這種情況直接與避免地址重復(fù)使用的原則相沖突——每個(gè)比特幣地址只能用一次交易源祈。地址重復(fù)使用將多個(gè)交易和地址關(guān)聯(lián)在一起煎源,這會(huì)減少隱私。當(dāng)你想避免重復(fù)使用地址時(shí)新博,零型非確定性錢包并不是好的選擇薪夕,因?yàn)槟阋獎(jiǎng)?chuàng)造過(guò)多的私鑰并且要保存它們脚草。雖然比特幣核心客戶端包含零型錢包赫悄,但比特幣的核心開(kāi)發(fā)者并不鼓勵(lì)大家使用。

image

確定性(種子)錢包

確定性,或者“種子”錢包包含通過(guò)使用單項(xiàng)離散函數(shù)而可從公共的種子生成的私鑰埂淮。種子是隨機(jī)生成的數(shù)字姑隅。這個(gè)數(shù)字也含有比如索引號(hào)碼或者可生成私鑰的“鏈碼”(參見(jiàn)“ 分層確定性錢包”)。在確定性錢包中倔撞,種子足夠恢復(fù)所有的已經(jīng)產(chǎn)生的私鑰讲仰,所以只用在初始創(chuàng)建時(shí)的一個(gè)簡(jiǎn)單備份就足以搞定。并且種子也足夠讓錢包導(dǎo)入或者導(dǎo)出痪蝇。這就很容易允許使用者的私鑰在錢包之間輕松轉(zhuǎn)移鄙陡。

圖5-2展示了確定性錢包的邏輯圖。


image

分層確定性錢包(HD Wallets (BIP-32/BIP-44))

確定性錢包被開(kāi)發(fā)成更容易從單個(gè)“種子”中生成許多密鑰躏啰。確定性錢包的最高級(jí)形式是通過(guò)BIP0032標(biāo)準(zhǔn)定義的HD錢包趁矾。HD錢包包含以樹(shù)狀結(jié)構(gòu)衍生的密鑰,使得父密鑰可以衍生一系列子密鑰给僵,每個(gè)子密鑰又可以衍生出一系列孫密鑰毫捣,以此類推,無(wú)限衍生帝际。圖5-3展示了樹(shù)狀結(jié)構(gòu)蔓同。

image

相比較隨機(jī)(不確定性)密鑰,HD錢包有兩個(gè)主要的優(yōu)勢(shì)蹲诀。

  1. 第一斑粱,樹(shù)狀結(jié)構(gòu)可以被用來(lái)表達(dá)額外的組織含義。比如當(dāng)一個(gè)特定分支的子密鑰被用來(lái)接收交易收入并且有另一個(gè)分支的子密鑰用來(lái)負(fù)責(zé)支付花費(fèi)侧甫。不同分支的密鑰都可以被用在企業(yè)環(huán)境中珊佣,這就可以支配不同的分支部門、子公司披粟、具體功能以及會(huì)計(jì)類別咒锻。

  2. HD錢包的第二個(gè)好處就是它可以允許讓使用者去建立一個(gè)公共密鑰的序列而不需要訪問(wèn)相對(duì)應(yīng)的私鑰。這可允許HD錢包在不安全的服務(wù)器中使用或者在每筆交易中發(fā)行不同的公共鑰匙守屉。公共鑰匙不需要被預(yù)先加載或者提前衍生惑艇,而在服務(wù)器中不需要可用來(lái)支付的私鑰。

種子和助記詞(BIP-39)

HD錢包具有管理多個(gè)密鑰和地址的強(qiáng)大機(jī)制拇泛。由一系列英文單詞生成種子是個(gè)標(biāo)準(zhǔn)化的方法滨巴,這樣易于在錢包中轉(zhuǎn)移、導(dǎo)出和導(dǎo)入俺叭,如果HD錢包與這種方法相結(jié)合恭取,將會(huì)更加有用。 這些英文單詞被稱為助記詞熄守,標(biāo)準(zhǔn)由BIP-39定義蜈垮。 今天耗跛,大多數(shù)比特幣錢包(以及其他加密貨幣的錢包)使用此標(biāo)準(zhǔn),并可以使用可互操作的助記詞導(dǎo)入和導(dǎo)出種子進(jìn)行備份和恢復(fù)攒发。

讓我們從實(shí)際的角度來(lái)看以下哪種種子更容易抄錄调塌、閱讀、導(dǎo)出以及導(dǎo)入惠猿。

16進(jìn)制表示的種子: 0C1E24E5917779D297E14D45F14E1A1A

助記詞表示的種子:
army van defense carry jealous true garbage claim echo media make crunch

從助記詞生成種子

助記詞表示長(zhǎng)度為128至256位的熵羔砾。 通過(guò)使用密鑰延伸函數(shù)PBKDF2,熵被用于導(dǎo)出較長(zhǎng)的(512位)種子偶妖。將所得的種子用于構(gòu)建確定性錢包并得到其密鑰姜凄。

密鑰延伸函數(shù)有兩個(gè)參數(shù):助記詞和鹽。其中鹽的目的是增加構(gòu)建能夠進(jìn)行暴力攻擊的查找表的困難度趾访。 在BIP-39標(biāo)準(zhǔn)中檀葛,鹽具有另一目的,它允許引入密碼短語(yǔ)(passphrase)腹缩,作為保護(hù)種子的附加安全因素屿聋,我們將在BIP-39可選密碼短語(yǔ)章節(jié)詳細(xì)地描述。

創(chuàng)建助記詞之后的7-9步是:

7藏鹊、PBKDF2密鑰延伸函數(shù)的第一個(gè)參數(shù)是從步驟6生成的助記符润讥。

8、PBKDF2密鑰延伸函數(shù)的第二個(gè)參數(shù)是鹽盘寡。 由字符串常數(shù)“助記詞”與可選的用戶提供的密碼字符串連接組成楚殿。

9、PBKDF2使用HMAC-SHA512算法竿痰,使用2048次哈希來(lái)延伸助記符和鹽參數(shù)脆粥,產(chǎn)生一個(gè)512位的值作為其最終輸出。 這個(gè)512位的值就是種子影涉。

圖5-7顯示了從助記詞如何生成種子

seed

BIP-39中的可選密碼短語(yǔ)

BIP-39標(biāo)準(zhǔn)允許在推導(dǎo)種子時(shí)使用可選的密碼短語(yǔ)变隔。 如果沒(méi)有使用密碼短語(yǔ),助記詞是用由常量字符串“助記詞”構(gòu)成的鹽進(jìn)行延伸蟹倾,從任何給定的助記詞產(chǎn)生一個(gè)特定的512位種子匣缘。 如果使用密碼短語(yǔ),密鑰延伸函數(shù)使用同樣的助記詞也會(huì)產(chǎn)生不同的種子鲜棠。事實(shí)上肌厨,給予一個(gè)單一的助記詞,每一個(gè)可能的密碼短語(yǔ)都會(huì)導(dǎo)致不同的種子豁陆。 基本上沒(méi)有“錯(cuò)誤”的密碼短語(yǔ)柑爸, 所有密碼短語(yǔ)都是有效的,它們都會(huì)導(dǎo)致不同的種子盒音,形成一大批可能未初始化的錢包表鳍。這批錢包非常之大(2^512)何址,使用暴力破解或隨機(jī)猜測(cè)基本不可能。

提示BIP-39中沒(méi)有“錯(cuò)誤的”密碼短語(yǔ)进胯。 每個(gè)密碼都會(huì)導(dǎo)致一些錢包,只是未使用的錢包是空的原押。

可選密碼短語(yǔ)帶來(lái)兩個(gè)重要功能:

  • (存儲(chǔ)在大腦中的)密碼短語(yǔ)成為第二個(gè)因素胁镐,使得助記詞不能單獨(dú)使用,避免了助記詞備份盜取后被利用诸衔。 起到掩人耳目的效果盯漂,把密碼短語(yǔ)指向有小額資金的錢包,分散攻擊者注意力笨农,使其不在關(guān)注擁有大額資金的“真實(shí)”錢包就缆。

然而,需要注意的是谒亦,使用密碼短語(yǔ)也會(huì)引起丟失的風(fēng)險(xiǎn):

  • 如果錢包所有者無(wú)行為能力或死亡竭宰,沒(méi)有人知道密碼,種子是無(wú)用的份招,所有存儲(chǔ)在錢包中的資金都將永遠(yuǎn)丟失切揭。相反,如果所有者將密碼短語(yǔ)與種子備份在相同的地方锁摔,則違反了上述第二個(gè)因素的目的廓旬。雖然密碼是非常有用的,但它們只能與仔細(xì)計(jì)劃的備份和恢復(fù)流程結(jié)合使用谐腰,考慮到所有者個(gè)人風(fēng)險(xiǎn)的可能性孕豹,應(yīng)該允許其家人恢復(fù)加密資產(chǎn)。

錢包標(biāo)準(zhǔn)

由于比特幣錢包技術(shù)已經(jīng)成熟十气,出現(xiàn)了一些常見(jiàn)的行業(yè)標(biāo)準(zhǔn)励背,使得比特幣錢包具備廣泛互操作,易于使用砸西,安全和靈活的特性椅野。這些常用的標(biāo)準(zhǔn)是:

  1. 助記碼,基于BIP-39
  2. HD錢包籍胯,基于BIP-32
  3. 多用途HD錢包結(jié)構(gòu)竟闪,基于BIP-43
  4. 多幣種和多帳戶錢包,基于BIP-44

這些標(biāo)準(zhǔn)可能會(huì)隨著發(fā)展而改變或過(guò)時(shí)杖狼,但是現(xiàn)在它們形成了一套互鎖技術(shù)炼蛤,這些技術(shù)已成為比特幣的事實(shí)上的錢包標(biāo)準(zhǔn)。

擴(kuò)展與衍生密鑰

私有子密鑰的衍生

分層確定性錢包使用CKD(child key derivation)函數(shù)去從母密鑰衍生出子密鑰蝶涩。

子密鑰衍生函數(shù)是基于單項(xiàng)哈希函數(shù)理朋。這個(gè)函數(shù)結(jié)合了:

  • 一個(gè)母私鑰或者公共鑰匙(ECDSA未壓縮鍵)

  • 一個(gè)叫做鏈碼(256 bits)的種子

  • 一個(gè)索引號(hào)(32 bits)

鏈碼是用來(lái)給這個(gè)過(guò)程引入確定性隨機(jī)數(shù)據(jù)的絮识,使得索引不能充分衍生其他的子密鑰。因此嗽上,有了子密鑰并不能讓它發(fā)現(xiàn)自己的姊妹密鑰次舌,除非你已經(jīng)有了鏈碼。最初的鏈碼種子(在密碼樹(shù)的根部)是用隨機(jī)數(shù)據(jù)構(gòu)成的兽愤,隨后鏈碼從各自的母鏈碼中衍生出來(lái)彼念。

這三個(gè)項(xiàng)目(母私鑰,鏈碼浅萧,索引)相結(jié)合并散列可以生成子密鑰逐沙。向密碼樹(shù)下一層重復(fù)這個(gè)過(guò)程,每個(gè)子密鑰可以依次成為母密鑰繼續(xù)創(chuàng)造它自己的子密鑰洼畅,直到無(wú)限代吩案。

擴(kuò)展密鑰

正如我們之前看到的,密鑰衍生函數(shù)可以被用來(lái)創(chuàng)造密鑰樹(shù)上任何層級(jí)的子密鑰帝簇。這只需要三個(gè)輸入量:一個(gè)密鑰徘郭,一個(gè)鏈碼以及想要的子密鑰的索引。密鑰以及鏈碼這兩個(gè)重要的部分被結(jié)合之后丧肴,就叫做擴(kuò)展密鑰(extended key)崎岂。術(shù)語(yǔ)“extended key”也被認(rèn)為是“可擴(kuò)展的密鑰”,因?yàn)檫@種密鑰可以用來(lái)衍生子密鑰闪湾。

擴(kuò)展密鑰可以簡(jiǎn)單地被儲(chǔ)存并且表示為簡(jiǎn)單的將256位密鑰與256位鏈碼所并聯(lián)的512位序列冲甘。有兩種擴(kuò)展密鑰。擴(kuò)展的私鑰是私鑰以及鏈碼的結(jié)合途样。它可被用來(lái)衍生子私鑰(子私鑰可以衍生子公鑰)江醇。公鑰以及鏈碼組成擴(kuò)展公鑰,它可以用來(lái)擴(kuò)展子公鑰何暇,見(jiàn)“生成公鑰”章節(jié)陶夜。

想象一個(gè)擴(kuò)展密鑰作為HD錢包中密鑰樹(shù)結(jié)構(gòu)的一個(gè)分支的根。你可以衍生出這個(gè)分支的剩下所有部分裆站。擴(kuò)展私鑰可以創(chuàng)建一個(gè)完整的分支条辟,而擴(kuò)展公鑰只能夠創(chuàng)造一個(gè)公鑰的分支。

提示一個(gè)擴(kuò)展密鑰包括一個(gè)私鑰(或者公鑰)以及一個(gè)鏈碼宏胯。一個(gè)擴(kuò)展密鑰可以創(chuàng)造出子密鑰并且能創(chuàng)造出密鑰樹(shù)結(jié)構(gòu)中的整個(gè)分支羽嫡。分享擴(kuò)展密鑰就可以訪問(wèn)整個(gè)分支。

公共子密鑰推導(dǎo)

正如之前提到的肩袍,分層確定性錢包的一個(gè)很有用的特點(diǎn)就是可以不通過(guò)私鑰而直接從公共母密鑰派生出公共子密鑰的能 力杭棵。這就給了我們兩種衍生子公鑰的方法:或者通過(guò)子私鑰,再或者就是直接通過(guò)母公鑰氛赐。

因此魂爪,擴(kuò)展密鑰可以在HD錢包結(jié)構(gòu)的分支中先舷,被用來(lái)衍生所有的公鑰(且只有公鑰)。

這種快捷方式可以用來(lái)創(chuàng)造非常保密的只有公鑰配置滓侍。在配置中蒋川,服務(wù)器或者應(yīng)用程序不管有沒(méi)有私鑰,都可以有擴(kuò)展公鑰的副本撩笆。這種配置可以創(chuàng)造出無(wú)限數(shù)量的公鑰以及比特幣地址捺球。但是發(fā)送到這個(gè)地址里的任何比特幣都不能使用。與此同時(shí)浇衬,在另一種更保險(xiǎn)的服務(wù)器上,擴(kuò)展私鑰可以衍生出所有的對(duì)應(yīng)的可簽署交易以及花錢的私鑰餐济。

  • 這種方案的常見(jiàn)應(yīng)用是安裝擴(kuò)展公鑰電商的網(wǎng)絡(luò)服務(wù)器上耘擂。網(wǎng)絡(luò)服務(wù)器可以使用這個(gè)公鑰衍生函數(shù)去給每一筆交易(比如客戶的購(gòu)物車)創(chuàng)造一個(gè)新的比特幣地址。但為了避免被偷絮姆,網(wǎng)絡(luò)服務(wù)商不會(huì)有任何私鑰醉冤。沒(méi)有HD錢包的話,唯一的方法就是在不同的安全服務(wù)器上創(chuàng)造成千上萬(wàn)個(gè)比特幣地址篙悯,之后就提前上傳到電商服務(wù)器上蚁阳。這種方法比較繁瑣而且要求持續(xù)的維護(hù)來(lái)確保電商服務(wù)器不“用光”公鑰。

  • 這種解決方案的另一種常見(jiàn)的應(yīng)用是冷藏或者硬件錢包鸽照。在這種情況下螺捐,擴(kuò)展的私鑰可以被儲(chǔ)存在紙質(zhì)錢包中或者硬件設(shè)備中(比如 Trezor 硬件錢包),與此同時(shí)擴(kuò)展公鑰可以在線保存矮燎。使用者可以根據(jù)意愿創(chuàng)造“接收”地址而私鑰可以安全地在線下被保存定血。為了支付資金,使用者可以使用擴(kuò)展的私鑰離線簽署比特幣客戶或者通過(guò)硬件錢包設(shè)備(比如 Trezor)簽署交易诞外。

圖5-11闡述了擴(kuò)展母公鑰來(lái)衍生子公鑰的傳遞機(jī)制澜沟。


image
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市峡谊,隨后出現(xiàn)的幾起案子茫虽,更是在濱河造成了極大的恐慌,老刑警劉巖既们,帶你破解...
    沈念sama閱讀 222,183評(píng)論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件濒析,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡啥纸,警方通過(guò)查閱死者的電腦和手機(jī)悼枢,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,850評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)脾拆,“玉大人馒索,你說(shuō)我怎么就攤上這事莹妒。” “怎么了绰上?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,766評(píng)論 0 361
  • 文/不壞的土叔 我叫張陵旨怠,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我蜈块,道長(zhǎng)鉴腻,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,854評(píng)論 1 299
  • 正文 為了忘掉前任百揭,我火速辦了婚禮爽哎,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘器一。我一直安慰自己课锌,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,871評(píng)論 6 398
  • 文/花漫 我一把揭開(kāi)白布祈秕。 她就那樣靜靜地躺著渺贤,像睡著了一般。 火紅的嫁衣襯著肌膚如雪请毛。 梳的紋絲不亂的頭發(fā)上志鞍,一...
    開(kāi)封第一講書(shū)人閱讀 52,457評(píng)論 1 311
  • 那天,我揣著相機(jī)與錄音方仿,去河邊找鬼固棚。 笑死,一個(gè)胖子當(dāng)著我的面吹牛仙蚜,可吹牛的內(nèi)容都是我干的玻孟。 我是一名探鬼主播,決...
    沈念sama閱讀 40,999評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼鳍征,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼黍翎!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起艳丛,我...
    開(kāi)封第一講書(shū)人閱讀 39,914評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤匣掸,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后氮双,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體碰酝,經(jīng)...
    沈念sama閱讀 46,465評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,543評(píng)論 3 342
  • 正文 我和宋清朗相戀三年戴差,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了送爸。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,675評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖袭厂,靈堂內(nèi)的尸體忽然破棺而出墨吓,到底是詐尸還是另有隱情,我是刑警寧澤纹磺,帶...
    沈念sama閱讀 36,354評(píng)論 5 351
  • 正文 年R本政府宣布帖烘,位于F島的核電站,受9級(jí)特大地震影響橄杨,放射性物質(zhì)發(fā)生泄漏秘症。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,029評(píng)論 3 335
  • 文/蒙蒙 一式矫、第九天 我趴在偏房一處隱蔽的房頂上張望乡摹。 院中可真熱鬧,春花似錦采转、人聲如沸聪廉。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,514評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)锄列。三九已至图云,卻和暖如春惯悠,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背竣况。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,616評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工克婶, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人丹泉。 一個(gè)月前我還...
    沈念sama閱讀 49,091評(píng)論 3 378
  • 正文 我出身青樓情萤,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親摹恨。 傳聞我的和親對(duì)象是個(gè)殘疾皇子筋岛,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,685評(píng)論 2 360

推薦閱讀更多精彩內(nèi)容