第4章:如何存儲(chǔ)和使用比特幣(1)

本章是關(guān)于我們?nèi)绾卧趯?shí)踐中存儲(chǔ)和使用比特幣联予。

4.1本地簡(jiǎn)單存儲(chǔ)

我們從最簡(jiǎn)單的存儲(chǔ)比特幣的方式開(kāi)始,就是將它們放在本地設(shè)備上材原。概括來(lái)說(shuō)躯泰,要花費(fèi)比特幣你需要知道一些公共信息和一些秘密信息。公共信息是區(qū)塊鏈上發(fā)生的事情——硬幣的身份华糖,價(jià)值等等。秘密信息是比特幣所有者的秘鑰瘟裸,想必客叉,這是你的。你不必過(guò)于擔(dān)心如何存儲(chǔ)公共信息话告,因?yàn)楫?dāng)你需要的時(shí)候你總是可以得到它兼搏。但是秘密簽名密鑰是你最好要記錄下來(lái)的。因此沙郭,在實(shí)踐中佛呻,存儲(chǔ)你的比特幣是關(guān)于存儲(chǔ)和管理密鑰。

在找出如何存儲(chǔ)和管理密鑰時(shí)病线,需要牢記三個(gè)目標(biāo)吓著。第一個(gè)是可用性:當(dāng)你想要實(shí)際花費(fèi)你的硬幣可以使用。第二個(gè)是安全性:確保沒(méi)有人可以花你的硬幣送挑。如果有人有權(quán)力花費(fèi)你的硬幣绑莺,他們可以把你的硬幣發(fā)給自己,然后就再也沒(méi)有硬幣了惕耕。第三個(gè)目標(biāo)是方便纺裁,即密鑰管理應(yīng)該比較容易做到。你可以想象,同時(shí)實(shí)現(xiàn)三者可能是一個(gè)挑戰(zhàn)欺缘。

最簡(jiǎn)單的密鑰管理方法是將它們存儲(chǔ)在你自己本地設(shè)備上的文件上:你的計(jì)算機(jī)栋豫,你的手機(jī)或你攜帶,擁有或控制的其他類(lèi)型的小工具谚殊。這對(duì)于方便來(lái)說(shuō)是很好的:有一個(gè)智能手機(jī)應(yīng)用程序丧鸯,可以在幾個(gè)按鈕的推動(dòng)下消費(fèi)硬幣,很難被擊敗络凿。但是這對(duì)于可用性和安全性來(lái)說(shuō)并不好-如果你丟失設(shè)備骡送,如果設(shè)備崩潰,并且你必須去擦拭光盤(pán)絮记,或者你的文件被損壞摔踱,你的鑰匙將丟失,你的硬幣也將丟失怨愤。同樣對(duì)于安全性:如果有人竊取或中斷你的設(shè)備派敷,或者它被惡意軟件感染,他們可以復(fù)制你的密鑰撰洗,然后他們可以將所有的硬幣發(fā)送給自己篮愉。

換句話(huà)說(shuō),將私人密鑰存儲(chǔ)在本地設(shè)備差导,特別是移動(dòng)設(shè)備上试躏,很像是在你的錢(qián)包或腰包中攜帶錢(qián)。有一些零用錢(qián)是有用的设褐,但你不想隨身攜帶你的生活儲(chǔ)蓄颠蕴,因?yàn)槟憧赡軙?huì)失去它,或者有人可能會(huì)偷走它助析。那么你通常所做的就是在你的錢(qián)包里存儲(chǔ)一些信息/一點(diǎn)點(diǎn)錢(qián)犀被,并把大部分錢(qián)留在別的地方。

錢(qián)包外冀。如果您在本地存儲(chǔ)您的比特幣寡键,您通常會(huì)使用錢(qián)包軟件,這是一種可以跟蹤所有硬幣的軟件雪隧,管理鑰匙的所有細(xì)節(jié)西轩,并通過(guò)良好的用戶(hù)界面使事情變得方便。如果您想要將4.25美元的比特幣發(fā)送到你們當(dāng)?shù)氐目Х鹊臧虻敲村X(qián)包軟件會(huì)給你提供一些簡(jiǎn)單的方法遭商。錢(qián)包軟件特別有用,因?yàn)槟阃ǔOM褂靡淮蠖巡煌牡刂吠鄙耍в胁煌拿荑€劫流。你可能會(huì)記得,創(chuàng)建一個(gè)新的公鑰/私鑰對(duì)是很容易的,你可以利用它來(lái)改善你的匿名性或隱私性祠汇。錢(qián)包軟件為你提供一個(gè)簡(jiǎn)單的界面仍秤,告訴你錢(qián)包中有多少錢(qián)。當(dāng)你想使用比特幣時(shí)可很,它會(huì)處理使用哪一個(gè)密鑰的細(xì)節(jié)以及如何生成新的地址等等诗力。

編碼鑰匙:基座58和QR碼(二維碼)。要花費(fèi)或接受比特幣我抠,你還需要一種與另一方交換地址的方法——即要發(fā)送比特幣的地址苇本。地址編碼有兩種主要方式,可以將它們從接收者傳送到花費(fèi)者:作為文本字符串或二維碼菜拓。

要將地址編碼為文本字符串瓣窄,我們將該鍵的位進(jìn)行轉(zhuǎn)換,并將其從二進(jìn)制數(shù)轉(zhuǎn)換為基座58纳鼎。然后我們使用一組58個(gè)字符將每個(gè)數(shù)字編碼為一個(gè)字符;這被稱(chēng)為base58符號(hào)俺夕。為什么是58?因?yàn)檫@是我們將大寫(xiě)字母贱鄙,小寫(xiě)字母以及數(shù)字作為字符包含在內(nèi)的數(shù)字劝贸,但是忽略了可能令人困惑或看起來(lái)像另一個(gè)字符的數(shù)字。例如逗宁,大寫(xiě)字母“O”和零都被取出映九,因?yàn)樗鼈兛雌饋?lái)太像了。這樣就可以在必要的情況下瞎颗,我們現(xiàn)在討論的QR碼等方法可以避免通信地址的手動(dòng)方法氯迂。通過(guò)電話(huà)讀取編碼的地址,或者從打印紙讀取并輸入密碼言缤。理想情況下,通過(guò)我們現(xiàn)在討論的QR碼等方法可以避免通信地址的手動(dòng)方法禁灼。

圖4 .1:代表實(shí)際比特幣地址的QR碼管挟。 隨便送我們一些比特幣。

用于編碼比特幣地址的第二種方法是作為QR碼弄捕,一種簡(jiǎn)單的二維條形碼僻孝。QR碼的優(yōu)點(diǎn)是您可以使用智能手機(jī)掃描它,錢(qián)包軟件可以自動(dòng)將條形碼轉(zhuǎn)換為代表相應(yīng)比特幣地址的一系列位守谓。這在商店中很有用穿铆,例如:退房系統(tǒng)可能會(huì)顯示QR碼,你可以通過(guò)用手機(jī)掃描代碼并將硬幣發(fā)送到該地址來(lái)支付費(fèi)用斋荞。它也可用于手機(jī)到手機(jī)的傳輸荞雏。

虛榮地址。一些個(gè)人或商家喜歡有一個(gè)從一些有意義的文字開(kāi)始的地址。例如凤优,賭博網(wǎng)站Satoshi Bones用戶(hù)將錢(qián)發(fā)送到位置2-6中包含字符串“骨頭”的地址悦陋,例如1bonesEeTcABPjLzAb1VkFgySY6Zqu3sX(所有常規(guī)地址以字符1開(kāi)頭,表示支付到pubkey-hash)筑辨。

我們說(shuō)地址是哈希函數(shù)的輸出俺驶,它產(chǎn)生隨機(jī)數(shù)據(jù),所以字符串“骨頭”是如何進(jìn)入的棍辕?如果Satoshi骨頭簡(jiǎn)單地構(gòu)成這些地址暮现,則缺乏反轉(zhuǎn)哈希函數(shù)的能力,他們將不會(huì)知道相對(duì)應(yīng)的私鑰楚昭,因此實(shí)際上不會(huì)控制這些地址栖袋。相反,他們反復(fù)生成私鑰哪替,直到他們幸運(yùn)栋荸,找到一個(gè)哈希到這種模式的密鑰。這樣的地址稱(chēng)為虛榮地址凭舶,并且有工具來(lái)生成它們晌块。

