郭惠芳

【摘 要】比特幣已成為最主要數字貨幣代表。學術界也對比特幣安全做了大量研究。根據比特幣白皮書中所說的“大多數”的決定表達為最長的鏈,如果想要對業已出現的區塊進行修改,攻擊者必須重新完成該區塊的工作量外加該區塊之后所有區塊的工作量,并最終趕上和超越誠實節點的工作量。基于以上說法和現在比特幣實際總算力超過單個人或單位能力的現實,一種普遍認識是攻擊者需要擁有超過全網51%的算力才能完成攻擊。通過研究發現這種認識有一定局限,過高地估計了攻擊者的門檻。提出一種可行的攻擊方案。在一定條件下,攻擊者只需要具有比所有誠實節點算力之和小得多的算力,就可以完成一次攻擊。這將影響大家對攻擊者算力門檻重新評估。
【關鍵詞】比特幣;算力;工作量證明;劃分;攻擊
中圖法分類號 TP309;TP311.13 文獻標識碼: A 文章編號: 2095-2457(2018)28-0065-002
DOI:10.19694/j.cnki.issn2095-2457.2018.28.028
0 引言
在“比特幣白皮書:一種點對點的電子現金系統”一文中有關工作量證明機制按如下模式起作用:該工作量證明機制還解決了在集體投票表決時,誰是大多數的問題。如果決定大多數的方式是基于IP地址的,一IP地址一票,那么如果有人擁有分配大量IP地址的權力,則該機制就被破壞了。而工作量證明機制的本質則是一CPU一票。“大多數”的決定表達為最長的鏈,因為最長的鏈包含了最大的工作量。如果大多數的CPU為誠實的節點控制,那么誠實的鏈條將以最快的速度延長,并超越其他的競爭鏈條。如果想要對業已出現的區塊進行修改,攻擊者必須重新完成該區塊的工作量外加該區塊之后所有區塊的工作量,并最終趕上和超越誠實節點的工作量[1]。2009年比特幣誕生的時候,每筆賞金是50個比特幣。誕生10分鐘后,第一批50個比特幣生成了,而此時的貨幣總量就是50。 隨后比特幣就以約每10分鐘50個的速度增長。當總量達到1050萬時(2100萬的50%),賞金減半為25個。當總量達到1575萬(新產出525萬,即1050 的50%)時,賞金再減半為12.5個[7]。一方面,圖[1]是2016 年到2018 年5 月16日比特幣的市值圖[2]。世界上比特幣上限只有2100萬個,如今超過三分之二都被開采出來分布在了公眾手里。2018年5月16日,比特幣總市值為1400億美元[2],每枚比特幣大致為8300美元。比特幣現有市值及單枚價格對攻擊者有很強的吸引力。另一方面,圖[2]是比特幣算力變化圖,從圖中可以看出到2018 年5 月16 日比特幣算力已經達到30EH/S[3]。這種情況下,攻擊者純粹依靠自身算力增加,達到比所有其它節點算力之和更大的算力來攻擊比特幣幾乎不可能(1EH/s=1000PH/s,1PH/s=1000TH/s, 1TH/s=1000GH/s,1GH/s=1000MH/s,1MH/s=1000KH/s, 1KH/s=1000H/s,1H/s=每秒一次哈希運算)。文獻[6]中對比特幣算力和分布進行了說明。文獻[4]提出了針對比特幣路由攻擊的分類方法,并對每種類型的攻擊進行了描述。文獻[5]提出了基于包頭和內容的攻擊方法。
本文的主要貢獻如下:
(1)我們提出了一種基于算力劃分的比特幣攻擊方案,在該方案中攻擊者僅需要擁有算力大于網絡上的任一節點算力,即可發起攻擊;
(2)本文列出了發起攻擊的三個條件,并對其中算力分割存在性進行了證明;
(3)本文對攻擊過程及有效性進行了論述.
2 攻擊方案
根據“比特幣白皮書”可以得到以下推論:設在網絡中有n個節點,每個節點的算力為CFi(0≤i 基于以上推論,利用比特幣的規則,可以設想攻擊者在滿足以下條件下時發起對比特幣的攻擊: (1)自身擁有算力大于網絡上的任一節點算力。即設攻擊者為節點0,擁有算力CF0,則CF0>max{CFi},(0 (2)攻擊者可以任意分割其它節點,使得被分割的節點之間無法相互投票; (3)可以獲知任一節點的算力。 其次,在以上條件成立下,攻擊者根據事前獲得的節點算力信息,將節點分割為滿足上述條件的m個子區域。這m個區域會獨立發展各自的鏈。由于攻擊者所在子區域算力最大,所以攻擊者能夠生成最長鏈。對生成最長鏈中的區塊影響最大的如圖[4]所示target_bits。正常情況下,該值參考上兩周產生的區塊的平均生成時間而定。兩周內如果平均10分鐘產生一個區塊的話,兩周會產生2016個區塊,軟件會計算最新的2016個區塊生成的時間,然后做對比,隨之調整難度,使得接下來產生的區塊的預期時間保持在10分鐘左右。因為最近的2016個區塊已經確定,所以這個數字也是確定的[8]。但在攻擊過程中,一方面由于攻擊都對節點根據算力進行了劃分,所以每個子區域的實際算力與正常情況相比會大副度下降。由此被劃分的子區域中的結點都會比正常情況更慢地生成區塊。與之相比,攻擊者是知道這個難度值,可以直接設定該值為不小于自己算力的合適值。從而比其它不知道該真實值的節點更快地生成區塊。另一方面由條件知,攻擊者所在子區域的算力是所有子區域中算力最大值也保證了攻擊者生成區塊的可能速度大于其它子區域。綜合以上的優勢,攻擊者能夠保證更快地生成足夠長的鏈。 最后,在保證生成的鏈足夠長后,攻擊者就可結束攻擊行為。由于以下原因,該包含有利于攻擊者區塊的鏈會被全網接受為合法鏈,并永久記錄在比特幣鏈中。 因為攻擊開始后全網被分為m個子區域,同時這些區域間無法相互投票,則由比特幣的運行特性,這些子區域會各自生成比特幣的一條鏈。每條鏈具有的算力為RCFj(0≤j
至此,攻擊者在自身擁有算力大于網絡上的任一節點算力的條件下完成了一次對比特幣的攻擊。并不需要象"比特幣白皮書"書中所說攻擊者需要擁有 全網“大多數”(>50%)算力才能完成攻擊。
3 結論
本文利用比特幣的特性,結合網絡攻擊的常用手段,提出了一種對比特幣可能的攻擊方案。雖然這種方案的實施依賴于兩大基本條件,(1)攻擊者需要擁有算力大于網絡上的任一節點算力;(2)攻擊者可以任意分割其它節點,使得被分割的節點之間無法相互投票。第一個條件的意義在于:與“比特幣白皮書”書中所說攻擊者需要擁有全網“大多數”(>50%)算力才能完成攻擊相比,有著非常大的下降。如果達到"比特幣白皮書"中的要求,攻擊者需要與所有參與比特幣節點競爭。如果達到本文中的方案,攻擊都只需與最大算力節點競爭。對于第二個條件,現階段通過網上的報道可知,通過控制大量網絡設備,如網絡主機、攝像頭、物聯網設備、路由器等就可以滿足第二個條件。如果能夠滿足第二個條件,滿足第三個條件,只需要耐心和信息的收集。由以上分析可知,現階段本文提出的攻擊方案具有現實可行性。
【參考文獻】
[1]Satoshi Nakamoto.Bitcoin:A peer-to-peer electronic cash system.[EB/OL](2008).https://www.bitcoin.org/bitcoin.pdf.
[2]Market Capitalization.Bitcoin.com[EB/OL].https://charts.bitcoin.com/chart/market-cap(2018).
[3]Hash Rate.Bitcoin.com[EB/OL].https://charts.bitcoin.com/chart/hash-rate(2018).
[4]Maria Apostolaki,Aviv Zohar,Laurent Vanbever.Hijacking Bitcoin: Routing Attacks on Cryptocurrencies[J]. IEEE Symposium on Security and Privacy 2017.San Jose,CA,USA(May 2017).
[5]Liang Wang, Kevin P.Dyer,Aditya Akella,Thomas Ristenpart, Thomas Shrimpton.Seeing through Network-Protocol Obfuscation[C].CCS '15 Proceedings of the 22nd ACM SIGSAC Conference on Computer and Communications Security Pages 57-69.(2015).
[6]Gencer A E,Basu S,Eyal I,et al.Decentralization in Bitcoin and Ethereum Networks[J].Financial Cryptography and Data Security (FC).arXiv:1801.03998[cs.CR](2018).
[7]達鴻飛.比特幣:通縮貨幣的未來[EB/OL].第一財經日報2013-11-01 http://www.yicai.com/news/3077490.html.
[8]Rahul P.Naik.Optimising the SHA256 Hashing Algorithm for Faster and More Efficient Bitcoin Mining[D].London.University College London.(2013).