2017年5月12日,一種名為WannaCry的“蠕蟲式勒索病毒”利用微軟的TCP445端口漏洞,攻擊主機(jī)并加密主機(jī)上存儲(chǔ)的文件。從中國(guó)到英國(guó)、意大利、俄羅斯等150個(gè)國(guó)家受到網(wǎng)絡(luò)攻擊,影響到金融,能源,醫(yī)療等諸多行業(yè)。而最引入注目的還有“勒索病毒”所要的贖金是比特幣,這點(diǎn)再度引發(fā)了各界的強(qiáng)烈關(guān)注。
相信所有人都會(huì)疑惑,為什么黑客指明要比特幣支付贖金?賬號(hào)不能被追蹤么?
這個(gè)得從比特幣的特性來(lái)說(shuō),因?yàn)楸忍貛啪哂斜憬菪?、匿名性,可以?shí)現(xiàn)快速全球轉(zhuǎn)賬的特征,才被犯罪組織所看中。
在比特幣網(wǎng)絡(luò)中,擁有者的身份只以一組加密的計(jì)算機(jī)代碼形式出現(xiàn)。網(wǎng)絡(luò)只記錄了一個(gè)比特幣是由哪個(gè)地址挖出來(lái)的,如何流轉(zhuǎn),但這些地址的擁有者身份卻無(wú)從查實(shí),相關(guān)交易可以輕易地從政府監(jiān)管的視野中隱形,而監(jiān)管者難以跟蹤或攔截。
相比其他方式,利用比特幣匯款要“隱秘”的多。正常的跨國(guó)匯款而言,會(huì)經(jīng)過(guò)層層外匯管制機(jī)構(gòu)審查,且交易記錄會(huì)被銀行在內(nèi)多方記錄在案。交易超過(guò)一定額度后,需向有關(guān)部門上報(bào),防止洗錢等違規(guī)行為。
以上只是淺顯的解釋了這個(gè)問(wèn)題,為了更深入的探討以上問(wèn)題。我將依據(jù)比特幣底層原理展開闡述。
1.比特幣是什么?
比特幣是由中本聰在2009年提出,根據(jù)中本聰?shù)乃悸吩O(shè)計(jì)發(fā)布的開源軟件以及建構(gòu)其上的P2P網(wǎng)絡(luò)。比特幣是一種P2P形式的數(shù)字貨幣。作為一款開源軟件,比特幣的協(xié)議??梢钥缙脚_(tái)的運(yùn)行于電腦、手機(jī)等諸多電子設(shè)備之上,這使得比特幣技術(shù)易于獲取。比特幣可以在特定的交易所或者交易軟件上換取世界范圍內(nèi)的任何合法幣種,國(guó)內(nèi)比較大型的比特幣交易機(jī)構(gòu)如:火幣網(wǎng)、okcoin等。從比特幣的設(shè)計(jì)理念來(lái)說(shuō),它是目前為止最理想的貨幣形態(tài),快捷、安全、無(wú)國(guó)界,嫣然一副世界通用貨幣的姿態(tài)存活于世。
比特幣不同于傳統(tǒng)的貨幣,它完全虛擬的,是特定的數(shù)字代碼。比特幣的最終所有權(quán)是通過(guò)一套分布式記賬本系統(tǒng),記錄比特幣交易的流水和時(shí)間戳來(lái)確認(rèn)的。但是比特幣網(wǎng)絡(luò)沒有特定的中央服務(wù)器,是通過(guò)礦工來(lái)記錄比特幣交易,網(wǎng)絡(luò)中任何一臺(tái)計(jì)算機(jī)都可以成為礦工,用該計(jì)算機(jī)的算力來(lái)驗(yàn)證和記錄交易。平均每隔10分鐘,就有一臺(tái)計(jì)算機(jī)成功驗(yàn)證和記錄過(guò)去10分鐘內(nèi)的交易,作為挖礦的報(bào)酬,將會(huì)獲得一定數(shù)量的比特幣和記賬手續(xù)費(fèi)。此外,比特幣的總數(shù)量是固定的2,100萬(wàn)枚,造成通貨膨脹是不可實(shí)現(xiàn)的。
其實(shí)比特幣系統(tǒng)類似于銀行系統(tǒng),也是一個(gè)賬本,記錄了每個(gè)人的交易記錄。唯一的區(qū)別是比特幣的交易信息不保存在中央服務(wù)器中,而是保存在所有連接到比特幣網(wǎng)絡(luò)的每一臺(tái)計(jì)算機(jī)內(nèi)。
2.比特幣賬戶體系——密鑰、比特幣地址體系
比特幣的所有權(quán)是通過(guò)數(shù)字密鑰、比特幣地址和數(shù)字簽名來(lái)確立的。數(shù)字密鑰分為公鑰和私鑰,可以簡(jiǎn)單的把公鑰理解為收款人的銀行賬號(hào),私鑰為賬戶密碼。而比特幣地址是由公鑰通過(guò)不可逆加密獲得的。公鑰、私鑰、比特幣地址的對(duì)應(yīng)關(guān)系如下圖:

私鑰通過(guò)非對(duì)稱加密算法——橢圓曲線相乘法計(jì)算得到公鑰,然后公鑰通過(guò)單向哈希算法得到比特幣地址。而這個(gè)比特幣地址就是黑客勒索贖金的所提供的賬號(hào),從算法的過(guò)程可以看出,只依據(jù)比特幣地址要追蹤到比特幣持有人幾乎是不可能的。
2.1公鑰生成
橢圓曲線加密法是一種基于離散對(duì)數(shù)問(wèn)題的非對(duì)稱加密法,可以用對(duì)橢圓曲線上的點(diǎn)進(jìn)行加法或乘法運(yùn)算來(lái)表達(dá)。比特幣所用的橢圓曲線函數(shù)是
y2 mod p = (x3 + 7) mod p(p為素?cái)?shù))
對(duì)應(yīng)曲線如圖所示:

在比特幣系統(tǒng)中,以一個(gè)隨機(jī)生成的私鑰k為起點(diǎn),將其與橢圓曲線上已定義的 生成點(diǎn)G相乘以獲得曲線上的另一點(diǎn),也就是相應(yīng)的公鑰K。比特幣密鑰的生成點(diǎn)都是相同的:
{K = k * G}
簡(jiǎn)單描述就是在曲線上G點(diǎn)的切線與曲線相交的點(diǎn)在X軸上的對(duì)稱點(diǎn)就是其中一個(gè)私鑰k值對(duì)應(yīng)的公鑰。依據(jù)下圖,可以想象得出該數(shù)學(xué)運(yùn)算是單向不可逆的,所以私鑰可以轉(zhuǎn)換為公鑰,但公鑰不能轉(zhuǎn)換回私鑰。

順便提一句:破解一個(gè)228字節(jié)的橢圓曲線秘鑰的時(shí)間,等同于破解一個(gè)2,380字節(jié)RSA秘鑰的時(shí)間,需要煮沸地球上所以水的電力能量,這幾乎是不可能的事情。
橢圓曲線密碼學(xué)的具體原理可參考:
1.橢圓曲線ECC加密算法入門介紹
2.一個(gè)關(guān)于橢圓曲線密碼學(xué)的初級(jí)讀本
2.2 生成比特幣地址
比特幣地址是一個(gè)由數(shù)字和字母組成的字符串,,由公鑰生成的以數(shù)字“1”開頭密碼串。形如:
1J7mdg5rbQyUHENYdx39WVWK7fsLpEoXZy
比特幣地址可由公鑰生成比特幣地址時(shí),使用的算法是SHA256和RIPEMD160。以公鑰 K 為輸入,計(jì)算其SHA256哈希值,并以此結(jié)果計(jì)算RIPEMD160 哈希值,得到一個(gè)長(zhǎng)度為160比特(20字節(jié))的數(shù)字:
A = RIPEMD160(SHA256(K))
其中,K是公鑰,A是生成的比特幣地址。
為了提高了可讀性、避免歧義并有效防止了在地址轉(zhuǎn)錄和輸入中產(chǎn)生的錯(cuò)誤。比特幣地址是一般會(huì)利用“Base58Check”編碼。