側(cè)邊欄:加快虛榮地址的生成。在比特幣中帅霜,如果我們調(diào)用私鑰x匆背,則公鑰是g的x次方。取冪表示橢圓曲線(xiàn)組中所謂的標(biāo)量乘法身冀。地址則是钝尸,公鑰的哈希值。我們不會(huì)再這里了解細(xì)節(jié)搂根,但是乘冪是地址生成中緩慢的步驟珍促。

產(chǎn)生虛榮地址的天真的方式是選擇一個(gè)偽隨機(jī)數(shù)x屈藐,計(jì)算亿扁,如果該地址不起作用則重復(fù)。一個(gè)快速的方法是如果第一個(gè)x失敗夹囚,則嘗試x+1仁卷,并繼續(xù)增加穴翩,而不是每次挑選一個(gè)新的x。這是因?yàn)?x锦积,我們已經(jīng)計(jì)算g了芒帕,所以我們只需要對(duì)每個(gè)地址進(jìn)行乘法運(yùn)算,而不是求冪丰介,這要快得多背蟆。事實(shí)上鉴分,它將虛榮地址的生成加密了兩個(gè)數(shù)量級(jí)以上。

這需要多少工作淆储? 由于每個(gè)角色有58種可能性冠场,如果您想要找到以特定k-字符串開(kāi)頭的地址,則平均需要生成58的k次方個(gè)地址本砰,直到你幸運(yùn)碴裙。所以找到一個(gè)以“骨頭”開(kāi)頭的地址將需要產(chǎn)生超過(guò)6億個(gè)地址! 這可以在現(xiàn)在的普通筆記本電腦上完成点额。但是每個(gè)額外的角色都會(huì)變得越來(lái)越難舔株。找到一個(gè)15個(gè)字符的前綴將需要不可行的計(jì)算量,并且(不需要在底層哈希函數(shù)中找到中斷)是不可能的还棱。

4.2冷熱庫(kù)

正如我們剛剛看到的那樣载慈,將Bitcoin存儲(chǔ)在電腦上就像在你的錢(qián)包或腰包里攜帶錢(qián)。這被稱(chēng)為“熱存儲(chǔ)”珍手。 這很方便办铡,但也有一些風(fēng)險(xiǎn)。 另一方面琳要,“冷庫(kù)”是脫機(jī)的寡具。它被鎖在某處。它沒(méi)有連接到互聯(lián)網(wǎng)稚补,它是檔案童叠。所以它確保了安全性,更安全课幕,當(dāng)然不是那么地方便厦坛。這類(lèi)似于你你身上攜帶一些零錢(qián),但把你的生活儲(chǔ)蓄放在更安全的地方乍惊。

想要有獨(dú)立的冷熱存儲(chǔ)杜秸,顯然你需要為每個(gè)密鑰分開(kāi)單獨(dú)的密鑰——否則,如果熱存儲(chǔ)被破壞润绎,冷藏庫(kù)中的硬幣將是易受攻擊的亩歹。你會(huì)想要在熱端和冷端之間來(lái)回移動(dòng)硬幣,所以每邊都需要知道對(duì)方的地址或公鑰凡橱。

冷庫(kù)不在線(xiàn),因此熱存儲(chǔ)和冷藏將無(wú)法通過(guò)任何網(wǎng)絡(luò)彼此連接亭姥。但好消息是稼钩,冷庫(kù)不必在線(xiàn)接收硬幣——由于熱存儲(chǔ)器知道冷藏地址,所以可以隨時(shí)將硬幣發(fā)送到冷庫(kù)达罗。在任何時(shí)候坝撑,如果你的熱錢(qián)包中錢(qián)的金額變得很多時(shí)静秆,你可以將其中的一大塊轉(zhuǎn)移到冷庫(kù)中,而不會(huì)通過(guò)連接到網(wǎng)絡(luò)將你的冷藏置于風(fēng)險(xiǎn)之中巡李。下一次冷藏連接時(shí)抚笔,它將能夠從區(qū)塊鏈接收到關(guān)于這些轉(zhuǎn)移的信息,然后冷庫(kù)將能夠用這些硬幣來(lái)做所需要的侨拦。

但是在管理冷藏地址時(shí)有一點(diǎn)問(wèn)題殊橙。一方面,如前所述狱从,為了隱私和其他原因膨蛮,我們希望能夠在具有不同密鑰的單獨(dú)地址上接收每個(gè)硬幣。所以每當(dāng)我們將硬幣從熱端轉(zhuǎn)移到冷的一面時(shí)季研,我們想為此而使用一個(gè)新鮮的冷地址敞葛。但是由于冷端不在線(xiàn),我們必須有一些方法在熱的一端來(lái)找出這些地址与涡。

生硬的解決方案是為冷方一次生成一大堆地址惹谐,并將它們發(fā)送給熱端,以便逐一使用它們驼卖。缺點(diǎn)是我們必須定期重新連接冷端氨肌,以便傳輸更多的地址。

分層錢(qián)包款慨。一個(gè)更有效的解決方案是使用分層錢(qián)包儒飒。它允許冷端使用基本上無(wú)限數(shù)量的地址,熱端可以了解這些地址檩奠,但雙方只進(jìn)行簡(jiǎn)短的一次性通信桩了。但這需要一點(diǎn)點(diǎn)加密的詭計(jì)。

回顧以前埠戳,以前在第1章討論了關(guān)鍵代碼和數(shù)字簽名時(shí)井誉,我們研究了一個(gè)名為generateKeys的函數(shù),它生成一個(gè)公鑰(作為一個(gè)地址)和一個(gè)秘鑰整胃。在分層錢(qián)包中颗圣,關(guān)鍵代碼的工作方式不同。我們不是生成單個(gè)地址屁使,而是生成所謂的地址生成信息在岂,我們不是生成私鑰,而是生成所謂的私鑰生成信息蛮寂。給定的地址生成的信息蔽午,我們可以生成一個(gè)序列的地址:我們應(yīng)用一個(gè)地址生成函數(shù)將輸入的地址生成信息和任何整數(shù)i作為輸入生成序列中的第i個(gè)地址,同樣的酬蹋,我們可以使用私鑰生成信息生成一系列的私鑰及老。

加密的魔法使這有用的是抽莱,對(duì)于每個(gè)i,第i地址和與第i密鑰“匹配”——也就是說(shuō)骄恶,第i密鑰控制的食铐,并可用于消費(fèi),比特幣來(lái)自這里另一個(gè)重要的加密屬性是安全性:地址生成信息不會(huì)泄露任何有關(guān)私鑰的信息僧鲁。第i地址就好像這一對(duì)是由老式的方式生成一樣虐呻。所以就好像我們有一系列常規(guī)的密鑰對(duì)。

這里另一個(gè)重要的加密屬性是安全性:地址生成信息不會(huì)泄露任何有關(guān)私鑰的信息悔捶。這意味著向任何人發(fā)送地址生成信息是安全的铃慷,所以任何人都可以啟用生成第i個(gè)密鑰。

現(xiàn)在蜕该,并非所有存在的數(shù)字簽名方案都可以被修改犁柜,以支持層次密鑰生成。有的可以有的不行堂淡,但好消息是馋缅,通過(guò)使用比特幣,ECDSA數(shù)字簽名绢淀,支持分層密鑰的生成萤悴,允許這個(gè)技巧。也就是說(shuō)皆的,冷端產(chǎn)生任意多個(gè)密鑰覆履,熱端產(chǎn)生相應(yīng)的地址。

圖4.2:分層錢(qián)包的模式费薄。冷端創(chuàng)建并保存私鑰生成信息和地址生成信息硝全。它將后者一次性轉(zhuǎn)移到熱門(mén)。每當(dāng)它想要向冷端發(fā)送硬幣時(shí)楞抡,熱端依次產(chǎn)生一個(gè)新的地址伟众。當(dāng)冷端重新連接時(shí),它會(huì)順序生成地址召廷,并檢查區(qū)塊鏈以傳送到這些地址凳厢,直到達(dá)到?jīng)]有接收到任何硬幣的地址。如果要將某些硬幣發(fā)回?zé)徇吇蛞云渌绞绞褂镁郝部梢砸来紊伤借€先紫。

