張中霞,王明文
西南交通大學(xué) 數(shù)學(xué)學(xué)院,成都611756
2009 年,一名自稱為Satoshi Nakamoto 的黑客創(chuàng)造了一個點對點的去中心化金融系統(tǒng)——比特幣[1]。不同于傳統(tǒng)的法幣,比特幣不需要中心控制機構(gòu),利用一種稱為區(qū)塊鏈的創(chuàng)新技術(shù),允許用戶在不依賴中心化金融機構(gòu)的情況下在線轉(zhuǎn)賬,并使用區(qū)塊鏈網(wǎng)絡(luò)中的所有節(jié)點記錄每筆交易[2]。經(jīng)過多年發(fā)展,比特幣已成為全球個人和企業(yè)最廣泛使用的數(shù)字貨幣之一[3]。隨著比特幣價值的增加,其潛在的安全威脅和攻擊者也相應(yīng)增加[4]。比特幣網(wǎng)絡(luò)處理所有權(quán)的方式是用戶需有一個比特幣地址和比特幣錢包來證明其所有權(quán)。每一個比特幣都屬于一個比特幣地址,并具有特定的價值。與地址相關(guān)的比特幣只能通過對應(yīng)的私鑰使用[5],地址用來接收比特幣,而私鑰花費地址上對應(yīng)的比特幣余額。比特幣錢包是一組私鑰和公鑰的集合,通過私鑰可以實現(xiàn)資金的成功轉(zhuǎn)賬,所以比特幣錢包是攻擊者控制個人比特幣的一個單點故障點或攻擊載體。近年來,比特幣錢包被盜事件屢屢發(fā)生,引起廣泛關(guān)注[6]。這種安全威脅來自于存儲在比特幣錢包中的私鑰。若攻擊者獲得了用戶私鑰,即獲得了對比特幣錢包的訪問權(quán),就可以使用該私鑰控制用戶的比特幣[7]。私鑰是加密錢包的核心組件,被用來證明用戶對比特幣的所有權(quán),如果私鑰丟失,所有權(quán)也會丟失。
錢包方案對區(qū)塊鏈系統(tǒng)的安全性非常重要,各種錢包方案也相繼被提出,如文獻[8]提出的使用藍牙技術(shù)的硬件錢包方案,文獻[9]提出的分層確定性錢包等。但在現(xiàn)有研究中,對各類錢包方案進行分類總結(jié)的研究尚不多見。文獻[10]分析了Bitcoin core、SPV、托管錢包這三種錢包方案面臨的攻擊及安全性,但缺乏對三種錢包方案的具體介紹也未給出錢包方案的發(fā)展趨勢。綜上,對區(qū)塊鏈錢包方案的研究工作具有十分重要的意義,因此本文對各類區(qū)塊鏈錢包方案進行研究總結(jié),分析目前幾種較流行的錢包方案,給出各種錢包方案在安全性、便利性、性能等方面的優(yōu)勢與不足,并指出未來錢包方案的發(fā)展趨勢。
區(qū)塊鏈作為一種分布式共享記賬本應(yīng)用,其賬戶和錢包發(fā)揮著重要作用。賬戶被用于對分布式網(wǎng)絡(luò)上發(fā)生的交易狀態(tài)和結(jié)果進行記錄,錢包則用來存儲用戶的私鑰。由于在區(qū)塊鏈網(wǎng)絡(luò)上進行的是價值的傳遞,所以對賬戶、錢包以及交易過程的保護顯得至關(guān)重要。區(qū)塊鏈網(wǎng)絡(luò)作為一種價值轉(zhuǎn)移網(wǎng)絡(luò),其應(yīng)用涉及到數(shù)字貨幣資產(chǎn)等價值權(quán)屬的轉(zhuǎn)移,因此賬戶、錢包以及交易過程的安全性要求顯得更為嚴格,其安全性由密碼學(xué)進行保證。
所謂公鑰密碼體制,就是用兩個相關(guān)的密鑰,能夠?qū)⒓用芎徒饷艿哪芰Ψ珠_。公開的密鑰用于加密,叫做公鑰,而另一個保密的密鑰用于解密,叫做私鑰。公鑰密碼體制具有一個重要的性質(zhì),即已知公鑰和密碼算法,求解出私鑰在計算上是不可行的。在公鑰密碼體制中,若用戶A 要想向用戶B 發(fā)送消息m,如圖1 所示,只需要用用戶B 的公鑰PKB進行加密,而用戶B 用自己的私鑰SKB進行解密即可獲得消息m。反之,如果用戶B要和用戶A 進行通信,則可以用用戶A 的公鑰進行加密,用戶A收到密文后,用自己的私鑰進行解密。如圖1所示。
圖1 公鑰密碼體制
公鑰密碼體制應(yīng)該滿足以下幾點:
(1)發(fā)送方A 用B 的公鑰加密m 產(chǎn)生的密文c 在計算上是容易的,即:
c=ξPKB[m]
(2)接收方B能夠用自己的私鑰對c解密,即:
m=DSKB[c]
(3)攻擊者用B 的公鑰求解私鑰在計算上不可行,用密文c和公鑰求解私鑰也不可行。
在比特幣系統(tǒng)中,采用橢圓曲線加密算法[8]作為公鑰密碼方案。
比特幣系統(tǒng)采用公鑰密碼體制,由私鑰產(chǎn)生公鑰,私鑰一般由隨機數(shù)產(chǎn)生。目前大多數(shù)錢包采用種子生成私鑰,錢包恢復(fù)過程由種子完成,錢包不用備份私鑰,只需備份種子即可。由種子生成私鑰的過程如下[9]:
(1)隨機生成128到258位的隨機數(shù),稱為熵。
(2)熵經(jīng)過SHA256 哈希處理后,取前面的幾位(熵長/32)與熵組成新序列,并將序列的11 位作為一部分,與已有的單詞的字典做對應(yīng),生成的有順序的單詞組就是助記詞。
(3)助記詞通過密鑰延伸函數(shù),生成種子。
(4)種子經(jīng)過哈希算法,生成私鑰。
圖2給出了具體流程。
圖2 私鑰生成
在區(qū)塊鏈網(wǎng)絡(luò)中,用戶賬戶通過用戶地址進行索引,而用戶地址由該用戶的公鑰通過某種計算得出。
在比特幣網(wǎng)絡(luò)中,其用戶地址的生成過程如下:
(1)隨機選取整數(shù)作為私鑰d。
(2)用橢圓曲線加密算法[11]計算私鑰所對應(yīng)的公鑰D。
(3)計算出D 的SHA-256 哈希值,用這個結(jié)果計算RIPEMD-160 哈希值,并在最后的值前面加入一字節(jié)地址版本號。
(4)取上一步結(jié)果,計算SHA-256哈希值,再用結(jié)果計算SHA-256哈希值。
(5)取上一步結(jié)果的前4個字節(jié),把這4個字節(jié)加在第(5)步的結(jié)果后面,作為校驗。
(6)用base58 表示法對上一步結(jié)果進行變換,得到最后的用戶地址。
從地址產(chǎn)生的過程,得到地址與私鑰、公鑰的關(guān)系,如圖3所示。
圖3 地址與私鑰關(guān)系
在圖3 中,由公鑰不能導(dǎo)出私鑰,同理,由公鑰哈希也不能得到公鑰[11],換句話說,由地址不能得到比特幣的公鑰以及私鑰。在比特幣網(wǎng)絡(luò)中,每一個比特幣都屬于一個比特幣地址,并具有特定的價值。與地址相關(guān)的比特幣只能通過對應(yīng)的私鑰使用。私鑰一旦丟失無法找回。下面,將介紹各種比特幣錢包對于私鑰儲存的安全性。
區(qū)塊鏈系統(tǒng)中的交易具有不可逆性,貨幣一旦丟失或被盜無法追回,貨幣的儲存關(guān)系用戶資產(chǎn)的安全性,而能唯一證明貨幣所有權(quán)的是私鑰。對于貨幣的管理實則是對私鑰的管理。區(qū)塊鏈錢包為管理和儲存私鑰誕生,主要功能是管理用戶的交易地址、發(fā)起轉(zhuǎn)賬交易、查看交易記錄。每個用戶有一個包含多個密鑰的錢包。錢包只包含私鑰/公鑰對的密鑰鏈。用戶用密鑰簽名交易,從而證明他們擁有交易輸出。貨幣以交易輸出的形式存儲在區(qū)塊鏈中[12]。
第一個區(qū)塊鏈錢包是個完整的客戶端,由中本聰[1]在2009年開發(fā)比特幣協(xié)議時同時開發(fā),名為Bitcoin-Qt。Bitcoin-Qt的私鑰以純文本的形式儲存在電腦硬盤驅(qū)動器的wallet.dat 文檔里,沒有密碼保護,沒有導(dǎo)入和導(dǎo)出私鑰的方式,私鑰由Python 腳本生成。隨著錢包的發(fā)展,Bitcoin-Qt 更名為Bitcoin core,新增了加密錢包功能,能將儲存私鑰的文件加密并導(dǎo)入和導(dǎo)出私鑰。但Bitcoin core 存在明顯的缺陷,其數(shù)據(jù)量過大,且私鑰管理不方便。為解決上述問題,SPV 錢包和HD 錢包應(yīng)運而生,SPV 只保留區(qū)塊鏈的一部分,數(shù)據(jù)量少,交易速度快,HD能夠有效管理多個私鑰,但兩項錢包技術(shù)都犧牲了安全性。
比特幣的開發(fā)者一直致力于嘗試使用不同的方案開發(fā)出安全有效的比特幣密鑰管理軟件。上述錢包都屬于線上軟件錢包,安全性低,且用戶可能因個人私鑰管理不當導(dǎo)致資產(chǎn)丟失。為此,硬件錢包、托管錢包、門限錢包技術(shù)相繼出現(xiàn)[13]。硬件錢包離線產(chǎn)生私鑰,解決了軟件錢包線上安全性問題,但便攜性差;托管錢包將私鑰交于第三方管理,能防止個人保管不當丟失資產(chǎn)情況,但一定程度上違背了區(qū)塊鏈去中心的思想;門限錢包私鑰分割處理,安全性高,且其門限特性可彌補三類錢包的安全缺陷,是錢包可發(fā)展方向。下面是對四類錢包的具體介紹。
第一個軟件錢包是中本聰在2009 年開發(fā)的,名為Bitcoin-Qt,后改名為Bitcoin core。錢包將私鑰和用戶數(shù)據(jù)儲存在電腦的Berkeley 數(shù)據(jù)庫,該數(shù)據(jù)庫用C 語言編寫,并用二進制儲存關(guān)鍵數(shù)據(jù),默認情況下,這個數(shù)據(jù)庫是不加密的,但用戶可以通過菜單選項“設(shè)置->加密錢包”來選擇加密。除了錢包中的比特幣私鑰和公鑰外,該數(shù)據(jù)庫還存儲各種用戶數(shù)據(jù),如聯(lián)系人(基本上是標簽和公共地址之間的關(guān)聯(lián))和錢包的交易歷史。Bitcoin core還允許用戶將錢包文件備份到磁盤上的某個位置[14]。
Bitcoin core 是款‘重'錢包,錢包保留了完整的區(qū)塊鏈。且錢包能夠管理比特幣、交易、記錄查詢、節(jié)點維護,也被稱為全節(jié)點錢包。圖4是全節(jié)點的結(jié)構(gòu)圖。圖中挖礦用虛線標記是因中本聰客戶端中未包含這項功能。
圖4 全節(jié)點邏輯結(jié)構(gòu)
圖4 中Bitcoin core保留了完整區(qū)塊鏈,其優(yōu)點如下:
(1)完整的客戶端提供高級的管理和獨立性可直接獨立驗證所有交易[15],不依賴任何服務(wù)器或第三方,便攜性高。
(2)終端用戶可以驗證軟件的二進制是否對應(yīng)源包,從而防止源版本和二進制版本之間微小的、未檢測到的惡意差異[10]。這種類型的開發(fā)消除了開放源碼開發(fā)過程中的透明度差距,所以,Bitcoin core安全性高。
(3)可防止礦商欺騙,因其能檢查接收的每一塊交易并確保該塊中的一切是完全有效的——允許信任該塊,無需信任創(chuàng)建礦商。這有效防止礦商欺騙Bitcoin core 用戶接受違反2 100 萬比特幣上限或違反其他重要規(guī)則的區(qū)塊。其他錢包的用戶沒有這種安全級別,易接受偽造交易或被劫持區(qū)塊鏈。表1 給出了Bitcoin core和其他錢包的安全性比較。
表1 錢包安全性分析
Bitcoin core 因‘重'屬性——保留完整區(qū)塊鏈,使其也存在如下問題:
(1)錢包每次交易會帶上大量的數(shù)據(jù)賬本,首次使用需一次性下載約20 GB的數(shù)據(jù),每月還需額外下載5~10 GB,且第一次啟動Bitcoin core大約需要4 h,每天大約需要5 min來更新,速度較慢。用戶獲取賬戶余額,要求Bitcoin core必須在線,用戶必須等待,直到下載完整的區(qū)塊鏈副本。由于區(qū)塊鏈的大小,這可能需要幾個小時到幾天來完成。所以錢包僅適合高端用戶使用。
(2)比特幣每次交易后都會盡可能使用新的地址。為防止地址對應(yīng)的私鑰丟失,在Bitcoin core錢包中,每次使用后都會將錢包文件加上日期進行備份。當Bitcoin core 錢包創(chuàng)建了大數(shù)量的錢包地址時,這些地址對應(yīng)的私鑰管理就成為了問題。Bitcon core不能有效管理私鑰。
基于上述問題,提出了下面兩種解決方案:
(1)SPV技術(shù)
針對Bitcoin core 數(shù)據(jù)量大、速度慢的問題,開發(fā)者提出了SPV 錢包技術(shù)。SPV 錢包是將錢包的部分功能剝離出來,只是一個支付驗證,而對于完整的交易驗證由核心節(jié)點完成,錢包在不下載區(qū)塊鏈的情況下驗證交易是否是區(qū)塊的一部分,所以SPV錢包交易速度快。圖5給出了SPV錢包的原理。
圖5 SPV錢包的原理
過程如下:
①下載完整的區(qū)塊頭數(shù)據(jù)(很大減少了賬本數(shù)據(jù)量)。
②若想驗證支付交易,則需算出交易的哈希值txHash。
③搜索txHash所在位置的區(qū)塊,驗證這個區(qū)塊的區(qū)塊頭有沒有在賬本數(shù)據(jù)中。
④找到這個區(qū)塊中用來計算merkle根的哈希值。
⑤計算merkle根。
⑥若上一步得到的結(jié)果與這個區(qū)塊的merkle 根相等,則支付交易存在。
由上述原理,得SPV錢包只需連接到區(qū)塊鏈中的完整節(jié)點(大約3 000 個完整節(jié)點中的一個),并將區(qū)塊頭而不是所有區(qū)塊儲存在本地。在交易期間,錢包向連接的遠程節(jié)點請求交易信息,包括交易的副本和merkle樹,通過儲存在merkle樹結(jié)構(gòu)中的信息計算和驗證交易的有效性[15]。SPV 錢包節(jié)省了存儲空間和帶寬,能夠保障錢交易速度,但錢包存在明顯缺陷:
①錢包只能得出支付交易是否被發(fā)起,不能確定交易最終是否會進入主鏈。
②安全性低。使用SPV錢包時,攻擊者可以在使用私鑰時竊取私鑰,因為SPV錢包只用加密方式保護其私鑰。如果攻擊者對存儲在本地數(shù)據(jù)庫中的區(qū)塊頭進行攻擊[16],則不能確保驗證結(jié)果的準確性。除此之外,若攻擊者篡改了交易的地址,比特幣將會直接轉(zhuǎn)入攻擊者的錢包。
對于以上問題,Dai 等在文獻[17]提出了一種基于Trustzone 的區(qū)塊鏈輕量級錢包,Trustzone 將系統(tǒng)的硬件和軟件源分為安全和不安全兩部分,所有敏感操作在安全部分進行。通過在安全執(zhí)行環(huán)境中驗證事務(wù)來保護驗證過程。并通過加密使本地塊頭對于Rich OS 系統(tǒng)直接不可讀。圖6 是錢包的具體結(jié)構(gòu),方案通過隔離,保護了私鑰和區(qū)塊頭,解決了SPV安全性低的問題,但也存在缺陷,即很多設(shè)備不支持Trustzone技術(shù)。
(2)HD技術(shù)
針對Bitcoin core 不能管理多個私鑰,分層確定性錢包(簡稱HD 錢包)的提出解決了這一難題。HD 錢包屬于確定性錢包的一種,通過種子生成多個私鑰。種子是隨機生成的數(shù)字,數(shù)字包含了索引號或者可生成私鑰的鏈碼。種子可收回所有已產(chǎn)生的私鑰,只需在初始創(chuàng)建時簡單備份[12],只要有種子就能找回私鑰。錢包[9]能夠通過生成子私鑰的偽隨機序列維護,減輕了維護的負擔。在HD錢包中,主私鑰d與子私鑰di存在如下關(guān)系:di=Hash(i,d)
其中Hash是加密的哈希函數(shù)。
圖6 基于Trustzone的區(qū)塊鏈輕量級錢包
如2.2 節(jié)所述,種子由助記詞通過密鑰延伸函數(shù)得到,為512位,而由種子到私鑰的具體生成過程如下:
①將512 位的種子分成左右兩部分,左邊是256 位的母密鑰,右邊是256位的鏈碼,如圖7所示。
圖7 母密鑰產(chǎn)生過程
②將索引、母密鑰、鏈碼合在一起后使用HMACSHA512函數(shù)散列得到512位的散列。
③將散列分成左右兩部分,右邊是256 位的子鏈的鏈碼,左邊是256 位,以及索引號被加載在母密鑰上產(chǎn)生子密鑰,如圖8所示。
圖8 子密鑰產(chǎn)生過程
由圖8,可知母私鑰加上母鏈碼可得到子私鑰,同理,母公鑰加上鏈碼也可得到子公鑰,無需私鑰。在HD錢包中,若用戶創(chuàng)建和發(fā)布主公鑰,任何人可以通過主公鑰計算子公鑰序列,但由主公鑰不足以恢復(fù)私鑰。錢包的主私鑰生成逐層的子私鑰,除此,主公鑰也能生成子公鑰,圖9 是主密鑰與子密鑰的關(guān)系圖,需注意,主公鑰生成子公鑰的過程不需要私鑰的參與。
圖9 主密鑰與子密鑰關(guān)系
HD 錢包將私鑰和公鑰隔離。在HD 錢包中,主私鑰由一個隨機數(shù)生成,而子私鑰由主私鑰通過一個確定且不可逆算法來產(chǎn)生。HD錢包的優(yōu)勢如下:
①交易后,不用備份新增的地址的私鑰,只需要備份主私鑰即可,節(jié)約儲存空間且可管理多個私鑰。
②便捷性高,如只需要主公鑰或某子公鑰,即可查看下級數(shù)據(jù)。不僅如此,HD 還能根據(jù)上述的特點設(shè)定不同層級權(quán)限,可以查看余額情況等。
但HD 錢包的分層特點,使錢包存在安全缺陷,各私鑰之間具有了固定的關(guān)系,攻擊者能夠通過任何一個子私鑰加上主公鑰恢復(fù)主私鑰。
為解決這一問題,文獻[9]提出了一種新的HD 錢包。使用陷門哈希函數(shù)來發(fā)送簽名,不直接給任何人私鑰進行簽名。且對任何子節(jié)點隱藏私鑰,可以防止關(guān)聯(lián)攻擊。錢包提供了兩個公鑰之間的不可鏈接性,實現(xiàn)了用戶匿名、公鑰派生和高可擴展性。文獻[18]提出新的HD 錢包來對抗這種攻擊。在主公鑰大小為O(m)的情況下,泄露少于m 個主私鑰是安全的。這是因為錢包采用的不是一個主私鑰,而是m 個。若泄露m 個秘密,則方案不可行。
HD 錢包的最大安全性問題是各私鑰之間的關(guān)聯(lián)性,因此,如何隱藏這種關(guān)聯(lián)性需要進一步的研究。
3.1.1 Electrum
第一款采用HD 技術(shù)的錢包是Electrum,對比與全節(jié)點錢包Bitcoin core,采用了SPV 技術(shù),是目前流行的一種輕量級錢包[18]。
Electrum 與Bitcoin core 的區(qū)別在于:在Electrum中,數(shù)據(jù)以JSON格式存儲在文件中;關(guān)鍵材料被存儲為基于文本的數(shù)據(jù),默認情況下,Electrum 中的私有數(shù)據(jù)(種子和主私有密鑰)采用AES-256-CBC 加密[18],私鑰只會在簽署交易時被短暫解密。Electrum 使用分層確定性錢包,所有密鑰都來自單個主密鑰對。在錢包初始化之后,37 個密鑰對將被預(yù)先計算并顯示在錢包的“地址”選項卡中。此外,在錢包初始化期間,Electrum 生成13 單詞的種子,從這些種子中派生出錢包中的主私鑰(以及所有私鑰)。種子短語類似BIP39,但不完全BIP39 兼容。該種子可由用戶記憶,并允許用戶利用種子恢復(fù)錢包中的所有值。
Electrum錢包的優(yōu)勢在于:
(1)速度非???,占用空間少。采用SPV技術(shù),與處理比特幣系統(tǒng)最復(fù)雜部分的高性能服務(wù)器一起使用,只需下載區(qū)塊鏈的一部分。
(2)支持HD技術(shù),能有效管理多個私鑰。所以Elec‐trum 是低資源使用的錢包。但Electrum 也包含了SPV和HD錢包的缺陷:
①不能有效地保護自己的私鑰、交易、本地區(qū)塊頭,操作系統(tǒng)可以輕易竊取他們的隱私信息。
②使用需連接SPV查詢服務(wù)器,服務(wù)器可將用戶的支付歷史聯(lián)系記錄用戶的IP地址。
Electrum安全性低。如文獻[19]中,通過離線暴力破解了Electrum 錢包。作者使用欺騙引擎(Cheat Engine)提出關(guān)鍵字,并嘗試單詞列表中12 個種子密碼可能的組合,利用觸發(fā)器從提取的數(shù)據(jù)集中創(chuàng)建可能的組合,最后用多個虛擬機加速離線蠻力攻擊,成功地破解了Electrum 錢包。一旦找到密碼,就可以恢復(fù)錢包中包含的所有比特幣。即使從未出現(xiàn)過對比特幣錢包的訪問,這種恢復(fù)也是可能的,因此,Electrum 錢包的安全性存在問題,如何提高安全性,需要進一步的研究。
3.1.2 軟件錢包總結(jié)
軟件錢包無論全節(jié)點錢包Bitcoin core 還是輕節(jié)點Electrum 等其他錢包,都將密鑰存儲在本地可訪問文件中,有幾個優(yōu)點:(1)用戶沒有額外的認知負擔,只有軟件才能訪問文件。(2)密鑰的大小比較小,可將無數(shù)的密鑰存儲在磁盤上。(3)軟件可自動生成密鑰并創(chuàng)建交易,無需額外的輸入或操作。
但同時軟件錢包還會產(chǎn)生幾個威脅[20]:任何可以訪問用戶應(yīng)用程序文件夾的應(yīng)用程序都可以讀取存儲私有密匙的文件。惡意軟件作者可能會利用這種管理方法,訪問本地文件會導(dǎo)致對手能立即訪問受害者的資金。2011年,Symantec發(fā)現(xiàn)了第一個竊取私人密鑰的惡意軟件[21],隨后又發(fā)現(xiàn)了許多類似的惡意軟件。此外,錢包用戶可能會無意地共享本地存儲的文件(如通過共享網(wǎng)絡(luò),離線備份或共享網(wǎng)絡(luò)驅(qū)動器)或不小心刪除文件導(dǎo)致資產(chǎn)丟失。
某些軟件錢包允許用用戶選擇的密碼或口令對本地存儲的錢包文件進行加密。但有密碼保護的錢包只針對底層存儲設(shè)備的物理盜竊,如文件需密碼的強力破解才會被盜[20]。但若合理地假設(shè)存在一個擊鍵記錄模塊,則有密碼保護的錢包與沒有加密的錢包只是細微的區(qū)別。有密碼保護的錢包多了可恢復(fù)性和可用性,減輕了物理盜竊。但若忘記密碼,同樣失去錢包的余額,因沒有恢復(fù)的機制。且用戶必須在進行新交易時輸入密碼解鎖錢包,有密碼保護的錢包可能會誤導(dǎo)用戶以為密碼本身提供進入資金的途徑,不管儲存錢包設(shè)備在哪,這與基于網(wǎng)絡(luò)的網(wǎng)上銀行的傳統(tǒng)思維模式是一致的,但實際用戶無法通過簡單地輸入加密密碼在新設(shè)備上存取資金,除非錢包文件也轉(zhuǎn)移到新設(shè)備。
綜上,軟件錢包將私鑰儲存在本地設(shè)備,錢包始終受到來自網(wǎng)絡(luò)的安全威脅,且錢包用戶易因個人操作導(dǎo)致資產(chǎn)丟失。針對以上問題,開發(fā)者提出硬件錢包和托管錢包技術(shù)。
為了進一步保護比特幣私鑰免受基于惡意軟件的威脅,將私鑰離線存儲在某種形式的移動媒體上,比如USB盤,這類保護技術(shù)稱為硬件錢包技術(shù)。硬件錢包解決了軟件錢包面臨的網(wǎng)絡(luò)攻擊問題,且可使用傳統(tǒng)的物理安全技術(shù)(如,將驅(qū)動器存儲在防火保險箱中)進一步提高安全性。硬件錢包的主要特點如下:
(1)安全性高
私鑰離線產(chǎn)生,與網(wǎng)絡(luò)隔離,且永遠不會離開錢包[13],避免了惡意軟件攻擊,且傳統(tǒng)物理手段可提高安全性,是較安全的私鑰儲存方式。
(2)便攜性差
錢包需與比特幣網(wǎng)絡(luò)連接的設(shè)備組合使用,如用戶電腦、智能手機等。且設(shè)備連接到比特幣網(wǎng)絡(luò)發(fā)送交易,但不能簽署交易。當交易發(fā)生時,硬件錢包對其進行簽名并將其發(fā)送回設(shè)備,設(shè)備再將簽名后的交易廣播到比特幣網(wǎng)絡(luò)中,過程較繁瑣,速度較慢。具體交易如圖10 所示。離線存儲使軟件無法立即使用錢包,除非附近有離線存儲媒體,否則用戶無法直接花費貨幣。如較流行的TREZOR 硬件錢包[22],交易如圖11 所示,每次都需USB 連接電腦配合網(wǎng)頁或是客戶端使用,操作繁瑣,存在黑客攻擊的風險。
圖10 硬件錢包交易過程
圖11 TREZOR交易過程
為解決硬件錢包便攜性問題,文獻[8]中,Bamert 等提出BlueWallet,該錢包系統(tǒng)通過使用藍牙與創(chuàng)建無簽名交易的實體進行通信,能夠構(gòu)建一個具有低功耗的設(shè)備,圖12 是藍牙錢包系統(tǒng)概述圖。BlueWallet簽署比特幣交易,授權(quán)比特幣的轉(zhuǎn)移,無需連接到比特幣網(wǎng)絡(luò)。錢包允許在簽名之前獨立檢查事物細節(jié),因而可直接作為電子錢包和銷售點結(jié)合使用,成為現(xiàn)金和信用卡的替代品。BlueWallet 最大程度簡化硬件錢包的鏈接流程,提高了便攜性,通訊速度快,且避免了黑客攻擊風險。但由于交易是由不受信任的一方創(chuàng)建的,必須在Blue‐Wallet 中實現(xiàn)額外的安全措施,以盡量減少用戶所招致的風險,文獻中并沒有提出解決方案。
硬件錢包雖然永不觸網(wǎng),能夠杜絕來自網(wǎng)絡(luò)的攻擊,保證敏感信息的安全。但是在交易時始終需要中間設(shè)備進行鏈接,不夠便攜,且在生成和顯示錢包地址[23]時,攻擊者可通過中間人攻擊將加密貨幣轉(zhuǎn)移到一個虛假地址。即使是BlueWallet,也不能抵抗中間人攻擊。因此,研究如何抵抗中間人攻擊和如何提高便攜性是硬件錢包的主要發(fā)展方向。
軟件錢包和硬件錢包都存在用戶因個人保管問題導(dǎo)致資產(chǎn)丟失的風險,托管錢包的出現(xiàn)解決了這個難題。所謂托管錢包[20],是指錢包由三方服務(wù)器(web 服務(wù))進行保管,用戶不用自己控制私鑰,私鑰被存儲在第三方的服務(wù)器中,意味著用戶對第三方服務(wù)器的高度信任。錢包web 服務(wù)通過標準的web 身份驗證機制(如密碼或雙因素身份驗證)為用戶提供對事務(wù)性功能的訪問,用戶使用比特幣只需訪問第三方,與普通的服務(wù)器一樣,需輸入口令和驗證碼,在得到身份驗證后向服務(wù)器發(fā)送請求。
錢包優(yōu)勢在于:貨幣可隨時提取,便攜性高;允許以法定貨幣買賣比特幣的貨幣交換服務(wù);且用戶不用擔心忘記私鑰或助記詞,降低了資產(chǎn)因個人事務(wù)丟失的風險。托管錢包安全性較低,原因在于:
(1)外部網(wǎng)絡(luò)攻擊。服務(wù)器因持有大量比特幣易成為攻擊點,造成單點故障。目前已經(jīng)出現(xiàn)了許多攻擊托管錢包的事件,造成了大量的比特幣的損失[24-25]。Mt.Gox 的崩潰[26]就是失敗的一個例子。公司丟失了65 萬比特幣,Mt Gox破產(chǎn)了,用戶無法收回他們的錢。
(2)內(nèi)部人員攻擊。錢包不能防止第三方服務(wù)器的欺騙,第三方可攜款潛逃,或?qū)ν庑Q被黑客攻破。
針對(1),一種應(yīng)對盜竊的措施是托管錢包只將一小部分資金放在網(wǎng)上(稱為熱儲存),而將大部分資金儲存在網(wǎng)下的冷庫中。但這樣做的缺點是,如果熱存儲量耗盡,會導(dǎo)致用戶事務(wù)延遲。因此,如何提高托管錢包的安全性值得研究。
針對上述的軟件錢包、硬件錢包和托管錢包的安全缺陷,研究者提出門限錢包技術(shù)。軟件錢包、硬件錢包和托管錢包的私鑰都集中儲存在一個位置,易造成單點安全風險。而門限錢包技術(shù)是將密鑰進行分割,簽名必須由超過門限閾值的一組計算機授權(quán)。具體來說,方案將秘密分成了n 個部分,而每個部分由一個參與者保管,t 個或多于t 個的參與者可以重構(gòu)秘密,而少于t 個的參與者無法得到關(guān)于秘密的任何信息,這種方案被稱為(t,n)秘密分割門限方案,t就是閾值。具體如圖13所示。
在圖13 中,將私鑰在各參與者間共享,任意一個參與者不能獲得有關(guān)私鑰的任何信息,從而能夠有效避免單點故障問題。除非攻擊多于t 個參與者并成功獲得其秘密份額,否則不能獲得完整的私鑰。
圖13 秘密分割重構(gòu)圖
門限方案大多基于Shamir 秘密分割思想實現(xiàn),Shamir采用拉格朗日插值多項式[27],具體如下:(1)可信的第三方隨機選擇t-1次多項式方程為:f(x)=a0+a1x+a2x2+…+at-1xt-1mod q其中ai∈Z(q),i=1,2,…,t-1。
Shamir門限方案只能做加法運算,乘法和求逆運算將增加多項式的階。但比特幣系統(tǒng)使用ECDSA 密鑰,若想采用門限方案來保護錢包賬戶的安全,唯一方法是使用ECDSA 門限簽名算法,該方法需要用到乘法和求逆運算。比特幣雖有一個內(nèi)置的“多簽名”功能來進行分割控制,使用這種功能會嚴重損害參與者的機密性和匿名性,最終導(dǎo)致ECDSA門限簽名算法使用較弱定義。如文獻[28]中,雖然t 個參與者就可以重構(gòu)密碼,但要求n ≥2t-1才能完成簽名,實現(xiàn)起來有一定難度。為解決這個問題,Gennaro 提出了一種高效、優(yōu)化的閾值DSA算法[29],是第一個通用的閾值DSA 方案,只需要n=t-1就能完成簽名。該方案是唯一一個完全兼容比特幣的方案,而且它的效率足夠高,可以成為任何需要閾值簽名方案的用例的真正候選方案。
前面的門限秘密共享系統(tǒng)將信息分發(fā)到一組服務(wù)器上,但接下來的問題是用戶如何對這些服務(wù)器進行身份驗證。在所有服務(wù)器上重用相同的密碼只會增加密碼的安全漏洞,而讓每個服務(wù)器記住不同的強密碼是不現(xiàn)實的。
為了解決這個問題,Bagherzandi 等人首次提出了密鑰保護秘密分享(Password-Protected Secret Sharing,PPSS)方案[30],PPSS 是一種線上門限方案。文獻[30]中,PPSS 解決方案在初始化和重構(gòu)期間假定用戶和每個服務(wù)器之間存在經(jīng)過PKI 身份驗證的通道。在初始化階段,秘密與密碼以及一些服務(wù)器信息一起處理,以便在n 個獨立的服務(wù)器之間分發(fā)秘密,最后,每個服務(wù)器上只存儲公共信息。在重構(gòu)階段,用戶可以僅使用自己的密碼與任意t+1個誠實服務(wù)器進行交互,就能恢復(fù)自己的秘密。如果公共信息被更改,那么密碼的知識就足以檢測到它。
PPSS協(xié)議[31-32]滿足下面兩個性質(zhì):
(1)用戶可以使用與初始化階段相同的密碼執(zhí)行重構(gòu)協(xié)議,從而檢索數(shù)據(jù),并且只要至少有t+1個可靠的服務(wù)器可用,就保證能夠成功。
(2)攻擊者即使控制了多達t 臺服務(wù)器,除了使用另一臺服務(wù)器進行在線字典攻擊外,也無法了解有關(guān)該秘密的任何信息。
性質(zhì)(1)保證了即使對手入侵所有服務(wù)器,并提供一致但虛假的公共信息,也不能讓用戶重構(gòu)和接受與用戶最初存儲的秘密不同的秘密。除此之外,只要用戶不中斷與至少t+1誠實服務(wù)器的通信,性質(zhì)(2)就能保證秘密的恢復(fù)[33]。
PPSS 方案很快吸引了研究者們的注意。但大多PPSS 方案都采用證明協(xié)議防止分發(fā)者或成員間的欺騙行為,而證明協(xié)議計算量大,使PPSS 方案算法較復(fù)雜,在通信上耗費巨大。為此,Jarecki 等人在文獻[34]中提出的PPSS 方案,在輪通信中是最優(yōu)的。而Jarecki 等人在文獻[31]中就文獻[34]提出的方案進行了改進,不僅降低了計算成本,還在保持最佳輪通信的基礎(chǔ)上,進一步降低了通信上面的耗費。Abdalla 等人在文獻[33]中僅通過與每個服務(wù)器進行一輪通信就有效地實現(xiàn)了健壯性,還避免了任何復(fù)雜的零知識證明。這是因為他們的方案不需要像文獻[34]中那樣,在每個服務(wù)器的單獨計算中區(qū)分正確和錯誤的共享,與文獻[31]中給出的零知識證明后一種解決方案相比,其方案在秘密重構(gòu)過程中只需要在最后進行一次全局檢查,大大降低了通信成本。
綜上所述,門限方案對于錢包賬戶的保護的重要性已經(jīng)引起了研究者的廣泛關(guān)注。門限方案用于賬戶保護時需要兼容ECDSA 算法,但現(xiàn)有的門限方案普遍存在算法復(fù)雜度太高,擴展性差的特點。如何解決這個問題是今后門限方案發(fā)展需要攻克的難題。而PPSS方案是一種線上的門限錢包方案,是在線存儲有價值的秘密的理想方案,是未來研究的重點方向。
區(qū)塊鏈錢包按私鑰產(chǎn)生方式分為硬件錢包、軟件錢包、托管錢包和門限錢包。本文從私鑰存儲方式、錢包的優(yōu)缺點、實用性等方面對各類區(qū)塊鏈錢包進行分析總結(jié)。表2是各類錢包比較表。
(1)硬件錢包是專為儲存私鑰和進行支付的硬件設(shè)備,其特點如下:優(yōu)點,安全性高,私鑰離線產(chǎn)生,且永不觸網(wǎng),杜絕了因網(wǎng)絡(luò)攻擊造成的貨幣丟失。缺點,便攜性差,每次交易需與區(qū)塊鏈網(wǎng)絡(luò)連接的設(shè)備鏈接,交易過程繁瑣。硬件錢包適用于對安全性要求高且對便攜性無特殊要求的用戶。硬件錢包中主流有TREZOR 錢包、藍牙錢包等。TREZOR錢包并沒有解決硬件錢包便攜性差的問題,每次需使用USB 連接網(wǎng)頁或者客戶端進行交易,且存在黑客攻擊風險。而藍牙錢包一定程度上改善了TREZOR 錢包的問題,錢包引入藍牙技術(shù),使用藍牙通訊,提高了通訊速度且簡化鏈接過程。但藍牙技術(shù)引入增加了錢包的成本,且藍牙錢包只是改善了硬件錢包的便攜性,每次仍需鏈接設(shè)備交易,本質(zhì)上仍存在硬件錢包便攜性問題。且現(xiàn)有的硬件錢包對中間人攻擊并沒有好的解決方案。
表2 錢包比較表
(2)軟件錢包是桌面錢包,私鑰儲存在本地設(shè)備,其特點如下:優(yōu)點,個人完全控制自己的幣,不依賴于第三方;便攜性高,與區(qū)塊鏈網(wǎng)絡(luò)連接,可直接進行交易。缺點,因其私鑰在本地設(shè)備且與網(wǎng)絡(luò)連接,容易受到網(wǎng)絡(luò)攻擊造成資產(chǎn)損失;且普通用戶缺乏專業(yè)知識,可能因保管不當造成資產(chǎn)丟失。軟件錢包適用于要求便攜性的用戶。軟件錢包主要分為全節(jié)點錢包和輕錢包。全節(jié)點錢包如Bitcoin core 能直接進行完整的交易驗證,是軟件錢包中較安全的錢包,但每次使用會帶上大量的賬本數(shù)據(jù),且不能有效管理多個私鑰,僅適合高端用戶。HD 錢包能夠管理多個私鑰,只需備份主私鑰即可獲得子私鑰,方便審計,但錢包私鑰間具有固定關(guān)系,易遭到關(guān)聯(lián)攻擊。輕錢包是指采用SPV技術(shù)的錢包,SPV無需下載區(qū)塊鏈即可進行驗證交易,比全節(jié)點錢包交易速度快,但SPV不能確定交易最終是否進入主鏈,安全性低。主流的輕錢包——Electrum 錢包,采用了SPV 和HD 技術(shù),交易速度極快且能有效管理多個私鑰,但其也有SPV和HD的缺陷,不能有效保護自己的私鑰、事務(wù)和本地塊頭。
(3)托管錢包將私鑰存儲在錢包服務(wù)商的服務(wù)器上,其優(yōu)點在于能夠避免用戶因個人保管不當導(dǎo)致私鑰丟失或被盜竊。缺點是丟失了區(qū)塊鏈去中心化的特點,且大量貨幣儲存在同個地方,易成為攻擊對象,造成單點故障。托管錢包如Bixin、HyperPay 等適用于缺乏專業(yè)知識且個人保管存在問題的用戶。
(4)門限錢包將私鑰分割儲存,簽名必須由超過門限閾值的一組計算機授權(quán)。除非攻擊多于閾值的參與者并成功獲得他們的秘密份額,否則不能獲得關(guān)于私鑰的任何信息。錢包特點如下:優(yōu)點,基于門限特性,安全性高,能夠抵抗網(wǎng)絡(luò)攻擊。缺點,算法復(fù)雜度高且不可擴展,計算耗費大。
綜上所述,傳統(tǒng)的錢包方案,如硬件錢包、軟件錢包、托管錢包,都將私鑰集中存儲在一個地方,存在單點風險。而門限分割儲存私鑰使門限錢包成為了錢包保護最有效的方案。門限錢包中的線上錢包方案——PPSS方案,是在線存儲有價值的秘密的理想方案,是未來研究的重點方向。
為了研究錢包的安全性問題,區(qū)分了內(nèi)部人員攻擊和外部網(wǎng)絡(luò)攻擊進行討論。
如表3 所示,軟件錢包易因個人保管不當導(dǎo)致資產(chǎn)丟失,托管錢包存在服務(wù)商攜款潛逃的風險,所以兩款錢包既易遭受外部網(wǎng)絡(luò)攻擊,又不能抵抗內(nèi)部人員攻擊。硬件錢包由于不接觸網(wǎng)絡(luò),能夠抵抗外部網(wǎng)絡(luò)攻擊,對于內(nèi)部人員攻擊是物理安全——如,用戶可以將私人密鑰存儲在一個帶視頻監(jiān)控的上鎖的保險箱中。但硬件錢包、軟件錢包和托管錢包都存在共同的安全隱患,即其私鑰都集中儲存在一個位置,因此容易造成單點故障。門限錢包將私鑰分割共享,避免了單點風險,采用證明機制防止內(nèi)部人員欺騙,且門限特性能夠抵御外部網(wǎng)路攻擊,所以是最安全的方案。
表3 錢包安全分析表
此外,門限錢包技術(shù)可以協(xié)助傳統(tǒng)錢包方案的安全性。如在硬件錢包中引入門限技術(shù)來補充物理安全措施,用戶將密鑰分散存儲在不同的位置,而不是存儲在單個位置,即使單個位置被盜取,也不能獲取私鑰的任何信息,從而增加硬件錢包的安全性。同理,門限方案也可以用來保護軟件錢包不受外部攻擊者的攻擊。將軟件錢包的私鑰分開存儲在多個地方,攻擊者即使攻破本地設(shè)備也不能盜取貨幣,能提高軟件錢包的安全性。此外,門限技術(shù)也能用于托管錢包,存在兩種形式:第一,服務(wù)商自身提供門限技術(shù),即用戶將私鑰儲存在服務(wù)商處,服務(wù)商再將私鑰分割,這能抵抗外部網(wǎng)絡(luò)攻擊,但不能防止內(nèi)部人員攻擊。第二,用戶將私鑰分割存儲在多個服務(wù)商,每個服務(wù)商僅獲得子份額,能防止服務(wù)商攜款潛逃且能抵御網(wǎng)絡(luò)攻擊。
綜上,門限錢包安全性最高,且能與硬件錢包、軟件錢包及托管錢包結(jié)合使用,彌補其安全缺陷,提高安全性。門限錢包方案是今后研究錢包賬戶安全的主流方向。
表2 中,給出了4 類錢包的具體應(yīng)用。現(xiàn)有的錢包應(yīng)用中,軟件錢包和硬件錢包的發(fā)展較完善,市面上推出的大多應(yīng)用都屬于這兩類,如較流行的Electrum、TREZOR等;托管錢包的發(fā)展受到其中心化特點的一定影響;而門限錢包方案是較新提出的技術(shù),其研究方案不多,完善的方案更少,所以其應(yīng)用極少,有待發(fā)展。若用戶資產(chǎn)豐厚,建議選用安全性較高的硬件錢包,如TREZOR、藍牙錢包等;若用戶考慮便攜性問題,可選擇軟件錢包,如Electrum 等。若用戶擔心個人保管不當?shù)膯栴},可選用托管錢包類型,如Bixin、HyperPay等。
區(qū)塊鏈技術(shù)發(fā)展日新月異,錢包安全保護的重要性持續(xù)提升。但是,目前的錢包保護方案都存在一些缺陷,需要繼續(xù)進行研究,如:
(1)硬件錢包每次使用需要繁瑣的鏈接過程,便攜性差的問題阻礙了錢包的發(fā)展,且對于內(nèi)部人員攻擊是物理安全,如何同時提高硬件錢包的便攜性、安全性值得研究。
(2)軟件錢包直接與區(qū)塊鏈網(wǎng)絡(luò)連接,容易受到網(wǎng)絡(luò)的各種攻擊。軟件錢包全節(jié)點錢包交易過慢,而輕錢包采用SPV 技術(shù),交易快但安全性面臨威脅,如何保障軟件錢包交易速度的基礎(chǔ)上提高安全性需進一步研究。
(3)托管錢包需解決的問題是安全性,錢包既不能防止內(nèi)部人員欺騙,又不能抵御網(wǎng)絡(luò)攻擊,安全性面臨威脅。
(4)門限錢包雖是目前保護錢包賬戶安全有效的方法,但同時能兼容ECDSA 算法的方案大多存在計算量大的問題,每次分發(fā)需計算份額且需驗證正確性,而對于驗證過程大多文獻都采用復(fù)雜的零知識證明協(xié)議,如文獻[28-32]。所以研究如何簡化門限方案,減少計算上的耗費顯得十分重要。
基于上述問題,提出幾項未來的研究方向:
(1)針對硬件錢包便攜性和安全性,藍牙技術(shù)能簡化鏈接過程,門限技術(shù)將私鑰分割儲存,能提高錢包對于內(nèi)部攻擊的安全性,采用藍牙技術(shù)和門限技術(shù)相結(jié)合,提高便攜性的同時安全性也得到提高,是值得研究的方向。
(2)軟件錢包最大的問題是安全,引入門限思想,將軟件錢包的私鑰分割儲存,攻擊者即使攻擊用戶的電腦也不能獲取私鑰信息。對于輕錢包的SPV交易問題,主要是如何保護驗證過程,trustzone 是不錯的解決方案,敏感信息在trustzone部分進行,有效保護了SPV 的驗證過程,但很多設(shè)備部支持trustzone 技術(shù),若能代替trust‐zone 技術(shù)的方案,并將此方案與門限思想結(jié)合,能大大提高輕錢包的安全性。所以,門限思想是軟件錢包安全性方面具有意義的研究方向。
(3)托管錢包引入門限技術(shù),既能防止服務(wù)商攜款潛逃,又能抵御網(wǎng)絡(luò)攻擊。如何使門限技術(shù)與托管錢包相結(jié)合,值得研究。
(4)門限技術(shù)計算量大在于使用的驗證機制,大多方案采用復(fù)雜的零知識證明。需要研究在效率、性能、易用性方面更好的通信驗證機制,替代現(xiàn)有的零知識證明等匿名通信證明機制。
區(qū)塊鏈錢包系統(tǒng)是區(qū)塊鏈應(yīng)用中以數(shù)字貨幣為代表的數(shù)字資產(chǎn)所有權(quán)的唯一證明,是區(qū)塊鏈系統(tǒng)中至關(guān)重要的一個安全環(huán)節(jié)。硬件錢包將密鑰保存在離線的物理存儲介質(zhì)中,防止惡意軟件攻擊,但用戶必須保留一個額外的設(shè)備來進行事務(wù)處理。軟件錢包不需要額外設(shè)備就可進行交易,所以使用上比硬件錢包便捷,但硬件錢包相對于軟件錢包來說較安全。托管錢包利用高度可信的第三方服務(wù)器為用戶提供密鑰托管服務(wù),用戶不再需要自己保管錢包,這在本質(zhì)上破壞了區(qū)塊鏈的去中心化,同時第三方托管服務(wù)器也容易受到集中的安全攻擊。門限錢包將密鑰分散存儲在多個設(shè)備中,使用密鑰時需要多個設(shè)備共同參與,即使遭遇攻擊也不會泄露完整的密鑰,所以不會影響用戶的使用,但該方案算法復(fù)雜度高且不可擴展。密鑰保護秘密分享PPSS方案作為一種線上的門限錢包方案,是未來值得重點關(guān)注的研究方向。