3.比特幣底層原理——區(qū)塊鏈技術(shù)
知道了比特幣的賬戶體系機(jī)制,那么比特幣的交易機(jī)制又是怎么樣的呢?
比特幣網(wǎng)絡(luò)中,平均每隔十分鐘,交易記錄將被永久記錄,這十分鐘內(nèi)的數(shù)據(jù)都將存儲(chǔ)在一個(gè)新區(qū)塊中。每一個(gè)區(qū)塊組成的數(shù)據(jù)鏈路被稱為區(qū)塊鏈。在絕大多數(shù)情況下,區(qū)塊數(shù)據(jù)一旦寫上,就再也不能改變或刪除。每個(gè)區(qū)塊記錄了它被創(chuàng)建之前發(fā)生的所有事件。類比記賬本,就是每一個(gè)區(qū)塊類似于賬本的其中一頁(yè),整個(gè)區(qū)塊鏈構(gòu)成了整個(gè)賬本。只是賬本在比特幣網(wǎng)絡(luò)中每臺(tái)計(jì)算機(jī)內(nèi)都有一模一樣的一份,保證了賬本無(wú)法作假。
這里其實(shí)涉及到一個(gè)核心問(wèn)題:分布式系統(tǒng)中怎么確保數(shù)據(jù)的一致性,其中一臺(tái)計(jì)算機(jī)修改了自己的賬本,全網(wǎng)如何識(shí)別作假。這邊引入了有名的拜占庭將軍問(wèn)題。
3.1 拜占庭將軍問(wèn)題
拜占庭將軍問(wèn)題描述版本諸多,但是大同小異,這里做一個(gè)簡(jiǎn)單的非正式描述:拜占庭帝國(guó)想要進(jìn)攻一個(gè)強(qiáng)大的敵人,為此派出了10支軍隊(duì)去包圍這個(gè)敵人。這個(gè)敵人雖不比拜占庭帝國(guó),但也足以抵御5支常規(guī)拜占庭軍隊(duì)的同時(shí)襲擊?;谝恍┰颍@10支軍隊(duì)不能集合在一起單點(diǎn)突破,必須在分開的包圍狀態(tài)下同時(shí)攻擊。他們?nèi)我恢к婈?duì)單獨(dú)進(jìn)攻都毫無(wú)勝算,除非有至少6支軍隊(duì)同時(shí)襲擊才能攻下敵國(guó)。他們分散在敵國(guó)的四周,依靠通信兵相互通信來(lái)協(xié)商進(jìn)攻意向及進(jìn)攻時(shí)間。困擾這些將軍的問(wèn)題是,他們不確定他們中是否有叛徒,叛徒可能擅自變更進(jìn)攻意向或者進(jìn)攻時(shí)間。在這種狀態(tài)下,拜占庭將軍們能否找到一種分布式的協(xié)議來(lái)讓他們能夠遠(yuǎn)程協(xié)商,從而贏取戰(zhàn)斗?這就是著名的拜占庭將軍問(wèn)題。
應(yīng)該明確的是,拜占庭將軍問(wèn)題中并不去考慮通信兵是否會(huì)被截獲或無(wú)法傳達(dá)信息等問(wèn)題,即消息傳遞的信道絕無(wú)問(wèn)。Lamport已經(jīng)證明了在消息可能丟失的不可靠信道上試圖通過(guò)消息傳遞的方式達(dá)到一致性是不可能的。所以,在研究拜占庭將軍問(wèn)題的時(shí)候,我們已經(jīng)假定了信道是沒有問(wèn)題的,并在這個(gè)前提下,去做一致性和容錯(cuò)性相關(guān)研究。
具體可以參考:拜占庭將軍問(wèn)題深入探討
3.2工作量證明
比特幣通過(guò)對(duì)這個(gè)系統(tǒng)做出一個(gè)簡(jiǎn)單的(事后看是簡(jiǎn)單的)修改解決了這個(gè)問(wèn)題,它為發(fā)送信息加入了成本,這降低了信息傳遞的速率,并加入了一個(gè)隨機(jī)元素以保證在一個(gè)時(shí)間只有一個(gè)城邦可以進(jìn)行廣播。它加入的成本是“工作量證明”,它是基于計(jì)算一個(gè)隨機(jī)哈希算法,唯一做的事情就是獲得一些輸入然后進(jìn)行計(jì)算,并得到一串64位的隨機(jī)數(shù)字和字母的字符串,就像這個(gè):
d70298566aa2f1a66d892dc31fedce6147b5bf509e28d29627078d9a01a8f86b
在比特幣的世界中,輸入數(shù)據(jù)包括了到當(dāng)前時(shí)間點(diǎn)的整個(gè)區(qū)塊鏈。并且盡管單個(gè)哈希值用現(xiàn)在的計(jì)算機(jī)可以幾乎即時(shí)的計(jì)算出來(lái),但只有一個(gè)前13個(gè)字符是0的哈希值結(jié)果可以被比特幣系統(tǒng)接受成為“工作量證明”。這樣一個(gè)13個(gè)0的哈希值是極其罕見的,并且在當(dāng)前需要花費(fèi)整個(gè)比特幣網(wǎng)絡(luò)大約10分鐘的時(shí)間來(lái)找到一個(gè)。在一臺(tái)網(wǎng)絡(luò)中的機(jī)器隨機(jī)的找到一個(gè)有效哈希值之前,上十億個(gè)的無(wú)效值會(huì)被計(jì)算出來(lái),這就是減慢信息傳遞速率并使得整個(gè)系統(tǒng)可用的“工作量證明”。
000000000000084b6550604bf21ad8a955b945a0f78c3408c5002af3cdcc14f5
那臺(tái)發(fā)現(xiàn)下一個(gè)有效哈希值的機(jī)器(或者說(shuō)在我們類比中的城邦),把所有的之前的信息放到一起,附上它自己的,以及它的簽名/印章/諸如此類,并向網(wǎng)絡(luò)中的其他機(jī)器廣播出去。只要其他網(wǎng)絡(luò)中的機(jī)器接收到并驗(yàn)證通過(guò)了這個(gè)13個(gè)0的哈希值和附著在上面的信息,他們就會(huì)停止他們當(dāng)下的計(jì)算,使用新的信息更新他們的總賬拷貝,然后把新更新的總賬/區(qū)塊鏈作為哈希算法的輸入,再次開始計(jì)算哈希值。哈希計(jì)算競(jìng)賽從一個(gè)新的開始點(diǎn)重新開始。如此這般,網(wǎng)絡(luò)持續(xù)同步著,所有網(wǎng)絡(luò)上的計(jì)算機(jī)都使用著同一版本的總賬。
與此同時(shí),每一次成功找到有效哈希值以及區(qū)塊鏈更新的間隔大概是10分鐘。在那10分鐘以內(nèi),網(wǎng)絡(luò)上的參與者發(fā)送信息并完成交易,并且因?yàn)榫W(wǎng)絡(luò)上的每一臺(tái)機(jī)器都是使用同一個(gè)總賬,所有的這些交易和信息都會(huì)進(jìn)入遍布全網(wǎng)的每一份總賬拷貝。當(dāng)區(qū)塊鏈更新并在全網(wǎng)同步之后,所有的在之前的10分鐘內(nèi)進(jìn)入?yún)^(qū)塊鏈的交易也被更新并同步了。因此分散的交易記錄是在所有的參與者之間進(jìn)行對(duì)賬和同步的。
最后,在個(gè)人向網(wǎng)絡(luò)輸入一筆交易的時(shí)候,他們使用內(nèi)嵌在比特幣客戶端的標(biāo)準(zhǔn)公鑰加密工具來(lái)同時(shí)他們的私鑰以及接收者的公鑰來(lái)為這筆交易簽名。這對(duì)應(yīng)于拜占庭將軍問(wèn)題中他們用來(lái)簽名和驗(yàn)證消息時(shí)使用的“印章”。因此,哈希計(jì)算速率的限制,加上公鑰加密,使得一個(gè)不可信網(wǎng)絡(luò)變成了一個(gè)可信的網(wǎng)絡(luò),使得所有參與者可以在某些事情上達(dá)成一致(比如說(shuō)攻擊時(shí)間、或者一系列的交易、域名記錄、政治投票系統(tǒng)、或者任何其他的需要分布式協(xié)議的地方)。
3.3 比特幣安全
某個(gè)黑客想修改某個(gè)區(qū)塊,一般情況下這是很難做到的,因?yàn)檎\(chéng)實(shí)的礦工會(huì)在最長(zhǎng)的區(qū)塊鏈上不斷的增加新的區(qū)塊,而整個(gè)比特幣網(wǎng)絡(luò)只認(rèn)可最長(zhǎng)的區(qū)塊鏈。當(dāng)黑客想修改某個(gè)區(qū)塊時(shí),由于后一個(gè)區(qū)塊里面包含了前一個(gè)區(qū)塊的hash值,因此會(huì)生成一個(gè)新的分支,只有當(dāng)他在新的分支上面生產(chǎn)區(qū)塊的速度,超過(guò)誠(chéng)實(shí)曠工生產(chǎn)區(qū)塊的速度時(shí),才能真正做到記錄的修改。
因此,該黑客需要有超過(guò)誠(chéng)實(shí)礦工的運(yùn)算速度,也即至少需要擁有全網(wǎng)51%的算力,這就是比特幣51%攻擊。我們可以認(rèn)為比特幣是安全的,以下幾點(diǎn)可以看出:
- 得到全網(wǎng)51%以上的算力在現(xiàn)實(shí)社會(huì)是不太可能發(fā)生的。
- 即使某些黑客擁有全網(wǎng)51%以上的算力,它也只能修改自己的交易記錄從而把自己剛付給別人的錢拿回來(lái)。因?yàn)榻灰资怯斜忍貛虐l(fā)送方的數(shù)字簽名的,他很難偽造別人的數(shù)字簽名從而把別人的比特幣發(fā)送給自己。
4 比特幣展望
比特幣或者以區(qū)塊鏈技術(shù)為基礎(chǔ)的數(shù)字貨幣希望實(shí)現(xiàn)中本聰所展望的那樣:建立一個(gè)分布式、去中心化、無(wú)中介、安全的世界,將數(shù)據(jù)安全、數(shù)據(jù)效驗(yàn)交給上帝。這也是他設(shè)計(jì)比特幣,設(shè)計(jì)區(qū)塊鏈技術(shù)的本意。雖然我不敢妄言能不能實(shí)現(xiàn),但是區(qū)塊鏈技術(shù)確實(shí)存在廣闊的想象空間。
- 數(shù)據(jù)安全交給上帝的數(shù)據(jù)存儲(chǔ)理念,給大數(shù)據(jù)時(shí)代的數(shù)據(jù)安全提供了一個(gè)可行的技術(shù)方案。
- 數(shù)據(jù)貨幣的實(shí)現(xiàn),將推動(dòng)貨幣的無(wú)紙質(zhì)化,降低貨幣成本,同時(shí)銀行、中央結(jié)算等金融結(jié)算結(jié)構(gòu)將不復(fù)存在,取而代之的是上帝結(jié)算系統(tǒng)。
- 對(duì)于中介公司,最大的誘惑莫過(guò)于消除黑職介。區(qū)塊鏈網(wǎng)絡(luò)作為上帝系統(tǒng),一旦發(fā)現(xiàn)用戶誠(chéng)信出現(xiàn)問(wèn)題,將周知全網(wǎng),黑職介將無(wú)所遁形。