這是它的工作原理〕镏螅回想一下遮精,ECDSA私鑰通常是隨機(jī)數(shù)x,相應(yīng)的公鑰是寺谤。對(duì)于分層密鑰生成仑鸥,我們需要另外兩個(gè)隨機(jī)值k和y

這具有我們想要的所有屬性:每一方都可以生成其密鑰序列,并且與相應(yīng)的密鑰匹配变屁,因?yàn)椋ㄒ驗(yàn)閷?duì)應(yīng)于私有密鑰x的公鑰是)它還有一個(gè)我們沒(méi)有談到的財(cái)產(chǎn):當(dāng)你發(fā)出公鑰時(shí)眼俊,這些鑰匙將不能相互鏈接,也就是說(shuō)粟关,不可能推斷他們來(lái)自同一個(gè)錢(qián)包疮胖。具有冷端的稻草人解決方案產(chǎn)生大批地址確實(shí)具有這種性質(zhì),但是當(dāng)考慮到鑰匙實(shí)際上不是獨(dú)立生成時(shí)闷板,我們必須對(duì)它保留注意澎灸。這個(gè)屬性對(duì)隱私和匿名很重要,這將是第6章的主題遮晚。

在這里我們有兩個(gè)層次的安全性性昭,熱端處于較低的級(jí)別。如果熱端受到威脅县遣,我們剛剛討論的無(wú)連結(jié)性屬性將會(huì)丟失糜颠,但私鑰(和比特幣)仍然是安全的。一般來(lái)說(shuō)萧求,這個(gè)方案支持任意多的安全級(jí)別——因此“分級(jí)”——盡管我們還沒(méi)有看到細(xì)節(jié)其兴。例如,當(dāng)公司內(nèi)部有多個(gè)級(jí)別的授權(quán)時(shí)夸政,這一點(diǎn)是有用的元旬。

現(xiàn)在我們來(lái)討論一下冷信息的不同方式——是否可以存儲(chǔ)一個(gè)或多個(gè)密鑰或密鑰生成信息。第一種方法是把它放在某種設(shè)備里守问,然后把它放在保險(xiǎn)箱里匀归。它可能是一臺(tái)筆記本電腦,一部移動(dòng)電話(huà)或平板電腦酪碘,或一個(gè)拇指驅(qū)動(dòng)器朋譬。重要的是把設(shè)備關(guān)上并鎖上,這樣如果有人想偷它兴垦,他們就得破門(mén)而入徙赢。

腦錢(qián)包。我們可以使用的另一種方法是所謂的腦錢(qián)包探越。這是一種只需使用一個(gè)秘密口令來(lái)控制訪(fǎng)問(wèn)比特幣的方式狡赐。這避免了硬盤(pán)驅(qū)動(dòng)器、紙張或其他任何長(zhǎng)期存儲(chǔ)機(jī)制的需要钦幔。在你的身體安全性差的情況下枕屉,或許當(dāng)你在國(guó)際旅行時(shí),這個(gè)屬性可能特別有用鲤氢。

大腦錢(qián)包背后的關(guān)鍵在于有一個(gè)可預(yù)測(cè)的算法將密碼轉(zhuǎn)化為一個(gè)公鑰和私鑰搀擂。例如西潘,你可以使用合適的哈希函數(shù)對(duì)密碼進(jìn)行哈希以導(dǎo)出私鑰,并給出了私鑰哨颂,公鑰可以以一個(gè)標(biāo)準(zhǔn)的方式導(dǎo)出喷市。此外,與之前我們看到的分層錢(qián)包技術(shù)相結(jié)合威恼,我們可以從密碼短語(yǔ)中生成一整套序列的地址和私鑰品姓,從而實(shí)現(xiàn)完整的錢(qián)包。

然而箫措,如果攻擊者可以猜到密碼短語(yǔ)腹备,他也可以獲取腦錢(qián)包中的所有私鑰。與計(jì)算機(jī)安全一樣斤蔓,我們必須假設(shè)對(duì)手知道您用于生成密鑰的過(guò)程植酥,且只有你的密碼提供安全性。所以對(duì)手可以嘗試各種口令附迷,并使用它們生成地址;如果他在任何這些地址發(fā)現(xiàn)區(qū)塊鏈上的任何未使用的交易惧互,他可以立即將其轉(zhuǎn)移給自己。對(duì)手可能永遠(yuǎn)不知道(或關(guān)心)那些硬幣屬于誰(shuí)喇伯,攻擊不需要闖入任何機(jī)器喊儡。猜腦錢(qián)包密碼短語(yǔ)并非針對(duì)特定的用戶(hù),而且不留痕跡稻据。

側(cè)邊欄:產(chǎn)生令人難忘的密碼短語(yǔ)艾猜。提供大約80位熵的一個(gè)密碼短語(yǔ)生成程序是從10000個(gè)最常用的英語(yǔ)單詞中選擇6個(gè)單詞的隨機(jī)序列(大約為80).許多人發(fā)現(xiàn)這些比隨機(jī)字符串更容易記住。這是一對(duì)密碼短語(yǔ)生成的方式捻悯。

此外匆赃,與猜測(cè)您的電子郵件密碼(可以通過(guò)電子郵件服務(wù)器限定)的任務(wù)不同,攻擊者可以使用大腦錢(qián)包下載具有未兌換硬幣的地址列表今缚,嘗試盡可能多的潛在密碼算柳,因?yàn)樗麄冇杏?jì)算能力檢查。請(qǐng)注意姓言,攻擊者不需要知道哪些地址對(duì)應(yīng)于大腦錢(qián)包瞬项。這被稱(chēng)為離線(xiàn)猜測(cè)或密碼破解。提出易于記憶的密碼短語(yǔ)何荚,而且不會(huì)容易以這種方式猜測(cè)是更具挑戰(zhàn)性的囱淋。生成密碼短語(yǔ)的一種安全方法是具有一個(gè)自動(dòng)的過(guò)程,用于挑選隨機(jī)的80位數(shù)字餐塘,并將該數(shù)字轉(zhuǎn)換成密碼短語(yǔ)妥衣,使得不同的數(shù)字導(dǎo)致不同的密碼。

在實(shí)踐中,使用故意緩慢的功能從密碼短語(yǔ)中導(dǎo)出私鑰也是明智的税手,以確保攻擊者嘗試所有可能性需要盡可能長(zhǎng)的時(shí)間蜂筹。這被稱(chēng)為關(guān)鍵拉伸。為了創(chuàng)建一個(gè)故意緩慢的密碼推導(dǎo)函數(shù)芦倒,我們可以采用像SHA-256這樣的快速加密散列函數(shù)狂票,并計(jì)算它的次迭代,將攻擊者的工作負(fù)載乘以熙暴。當(dāng)然,如果我們把它弄得太慢的話(huà)慌盯,它會(huì)開(kāi)始讓用戶(hù)感到討厭周霉,因?yàn)樗麄兊脑O(shè)備只要想從大腦錢(qián)包里拿出硬幣,就必須重新計(jì)算這個(gè)功能亚皂。

如果一個(gè)大腦錢(qián)包密碼無(wú)法訪(fǎng)問(wèn)——說(shuō)已經(jīng)被遺忘了俱箱,沒(méi)有被寫(xiě)下來(lái),不能被猜到——那么硬幣就永遠(yuǎn)丟失了灭必。

紙錢(qián)包狞谱。第三個(gè)選項(xiàng)是所謂的紙錢(qián)包。我們可以將關(guān)鍵材料打印成紙禁漓,然后將該紙放入安全或可靠的位置跟衅。顯然,這種方法的安全性與我們正在使用的紙的物理安全性一樣好或壞播歼。典型的紙質(zhì)錢(qián)包通過(guò)兩種方式對(duì)公鑰和私鑰進(jìn)行編碼:作為二維條形碼伶跷,并以基礎(chǔ)58符號(hào)表示。 就像一個(gè)大腦的錢(qián)包一樣秘狞,存儲(chǔ)少量的關(guān)鍵材料足以重新創(chuàng)建一個(gè)錢(qián)包叭莫。

圖4.3:一個(gè)帶有公鑰的比特幣紙錢(qián)包編碼為二維條碼和基本58標(biāo)記。請(qǐng)注意烁试,私人密鑰在一個(gè)防篡改密封之后雇初。

防篡改裝置。我們可以存儲(chǔ)離線(xiàn)信息的第四種方法是將其放在某種防篡改設(shè)備中减响。要么我們把鑰匙放進(jìn)設(shè)備靖诗,要么設(shè)備生成鑰匙;無(wú)論如何辩蛋,設(shè)備的設(shè)計(jì)使其無(wú)法輸出或泄露密鑰呻畸。這個(gè)設(shè)備代替了用密碼來(lái)表示符號(hào)語(yǔ)句,當(dāng)我們按下按鈕或給它某種密碼時(shí)悼院,它就這樣做了伤为。一個(gè)優(yōu)點(diǎn)是,如果設(shè)備丟失或被盜,我們將知道绞愚,密碼唯一可能被盜的是如果設(shè)備被盜叙甸。這不同于在筆記本電腦上存儲(chǔ)你的鑰匙。

一般來(lái)說(shuō)位衩,人們可能會(huì)使用這四種方法的組合來(lái)保護(hù)他們的鑰匙裆蒸。對(duì)于熱存儲(chǔ),特別是用于儲(chǔ)存大量比特幣的熱存儲(chǔ)糖驴,人們?cè)敢馀ぷ髁诺唬岢鲂碌陌踩桨敢员Wo(hù)它們,我們?cè)谙乱还?jié)將談?wù)勔恍└冗M(jìn)的方案贮缕。

4.3拆分和共享密鑰

到目前為止辙谜,我們已經(jīng)研究了存儲(chǔ)和管理控制比特幣密鑰的不同方法,但我們總是把密鑰放在一個(gè)地方——無(wú)論是鎖定在安全中感昼,還是在軟件中装哆,或者在紙上。這讓我們失去了一個(gè)點(diǎn)定嗓。如果單個(gè)存儲(chǔ)空間出現(xiàn)問(wèn)題蜕琴,那么我們就會(huì)遇到麻煩。我們可以創(chuàng)建和存儲(chǔ)關(guān)鍵材料的備份宵溅,但這會(huì)降低密鑰丟失或損壞(可用性)的風(fēng)險(xiǎn)凌简,從而增加了盜用(安全性)的風(fēng)險(xiǎn)。這種權(quán)衡似乎是根本的恃逻。我們是否可以獲取一個(gè)數(shù)據(jù)号醉,并存儲(chǔ)在可用性和安全性同時(shí)增加的方式嗎?值得注意的是辛块,答案是肯定的畔派,這又是一個(gè)使用加密技術(shù)的技巧,稱(chēng)為秘密共享润绵。

這里的想法:我們要將我們的密鑰劃分成N個(gè)片段线椰。我們想要這樣做,如果我們被給予任何K的這些片段尘盼,那么我們將能夠重建原始的秘密憨愉,但是如果我們被給予少于K個(gè)片段,那么我們將無(wú)法了解原始秘密的任何內(nèi)容卿捎。

鑒于這個(gè)嚴(yán)格的要求配紫,簡(jiǎn)單地將秘密“切割”成碎片不會(huì)起作用,因?yàn)榧词故菃纹€提供了一些關(guān)于秘密的信息午阵。我們需要一些更聰明的東西躺孝。而且享扔,由于我們沒(méi)有削減秘密,所以我們會(huì)將各個(gè)組件稱(chēng)為“份額”而不是片段植袍。

假設(shè)我們有N = 2和K = 2惧眠。這意味著我們根據(jù)秘密生成2個(gè)份額,我們需要這兩個(gè)份額才能重建這個(gè)秘密于个。我們叫我們的秘密S氛魁,這只是一個(gè)大(128位)的數(shù)字。我們可以生成一個(gè)128位隨機(jī)數(shù)R厅篓,使兩個(gè)共享為R和S⊕R秀存。(⊕代表按位XOR)。本質(zhì)上羽氮,我們用一次性“加密”S应又,并將密鑰(R)和密文(S⊕R)存儲(chǔ)在不同的地方。密鑰和密文本身都不會(huì)告訴我們關(guān)于秘密的任何內(nèi)容乏苦。但是鑒于這兩個(gè)份額,我們只是將它們組合在一起來(lái)重建這個(gè)秘密尤筐。

只要n和k是相同的汇荐,這個(gè)技巧就可以工作了——我們只需要為第一批N-1股份生成N-1個(gè)不同的隨機(jī)數(shù),最后的份額將是所有其他n-1個(gè)份額共享的秘密XOR盆繁。但是如果N大于K掀淘,那么這不再起作用了,我們需要一些代數(shù)油昂。

圖4.4:2-out-of-N秘密共享的幾何圖示革娄。S表示秘密,編碼為(大的)整數(shù)冕碟。綠線(xiàn)具有隨機(jī)選擇的斜率拦惋。橙色點(diǎn)(具體來(lái)說(shuō),它們的Y坐標(biāo)S + R安寺,S + 2R厕妖,...)對(duì)應(yīng)于份額。任何兩個(gè)橙色點(diǎn)都足以重建紅色點(diǎn)挑庶,因此也就是秘密言秸。所有算術(shù)都以大質(zhì)數(shù)模數(shù)完成。

看看圖4.4迎捺。 我們?cè)谶@里做的是首先在Y軸上生成點(diǎn)(0举畸,S),然后在該點(diǎn)上繪制一條隨機(jī)斜率的線(xiàn)凳枝。接下來(lái)抄沮,我們?cè)谶@條線(xiàn)上生成一堆點(diǎn),想要多少生成多少。事實(shí)證明合是,這是S的秘密共享了罪,N是我們生成的點(diǎn)數(shù),K =2聪全。

為什么這樣工作泊藕?首先,如果你給出了兩個(gè)生成點(diǎn)难礼,你可以通過(guò)它們畫(huà)一條線(xiàn)娃圆,看看它在哪里與Y軸相遇。那會(huì)給你S.另一方面蛾茉,如果你只給了一個(gè)點(diǎn)讼呢,它不會(huì)告訴你S,因?yàn)榫€(xiàn)的斜率是隨機(jī)的谦炬。每條通過(guò)你的點(diǎn)的線(xiàn)都是同樣可能的悦屏,他們都將與Y軸在不同的點(diǎn)相交。

還有一個(gè)微妙之處:為了使數(shù)學(xué)運(yùn)算出來(lái)键思,我們必須用一個(gè)大素?cái)?shù)P來(lái)完成所有算術(shù)運(yùn)算础爬。它不需要是秘密或任何東西,只要是真的很大吼鳞。秘密S必須在0和P-1之間看蚜,包括0和P-1。所以當(dāng)我們說(shuō)我們?cè)诰€(xiàn)上生成點(diǎn)時(shí)赔桌,我們的意思是我們生成一個(gè)隨機(jī)值R供炎,也在0和P-1之間,我們生成的點(diǎn)是

x = 1疾党,y =(S + R)mod P

x = 2音诫,y =(S + 2R)mod P

x = 3,y =(S + 3R)mod P

等等雪位。秘密對(duì)應(yīng)于x = 0纽竣,y =(S + 0 * R)mod P,即x = 0茧泪,y = S蜓氨。

我們看到的是一種使用K = 2和任何值N進(jìn)行秘密共享的方式。這已經(jīng)相當(dāng)不錯(cuò)了——如果N = 4队伟,你可以將你的密鑰分成4個(gè)分組穴吹,并將它們放在4個(gè)不同的設(shè)備上,以便如果有人竊取了這些設(shè)備中的任何一個(gè)嗜侮,那么他們也不會(huì)知道你密鑰的任何信息港令。另一方面,即使這兩個(gè)設(shè)備在火災(zāi)中被破壞顷霹,你也可以使用其他兩個(gè)設(shè)備來(lái)重建密鑰咪惠。所以作為承諾,我們?cè)黾恿丝捎眯院桶踩浴?/p>

但是我們可以做得更好:只要K不超過(guò)N淋淀,我們就可以與任何N和K進(jìn)行秘密共享。為了看如何構(gòu)建的朵纷,我們回去看圖炭臭。我們使用一條線(xiàn)而不是其他形狀的原因是,代數(shù)上說(shuō)袍辞,一條線(xiàn)是1的多項(xiàng)式鞋仍。這意味著要重建一條線(xiàn),我們需要兩點(diǎn)搅吁,不要少于兩個(gè)威创。 如果我們想要K = 3,我們將使用一個(gè)拋物線(xiàn)谎懦,它是一個(gè)二次多項(xiàng)式肚豺,或者是二階多項(xiàng)式。需要三點(diǎn)來(lái)構(gòu)造一個(gè)二次函數(shù)党瓮。我們可以使用下表了解發(fā)生了什么。

表4.1:秘密分享背后的數(shù)學(xué)盐类。通過(guò)K-1級(jí)隨機(jī)多項(xiàng)式曲線(xiàn)上的一系列點(diǎn)來(lái)表示秘密寞奸,只有至少K個(gè)點(diǎn)(“份額”)可用時(shí)才能重建秘密。

有一個(gè)叫做拉格朗日插值的公式在跳,它允許你從曲線(xiàn)上的任何K點(diǎn)重構(gòu)一個(gè)K-1度的多項(xiàng)式枪萄。這是一個(gè)用直尺通過(guò)兩個(gè)點(diǎn)繪制直線(xiàn)的幾何直觀的代數(shù)版本(概括)。作為所有這一切的結(jié)果猫妙,我們有一種方法來(lái)存儲(chǔ)任何秘密作為N股瓷翻,使我們是安全的,即使對(duì)手了解到他們的K-1割坠,同時(shí)我們可以承受高達(dá)n-k的損失它們齐帚。

沒(méi)有一個(gè)是特定為比特幣設(shè)計(jì)的,順便說(shuō)一句彼哼。你現(xiàn)在可以秘密分享您的密碼对妄,并將其分享給你的朋友或?qū)⑵浞旁诓煌脑O(shè)備上。但是沒(méi)有人真的用密碼這樣的秘密去做到這一點(diǎn)敢朱。方便是一個(gè)原因;另一個(gè)原因是有其他安全機(jī)制可用于重要的在線(xiàn)帳戶(hù)剪菱,例如使用SMS雙重因素安全性的驗(yàn)證摩瞎。但是使用Bitcoin,如果你在本地存儲(chǔ)你的密鑰孝常,那么你沒(méi)有其他安全選項(xiàng)旗们。沒(méi)有辦法根據(jù)收到的短信來(lái)控制比特幣地址。 在線(xiàn)錢(qián)包的情況是不同的构灸,下一節(jié)我們來(lái)看看上渴。但是沒(méi)有太不同——它只是將問(wèn)題轉(zhuǎn)移到不同的地方。畢竟冻押,在線(xiàn)錢(qián)包提供商將需要一些方法來(lái)避免在存儲(chǔ)密鑰時(shí)出現(xiàn)單點(diǎn)故障驰贷。

閾值加密。但是洛巢,秘密共享還是有一個(gè)問(wèn)題:如果我們有一個(gè)鑰匙括袒,我們以這種方式分裂,然后我們想回去使用鑰匙來(lái)簽署一些東西稿茉,我們?nèi)匀恍枰堰@些份額放在一起锹锰,并重新計(jì)算初始秘密,以便能夠簽署密鑰漓库。我們將所有份額合并在一起的點(diǎn)仍然是一個(gè)單一的脆弱點(diǎn)恃慧,對(duì)手可能會(huì)竊取鑰匙。

密碼學(xué)也可以解決這個(gè)問(wèn)題:如果共享存儲(chǔ)在不同的設(shè)備中渺蒿,有一種以分散方式生成比特幣簽名的方法痢士,而不用在任何單個(gè)設(shè)備上重建私有密鑰。這被稱(chēng)為“閾值簽名”茂装。最佳用例是具有雙重因素安全性的錢(qián)包怠蹂,對(duì)應(yīng)于N = 2和K = 2的情況。假設(shè)你已經(jīng)配置了你的錢(qián)包少态,以在桌面和手機(jī)之間分割其密鑰資料城侧。然后,你可以在桌面上啟動(dòng)付款彼妻,這將創(chuàng)建一個(gè)部分簽名并將其發(fā)送到你的手機(jī)嫌佑。然后你的手機(jī)將通過(guò)付款明細(xì)(收件人,金額等)提醒您侨歉,并要求你確認(rèn)屋摇。如果詳細(xì)信息檢查后,你將確認(rèn)幽邓,你的手機(jī)將使用其私鑰的共享完成簽名摊册,并將交易廣播到區(qū)塊鏈。如果桌面上有惡意軟件竊取你的比特幣颊艳,那么可能會(huì)發(fā)起一筆將資金發(fā)送給黑客的地址的交易茅特,但是你會(huì)在手機(jī)上收到你未授權(quán)交易的警報(bào)忘分,然后你就知道有什么事發(fā)生了。閾值簽名背后的數(shù)學(xué)細(xì)節(jié)非常復(fù)雜白修,我們不會(huì)在這里討論妒峦。

多簽名。 有一個(gè)完全不同的選擇兵睛,以避免單點(diǎn)故障:多簽名肯骇,我們之前在第3章中看到過(guò)。Bitcoin腳本直接允許你規(guī)定對(duì)地址的控制在不同的密鑰之間進(jìn)行分割祖很,而不是使用單個(gè)密鑰并將其拆分笛丙。這些密鑰可以存儲(chǔ)在不同的位置,并且簽名單獨(dú)生成假颇。當(dāng)然胚鸯,完成的簽名交易將在某些設(shè)備上構(gòu)建,但是即使對(duì)手控制這個(gè)設(shè)備笨鸡,他所能做的一切就是防止它被廣播到網(wǎng)絡(luò)姜钳。他不能在沒(méi)有其他設(shè)備參與的情況下產(chǎn)生一些其他交易的有效多簽名。

例如形耗,假設(shè)這本書(shū)的作者安德魯哥桥,Arvind,埃德激涤,約瑟夫和史蒂文都是一家公司的聯(lián)合創(chuàng)始人——也許我們從銷(xiāo)售這本免費(fèi)書(shū)中收到豐富的特許權(quán)使用費(fèi)——并且公司會(huì)有很多比特幣拟糕。我們可能會(huì)使用多重保護(hù)來(lái)保護(hù)我們大量的比特幣。我們中的每一個(gè)都會(huì)產(chǎn)生一個(gè)密鑰對(duì)倦踢,我們將使用3/5的多重信號(hào)來(lái)保護(hù)我們的冷庫(kù)送滞,這意味著我們中的三個(gè)必須簽署才能創(chuàng)建有效的交易。

因此硼一,我們知道累澡,如果我們五個(gè)人分別保管鑰匙梦抢,并保證鑰匙安全般贼,我們就相對(duì)安全了。對(duì)手將不得不妥協(xié)五個(gè)密鑰中的三個(gè)奥吩。如果我們中有一個(gè)甚至兩個(gè)人流氓哼蛆,那么他們不能竊取公司的硬幣,因?yàn)橹辽傩枰齻€(gè)鑰匙去做霞赫。同時(shí)腮介,如果我們中的一個(gè)人丟了鑰匙或者被公共汽車(chē)輾過(guò),我們的大腦錢(qián)包丟失了端衰,其他人仍然可以把硬幣拿回來(lái)叠洗,然后把它們轉(zhuǎn)移到一個(gè)新的地址甘改,重新保管鑰匙。換句話(huà)說(shuō)灭抑,多重SIG可以幫助你以相對(duì)安全的方式管理大量的冷儲(chǔ)硬幣十艾,并且在發(fā)生任何劇烈的事情之前需要多人操作。

側(cè)邊欄:閾值簽名時(shí)采用單個(gè)密鑰的密碼技術(shù)腾节,將其分開(kāi)共享忘嫉,分別存儲(chǔ),并且在不重建密鑰的情況下簽署交易案腺。多簽名是比特幣腳本的一個(gè)特性庆冕,通過(guò)它你可以指定地址的控制在多個(gè)獨(dú)立鑰匙之間分割。雖然它們之間有一些差異劈榨,但它們通過(guò)避免單點(diǎn)故障來(lái)增加安全性访递。

在我們上面的陳述中,我們通過(guò)解釋如何幫助實(shí)現(xiàn)雙因素(或多因素)安全性鞋既,以及通過(guò)解釋如何幫助一組個(gè)人共同控制共同持有的資金來(lái)促進(jìn)閾值簽名力九。但任何一種技術(shù)都適用于任何一種情況。

4.4在線(xiàn)錢(qián)包和交易所

到目前為止,我們已經(jīng)討論了如何存儲(chǔ)和管理你的比特幣本身。現(xiàn)在我們將討論如何使用其他人的服務(wù)來(lái)幫助你蒸苇。你可以做的第一件事是使用在線(xiàn)錢(qián)包甜癞。

在線(xiàn)錢(qián)包。一個(gè)在線(xiàn)錢(qián)包就像你可能自己管理的本地錢(qián)包徐鹤,除了信息存儲(chǔ)在云中,你可以使用計(jì)算機(jī)上的Web界面或使用智能手機(jī)上的應(yīng)用程序來(lái)訪(fǎng)問(wèn)它。一些在2015年初受歡迎的在線(xiàn)錢(qián)包服務(wù)是Coinbase和blockchain.info灾炭。

從安全性的角度來(lái)看,關(guān)鍵的是站點(diǎn)提供了在瀏覽器或應(yīng)用程序上運(yùn)行的代碼颅眶,并且還存儲(chǔ)你的密鑰蜈出。至少它將具有訪(fǎng)問(wèn)你的密鑰的能力。理想情況下涛酗,這個(gè)網(wǎng)站將按照你所知道的密碼對(duì)這些密鑰進(jìn)行加密铡原,但是你當(dāng)然必須相信他們這樣做。你必須相信他們的代碼不泄漏你的密鑰或密碼商叹。

一個(gè)在線(xiàn)錢(qián)包有一定的權(quán)衡來(lái)做自己的事情燕刻。一個(gè)很大的優(yōu)點(diǎn)是它很方便。你無(wú)需在計(jì)算機(jī)上安裝任何東西剖笙,就能夠在瀏覽器中使用在線(xiàn)錢(qián)包卵洗。在你的手機(jī)上,你可能只需安裝一次應(yīng)用程序弥咪,不需要下載程序鏈过蹂。它可以在多個(gè)設(shè)備上工作——你可以在桌面和手機(jī)上安裝一個(gè)單一的錢(qián)包十绑,只需真正的錢(qián)包就能在云端工作。

另一方面酷勺,存在安全隱患孽惰。如果網(wǎng)站或經(jīng)營(yíng)該網(wǎng)站的人員變得惡意,或者以某種方式受到影響鸥印,你的比特幣就會(huì)遇到麻煩勋功。該網(wǎng)站提供的代碼,其骯臟的手指在你的比特幣上库说,如果在服務(wù)提供商有妥協(xié)或惡意的事情可能會(huì)更糟糕狂鞋。

理想情況下,網(wǎng)站或服務(wù)由安全專(zhuān)業(yè)人員管理潜的,他們?cè)诰S護(hù)安全方面受過(guò)較好的培訓(xùn)骚揍,或者比你更勤奮。所以你可能希望他們做得更好啰挪,你的硬幣實(shí)際上比你自己儲(chǔ)存的錢(qián)更安全信不。但是最后,你必須相信他們亡呵,你必須依靠他們不被妥協(xié)抽活。

比特幣交易。要了解比特幣交易所锰什,首先談?wù)勩y行和銀行業(yè)務(wù)如何在傳統(tǒng)經(jīng)濟(jì)中運(yùn)作下硕。你給銀行一些錢(qián)——一個(gè)存款——銀行承諾稍后還錢(qián)。當(dāng)然汁胆,最重要的是梭姓,銀行實(shí)際上并不是拿你的錢(qián),把它放在后面的房間里嫩码。所有的銀行都承諾誉尖,如果你出錢(qián),他們會(huì)給回來(lái)铸题。銀行通常會(huì)把錢(qián)放在別的地方铡恕,也就是投資。銀行可能會(huì)在儲(chǔ)備金中保留一些錢(qián)回挽,以確保他們能夠在典型的一天或甚至是不尋常的一天支付他們將面臨的提款需求没咙。許多銀行通常使用一種稱(chēng)為“儲(chǔ)備”的東西猩谊,在這些儲(chǔ)備中保留所有活期存款的一小部分千劈,以防萬(wàn)一。

現(xiàn)在牌捷,比特幣交換業(yè)務(wù)至少?gòu)挠脩?hù)界面的角度來(lái)看墙牌,以類(lèi)似于銀行的方式運(yùn)作涡驮。他們接受了比特幣的存款,就像一家銀行一樣喜滨,承諾稍后再按要求給他們捉捅。你還可以通過(guò)從你的銀行帳戶(hù)轉(zhuǎn)賬,將法定貨幣——傳統(tǒng)貨幣(如美元和歐元)轉(zhuǎn)入交易所虽风。交易所承諾將按要求償還任一種或兩種貨幣棒口。交易所可以讓你做各種類(lèi)似銀行業(yè)的事情。你可以賺取和收到比特幣付款辜膝。也就是說(shuō)无牵,你可以指示交易所向某一方支付一些比特幣,或者你可以要求其他人代你將資金存入特定交易所——放入你的賬戶(hù)中厂抖。他們還讓你交換比特幣為法定貨幣茎毁,反之亦然。通常忱辅,他們通過(guò)尋找一些想用美元購(gòu)買(mǎi)比特幣的客戶(hù)和一些想把比特幣作為美元出售的客戶(hù)來(lái)實(shí)現(xiàn)這一點(diǎn)七蜘。換句話(huà)說(shuō),他們?cè)噲D找到愿意在交易中采取相反立場(chǎng)的顧客墙懂。如果雙方都能接受的價(jià)格橡卤,他們將完成交易。

假設(shè)我在一些交易所的賬戶(hù)持有5000美元和三個(gè)比特幣损搬,我使用交易所蒜魄,我下令購(gòu)買(mǎi)2個(gè)比特幣,每個(gè)580美元场躯,交易所找到一個(gè)愿意接受交易的人谈为, 交易發(fā)生。現(xiàn)在我的帳戶(hù)中有五個(gè)比特幣踢关,而不是三個(gè)伞鲫,有3840美元,而不是5000签舞。

這里要注意的一個(gè)重要事情是秕脓,當(dāng)這筆交易發(fā)生在涉及我和另一個(gè)客戶(hù)的同一交易中時(shí),比特幣區(qū)塊鏈中沒(méi)有實(shí)際發(fā)生任何交易儒搭。交易所不需要去區(qū)塊鏈吠架,以便將比特幣或美元從一個(gè)賬戶(hù)轉(zhuǎn)移到另一個(gè)賬戶(hù)。在這筆交易中發(fā)生的一切是搂鲫,交易所現(xiàn)在對(duì)我的承諾不同于以前的承諾傍药。他們以前說(shuō),“我們會(huì)給你5000美元和3 BTC”,現(xiàn)在他們說(shuō)“我們會(huì)給你3840美元和5 BTC”拐辽。這只是他們承諾的變化——沒(méi)有通過(guò)美元經(jīng)濟(jì)或通過(guò)塊鏈發(fā)生實(shí)際的貨幣流動(dòng)拣挪。當(dāng)然,他們對(duì)另一個(gè)人的承諾也是以相反的方式改變的俱诸。

使用交流有利有弊菠劝。最大的優(yōu)點(diǎn)之一是交易所有助于將比特幣經(jīng)濟(jì)和比特幣與貨幣經(jīng)濟(jì)聯(lián)系起來(lái),以便輕松地傳遞價(jià)值睁搭。 如果我的帳戶(hù)中有美元和比特幣赶诊,我可以很容易地在他們之間來(lái)回交易,這真的很有幫助园骆。

壞處就是風(fēng)險(xiǎn)甫何。你面臨著和銀行一樣的風(fēng)險(xiǎn),風(fēng)險(xiǎn)分為三類(lèi)遇伞。

三種風(fēng)險(xiǎn)辙喂。第一個(gè)風(fēng)險(xiǎn)是銀行的風(fēng)險(xiǎn)。當(dāng)一群人一次出現(xiàn)并想要他們的錢(qián)時(shí)鸠珠,會(huì)發(fā)生什么事情巍耗。由于銀行只有部分儲(chǔ)備,可能無(wú)法應(yīng)對(duì)同時(shí)提款渐排。 危險(xiǎn)是一種恐慌的行為炬太,一旦謠言開(kāi)始繞開(kāi),一個(gè)銀行或交易所可能會(huì)遇到麻煩驯耻,他們可能會(huì)越來(lái)越接近不履行提款亲族,然后人們踩踏,試圖在人群之前提取錢(qián)可缚,你會(huì)經(jīng)歷一場(chǎng)雪崩霎迫。

第二個(gè)風(fēng)險(xiǎn)是,銀行的所有者可能會(huì)運(yùn)行一個(gè)龐氏騙局帘靡。這是一個(gè)方案知给,有人讓人們給他們錢(qián),以換取未來(lái)的利潤(rùn)描姚,但實(shí)際上是把錢(qián)用于支付給以前購(gòu)買(mǎi)的人的利潤(rùn)涩赢。 這樣的計(jì)劃注定要最終失敗,失去了很多人的很多錢(qián)轩勘。 在最近的記憶中筒扒,伯尼·麥道夫(Bernie Madoff)最為著名。

第三個(gè)風(fēng)險(xiǎn)是黑客的風(fēng)險(xiǎn)绊寻,甚至是交易所的一個(gè)雇員花墩,也會(huì)設(shè)法滲透交易所的安全悬秉。由于交易所存儲(chǔ)了控制大量比特幣的關(guān)鍵信息,所以他們需要對(duì)軟件安全及其程序非常謹(jǐn)慎——如何管理他們的冷观游、熱存儲(chǔ)以及所有這些。如果出現(xiàn)問(wèn)題驮俗,你的錢(qián)可能會(huì)從交易所被盜懂缕。

所有這些事情都發(fā)生過(guò)。我們看到了由于銀行擠兌而倒閉的交易所王凑。我們看到交易所的失敗是因?yàn)榻灰姿倪\(yùn)營(yíng)商是騙子搪柑,我們也看到了由于破產(chǎn)而倒閉的交易所。事實(shí)上索烹,統(tǒng)計(jì)數(shù)據(jù)并不鼓舞人心工碾。2013的一項(xiàng)研究發(fā)現(xiàn),40家比特幣交易所中有18家因某些交易失敗或部分無(wú)力支付交易所承諾支付的資金而關(guān)閉百姓。

最著名的例子是Mt. Gox渊额。Gox一度是最大的比特幣交易所,它最終發(fā)現(xiàn)自己無(wú)力償債垒拢,無(wú)力償還所欠的款項(xiàng)旬迹。Gox是一家日本公司,最終宣告破產(chǎn)求类,留下許多人懷疑他們的錢(qián)去了哪里”伎眩現(xiàn)在,在日本和美國(guó)法院尸疆,Gox的破產(chǎn)是混亂的椿猎,要過(guò)一段時(shí)間我們才能確切知道錢(qián)到哪里去了。我們知道的一件事是寿弱,有很多它犯眠,而Gox不再擁有它了。所以症革,這是一個(gè)關(guān)于使用交易所的警示故事阔逼。

回過(guò)來(lái)考慮到銀行,我們看不到大多數(shù)發(fā)達(dá)國(guó)家銀行的失敗率為45%地沮,部分是由于監(jiān)管嗜浮。各國(guó)政府以各種方式管制著傳統(tǒng)銀行。

銀行監(jiān)管摩疑。政府首先要做的是經(jīng)常強(qiáng)加最低儲(chǔ)備金要求危融。在美國(guó),銀行需要以流動(dòng)形式存在的活期存款的比例通常為3-10%雷袋,如果發(fā)生這種情況吉殃,他們可以處理大量的提款辞居。二是政府往往規(guī)范銀行可以使用的投資類(lèi)型和資金管理方式。目標(biāo)是確保銀行的資產(chǎn)投資于相對(duì)較低風(fēng)險(xiǎn)的地方蛋勺,因?yàn)檫@些資產(chǎn)是存款人在某種意義上的資產(chǎn)瓦灶。

現(xiàn)在,為了換取這些形式的監(jiān)管抱完,政府通常會(huì)做一些事情來(lái)幫助銀行或幫助他們的存款人贼陶。一是政府出臺(tái)存款保險(xiǎn)。也就是說(shuō)巧娱,政府承諾存款人碉怔,如果遵守這些規(guī)定的銀行,政府將至少確保部分存款的安全禁添。政府有時(shí)也會(huì)作為“最后貸款人”撮胧。如果一家銀行陷入困境,但基本上是有償還能力的老翘,政府可能會(huì)介入并向銀行貸款以渡過(guò)危機(jī)芹啥,直到它能夠在必要時(shí)轉(zhuǎn)移資金以擺脫困境。

傳統(tǒng)銀行是這樣管制的铺峭,但比特幣交易所沒(méi)有叁征。Bitcoin交易所或其他Bitcoin業(yè)務(wù)是否應(yīng)該受到監(jiān)管的問(wèn)題是我們將在第七章中回顧的一個(gè)主題。

準(zhǔn)備金證明逛薇。比特幣交換所或持有比特幣的其他人可以使用一種稱(chēng)為“儲(chǔ)備證明”的加密伎倆捺疼,讓客戶(hù)對(duì)他們存入的錢(qián)感到放心。目標(biāo)是讓交易所或商業(yè)持有比特幣的來(lái)證明它有部分儲(chǔ)備——他們可以控制大概25%甚至是100%的存款永罚。

我們可以將準(zhǔn)備金證明問(wèn)題分解成兩部分啤呼。第一個(gè)是證明你持有多少儲(chǔ)備——這是比較容易的部分。該公司只需簡(jiǎn)單地發(fā)布有效的付款自交易的索賠準(zhǔn)備金數(shù)額呢袱。也就是說(shuō)官扣,如果他們聲稱(chēng)擁有10萬(wàn)個(gè)比特幣,那么他們創(chuàng)建一個(gè)交易羞福,在這個(gè)交易中惕蹄,他們向自己支付100,000個(gè)比特幣,并顯示該交易有效治专。然后卖陵,他們簽署一個(gè)挑戰(zhàn)字符串——由一些公正方生成的隨機(jī)字符串——與用于簽署自付交易的私鑰相同。這證明知道私鑰的人參與了儲(chǔ)備證明张峰。

我們應(yīng)該注意兩點(diǎn)警告泪蔫。嚴(yán)格地說(shuō),這并不是說(shuō)聲稱(chēng)擁有儲(chǔ)備金的一方擁有一個(gè)證據(jù)喘批,而只是說(shuō)擁有這10萬(wàn)個(gè)比特幣的人愿意在這個(gè)過(guò)程中進(jìn)行合作撩荣。盡管如此铣揉,這看起來(lái)像是一個(gè)證明,有人控制或知道誰(shuí)控制了一定數(shù)量的錢(qián)餐曹。此外逛拱,請(qǐng)注意,您可以隨時(shí)索賠:該組織可能擁有15萬(wàn)個(gè)比特幣台猴,但選擇僅支付10萬(wàn)美元的自付款朽合。 所以這種儲(chǔ)備證明并不能證明這是你的全部,但它證明你至少有這么多卿吐。

負(fù)債證明旁舰。第二件是證明你持有多少活期存款锋华,這是很難的嗡官。如果你可以證明你的儲(chǔ)備金和你的定期存款,那么任何人都可以簡(jiǎn)單地將這兩個(gè)數(shù)字分開(kāi)毯焕,這就是你的部分儲(chǔ)備金衍腥。我們會(huì)提出一個(gè)計(jì)劃,允許你過(guò)度申報(bào)纳猫,但不能低報(bào)你的定期存款婆咸。因此,如果你能證明你的準(zhǔn)備金至少是一個(gè)一定數(shù)額芜辕,你的負(fù)債在一定程度上是一個(gè)一定數(shù)量尚骄,合到一起,你就證明了你的部分準(zhǔn)備金的下限侵续。

如果你不關(guān)心用戶(hù)的隱私倔丈,你可以簡(jiǎn)單地發(fā)布你的記錄——具體來(lái)說(shuō),擁有定期存款的每個(gè)客戶(hù)的用戶(hù)名和金額∽次希現(xiàn)在任何人都可以計(jì)算你的總負(fù)債需五,如果你省略了任何客戶(hù)或謊稱(chēng)其存款的價(jià)值,你就會(huì)冒著該客戶(hù)暴露你的風(fēng)險(xiǎn)轧坎。你可以補(bǔ)充假冒用戶(hù)宏邮,但你只能通過(guò)這種方式提高索賠總負(fù)債的價(jià)值。所以只要沒(méi)有客戶(hù)投訴缸血,這就可以讓你證明你存款的下限蜜氨。當(dāng)然,這個(gè)伎倆是在尊重用戶(hù)隱私的同時(shí)做到這一點(diǎn)捎泻。

要做到這一點(diǎn)记劝,我們將使用Merkle樹(shù),我們?cè)诘?章中看到過(guò)族扰⊙岢螅回想一下定欧,merkle樹(shù)是用哈希指針構(gòu)建的二進(jìn)制樹(shù),以便每個(gè)指針不僅說(shuō)明我們可以獲得一條信息怒竿,而且該信息的加密哈希也是如此砍鸠。交易所通過(guò)構(gòu)建Merkle樹(shù)來(lái)執(zhí)行證明,其中每個(gè)葉子對(duì)應(yīng)于用戶(hù)耕驰,并發(fā)布其根哈希爷辱。類(lèi)似于上述的天真協(xié)議,每個(gè)用戶(hù)都有責(zé)任確保它們被包含在樹(shù)中朦肘。此外饭弓,還有一種方式可以讓用戶(hù)集體檢查索賠的存款總額。 我們現(xiàn)在深入細(xì)節(jié)媒抠。

圖4.5:負(fù)債證明弟断。交易所發(fā)布包含葉子中所有用戶(hù)的Merkle樹(shù)的根,包括存款金額趴生。任何用戶(hù)都可以請(qǐng)求一個(gè)包含在樹(shù)中的證明阀趴,并驗(yàn)證存款金額是否正確傳播到樹(shù)的根目錄。

現(xiàn)在苍匆,我們要將這些哈希指針的每一個(gè)添加到另一個(gè)字段或?qū)傩灾辛跫薄T搶傩允且粋€(gè)數(shù)字,表示樹(shù)中該哈希指針下的子樹(shù)中所有存款比特幣的總金額浸踩。為了這樣做叔汁,每個(gè)哈希指針對(duì)應(yīng)的值應(yīng)該是它下面的兩個(gè)散列指針的值的總和。

交易所構(gòu)造這個(gè)樹(shù)检碗,加密地將根指針與根屬性值一起簽名据块,并發(fā)布它。根值當(dāng)然是總負(fù)債后裸,我們感興趣的數(shù)量瑰钮。交易所聲稱(chēng)所有用戶(hù)都在樹(shù)的樹(shù)葉中表示,其存款值正確表示微驶,并且值正確地傳播到樹(shù)上浪谴,以使根值是所有用戶(hù)的存款金額的總和。

現(xiàn)在因苹,每個(gè)客戶(hù)可以去組織苟耻,要求提供正確包含的證明。然后扶檐,交易所必須向客戶(hù)顯示該用戶(hù)的葉子到根的部分樹(shù)凶杖,如圖4.6所示】钪客戶(hù)然后會(huì)驗(yàn)證:

1.根哈希指針和根植與交易所簽名和發(fā)布的相同智蝠。

2.哈希指針一直一直下降腾么,也就是說(shuō),每個(gè)哈希值確實(shí)是它指向的節(jié)點(diǎn)的加密哈希杈湾。

3.葉包含正確的用戶(hù)帳戶(hù)信息(例如解虱,用戶(hù)名/用戶(hù)ID和存款金額)。

4.每個(gè)值是它下面兩個(gè)值的總和漆撞。

5.這兩個(gè)值都不是負(fù)數(shù)殴泰。

圖4.6:包含在Merkle樹(shù)中的證明。葉節(jié)點(diǎn)的披露浮驳,以及從根到葉的路徑上的節(jié)點(diǎn)的兄弟姐妹悍汛。

好消息是,如果每個(gè)客戶(hù)都這樣做至会,那么這個(gè)樹(shù)的每一個(gè)分支都將被探索离咐,有人將驗(yàn)證每個(gè)哈希指針的相關(guān)值等于其兩個(gè)孩子的值之和。至關(guān)重要的是奋献,交易所不能在不同客戶(hù)的樹(shù)的任何部分呈現(xiàn)不同的值健霹。這是因?yàn)檫@樣做要么意味著找到哈希沖突的能力旺上,要么向不同的客戶(hù)呈現(xiàn)不同的根值瓶蚂,我們認(rèn)為這是不可能的。

讓我們回顧一下宣吱。首先窃这,交易所他們通過(guò)進(jìn)行X量的自我交易證明至少擁有X數(shù)量的儲(chǔ)備貨幣。然后他們證明他們的客戶(hù)最多有Y數(shù)量的存款征候。這表明它們的儲(chǔ)量分?jǐn)?shù)至少為X / Y杭攻。這意味著,如果比特幣交易所想證明他們?cè)谒写婵睿ɑ?00%)上持有25%的儲(chǔ)備疤坝,他們可以以任何人可以獨(dú)立核查的方式執(zhí)行兆解,而不需要中央監(jiān)管機(jī)構(gòu)。

你可能會(huì)注意到跑揉,這里提供的兩個(gè)證明(通過(guò)簽署挑戰(zhàn)字符串的儲(chǔ)備證明和通過(guò)Merkle樹(shù)的負(fù)債證明)顯示了大量私人信息锅睛。具體來(lái)說(shuō),它們揭示了交易所使用的所有地址历谍,儲(chǔ)備金和負(fù)債的總價(jià)值现拒,甚至有關(guān)個(gè)人客戶(hù)余額的一些信息。實(shí)際上交易所對(duì)此的發(fā)布猶豫不決望侈,結(jié)果儲(chǔ)備的加密證明很少見(jiàn)印蔬。

最近提出的一項(xiàng)叫做“規(guī)定”的議定書(shū)提供了相同的償付能力證明,但并沒(méi)有透露總負(fù)債或儲(chǔ)備金或使用的地址脱衙。該協(xié)議使用更高級(jí)的加密侥猬,我們不會(huì)在此處覆蓋例驹,但另一個(gè)示例顯示如何使用加密技術(shù)來(lái)確保隱私。

償付能力是比特幣交易所自愿證明監(jiān)管的一個(gè)方面退唠,但是第7章我們將看到眠饮,監(jiān)管的其他方面更難保證。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末铜邮,一起剝皮案震驚了整個(gè)濱河市仪召,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌松蒜,老刑警劉巖扔茅,帶你破解...
    沈念sama閱讀 216,919評(píng)論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異秸苗,居然都是意外死亡召娜,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,567評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén)惊楼,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)玖瘸,“玉大人,你說(shuō)我怎么就攤上這事檀咙⊙诺梗” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,316評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵弧可,是天一觀的道長(zhǎng)蔑匣。 經(jīng)常有香客問(wèn)我,道長(zhǎng)棕诵,這世上最難降的妖魔是什么裁良? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,294評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮校套,結(jié)果婚禮上价脾,老公的妹妹穿的比我還像新娘。我一直安慰自己笛匙,他們只是感情好侨把,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,318評(píng)論 6 390
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著膳算,像睡著了一般座硕。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上涕蜂,一...
    開(kāi)封第一講書(shū)人閱讀 51,245評(píng)論 1 299
  • 那天华匾,我揣著相機(jī)與錄音,去河邊找鬼。 笑死蜘拉,一個(gè)胖子當(dāng)著我的面吹牛萨西,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播旭旭,決...
    沈念sama閱讀 40,120評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼谎脯,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了持寄?” 一聲冷哼從身側(cè)響起源梭,我...
    開(kāi)封第一講書(shū)人閱讀 38,964評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎稍味,沒(méi)想到半個(gè)月后废麻,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,376評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡模庐,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,592評(píng)論 2 333
  • 正文 我和宋清朗相戀三年烛愧,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片掂碱。...
    茶點(diǎn)故事閱讀 39,764評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡怜姿,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出疼燥,到底是詐尸還是另有隱情沧卢,我是刑警寧澤,帶...
    沈念sama閱讀 35,460評(píng)論 5 344
  • 正文 年R本政府宣布悴了,位于F島的核電站搏恤,受9級(jí)特大地震影響违寿,放射性物質(zhì)發(fā)生泄漏湃交。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,070評(píng)論 3 327
  • 文/蒙蒙 一藤巢、第九天 我趴在偏房一處隱蔽的房頂上張望搞莺。 院中可真熱鬧,春花似錦掂咒、人聲如沸才沧。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,697評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)温圆。三九已至,卻和暖如春孩革,著一層夾襖步出監(jiān)牢的瞬間岁歉,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,846評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工膝蜈, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留锅移,地道東北人熔掺。 一個(gè)月前我還...
    沈念sama閱讀 47,819評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像非剃,于是被迫代替她去往敵國(guó)和親置逻。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,665評(píng)論 2 354

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