硬體錢包安全嗎?使用硬體錢包安全的九種方法

買賣虛擬貨幣

2019年底公佈的統計資料顯示,相比於2018年,美國本土的比特幣擁有者增長了81%。目前全美有3650萬的數字貨幣持有者。越來越多的人擁有數字貨幣,這使得「安全存幣」這個話題變得尤為重要。

當我們談起安全存幣,一個繞不開的話題就是硬體錢包。硬體錢包的安全性大概可以分成兩塊:

技術安全。這一塊的安全,數字貨幣社羣已經談論了很多年,包括如何防禦中間人攻擊,物理攻擊(旁路攻擊),供應鏈攻擊等,主要集中討論如何從技術的角度防禦這些攻擊手段。

第二塊不能不討論的即使人為失誤。統計資料顯示,由於人為失誤,已經有至少 400 萬枚比特幣將永遠無法被使用。如果我們關注一下比特幣的發展史,我們會看到很多改進(BIP)都是為了避免人為失誤。比如為了避免管理過過多私鑰,HD錢包被創造了出來;比如助記詞被創造出來,也是為了使用者在儲存主私鑰的過程中避免發生人為失誤。

這篇文章將會從技術安全和人為失誤這兩個維度討論硬體錢包安全性的9大提升點。

全脫網

硬體錢包起到的第一個作用,是讓你的私鑰實現「脫網」。如果你的私鑰實現了「脫網」,那駭客對硬體錢包進行遠端攻擊的可能性就被大大降低。但是這裡「脫網」為什麼要打引號,因為硬體錢包之間,「脫網」的程度是不一樣的。具體來說,大多數硬體錢包,在不使用的狀態下,是完全脫網的。但是一旦進入使用狀態,多數硬體錢包會透過 USB 線,或者藍芽,連線到一臺聯網的手機或者電腦。雖然連線時間非常有限,但是此時的「間接聯網」的狀態是非常危險的。

所以,「脫網」其實是個相對的概念。「脫網」的關鍵是在於配套 App (如 Ledger 的 Ledger Live)與硬體錢包之間的通訊。目前通訊方式主要有四種——USB,藍芽,二維碼和 TF 卡。二維碼和TF卡是更好的方式,因為其建立的連結不是持續通訊連線,並且所有通訊資料透明可審查。從而將攻擊面減到了最小。

二維碼和TF卡通訊的另一個好處就是,讓硬體錢包跟第三方錢包的適配變得非常容易。因為兩邊只要遵循相同的資料格式即可,不用考慮USB和藍芽的適配性問題。這也讓硬體錢包可以單純扮演一個「簽名者」的角色。

安全晶片

海外社羣對硬體錢包是否應該使用安全晶片一直爭論不休。正方認為不用安全晶片無法抵禦物理攻擊(旁路攻擊),反方認為安全晶片是個黑盒子,無法信任。但是,安全晶片其實並不完全是個黑盒子,安全晶片一定程度上來說也是可驗證的。

如何驗證安全晶片?

社羣多年來似乎已經對安全晶片形成了一個共識——安全晶片是不可開源的。但其實這取決於硬體錢包廠商跟安全晶片廠商之間的談判能力。將安全晶片的晶片設計和底層程式碼進行開源需要高昂的成本,但是將安全晶片的韌體程式碼開源,完全是可以辦到的。

安全晶片韌體開源後,可以讓使用者驗證這些關鍵資訊:

如何從隨機熵值生成助記詞,進而生成主私鑰

所有私鑰和公鑰的派生

私鑰簽名過程全部發生在安全晶片內

私鑰一旦生成,永遠不離開安全晶片

但依然有三個功能點使用者無法透過檢查程式碼來驗證(這些功能都是安全晶片廠商在晶片設計或者底層程式碼實現的):

真隨機數生成(TRNG)

簽名演算法比如 ECDSA

安全晶片如何防禦物理攻擊(旁路攻擊)

但是這三個功能點,使用者都可以透過別的方式進行驗證。

真隨機數生成。使用者可以自己執行 FIPS 140-2 來驗證其隨機性。Trezor 曾經也做過相關測試。另外,我們後面的產品更新中,會允許使用者自行投擲骰子來生成隨機熵值,進而生成助記詞和私鑰,從而「繞過」了真隨機數的功能,使用者無需信任安全晶片的真隨機數生成器。

簽名演算法比如 ECDSA,這一部分的驗證,需要依賴一定的專業知識,我們可以提供安全晶片的開發板給感興趣的研究人員進行驗證並公佈相關結果。

安全晶片對物理攻擊(旁路攻擊)的防禦,我們可以從硬體錢包的攻擊歷史來看,雖然無法得到「安全晶片可以抵禦一切物理攻擊(旁路攻擊)」的結論,但是相比通用 MCU,安全晶片對物理攻擊(旁路攻擊)的防禦能力,是遠遠超出的。此外,研究人員也可以向我們申請安全晶片的開發板,用於驗證其對物理攻擊(旁路攻擊)的防禦能力。

綜上所述,如果安全晶片實現韌體開源,所有的關鍵操作和安全性都可以得到驗證或證明。

PSBT 多籤

Partially Signed Bitcoin Transaction (PSBT)來自於 BIP 174.從 BIP 174 的官方文件我們可以看到 PSBT 主要有兩個使用場景:

混幣。混幣可以幫助使用者更好的保護自己的隱私,不輕易被線上分析實現追蹤。

跨硬體錢包多籤。PSBT 相當於是統一了不同硬體錢包,和觀察錢包之間「溝通語言」。從而實現了不同硬體錢包之間的跨硬體多籤。這樣可以有效避免某一款硬體錢包的「單點失敗」帶來的安全風險。對未來的硬體錢包來說,支援 PSBT 將成為必選項。

DIY 硬體錢包 (BYOH - Build your own hardware)

DIY 硬體錢包是很多極客玩家將對硬體錢包廠商的信任最小化的終極方式。

過往的硬體錢包允許使用者 DIY 的方式主要是,開放硬體電路設計以及所有程式碼,從而方便使用者從零搭建一臺硬體錢包。但是這種說法會帶來兩個問題:

這樣的方式使得駭客能夠更低成本地造出一臺假的硬體錢包,然後銷售假錢包或者實施供應鏈攻擊,從而盜取使用者的數字資產。歷史上也確實發生過類似事件。

這樣的方式對使用者的技術能力要求極高,使用者需要同時具有硬體和軟體的研發能力,才能完成 DIY。

一個更好的方案是銷售安全晶片開發板給使用者,這樣一是避免了駭客透過錢包造假攻擊使用者,二是隻需要軟體開發的能力,使用者就可以用安全晶片開發板打造自己的硬體錢包。

以上四個提升點主要是從技術安全的角度進行闡述。海外市場最近大火的硬體錢包 ColdCard 在 TF 卡資料傳輸和 PSBT 支援這兩方面已經帶領硬體錢包行業往前邁進了一大步。

但遺憾的是,硬體錢包誕生的這些年來,硬體錢包廠商往往將大多數注意力放在了技術層面的安全。比如程式碼的魯棒性,比如安全晶片的使用。整個行業對硬體錢包「使用者體驗」的關注非常少。但往往正是使用者體驗的短板,導致了人為失誤進而造成了丟幣。今天,硬體錢包已經不再是極客使用者才會使用的產品,普通使用者也開始使用硬體錢包,我們在設計硬體錢包時,也必須把人為失誤也納入考量,打造更好的使用者體驗,從而避免使用者丟幣。

在深入討論人為失誤之前,需要強調一下「人為失誤」是一個相對的概念,它往往無法同時適用於普通使用者和專業使用者。有一些針對「人為失誤」的產品改進,對專業使用者來說,可能會降低錢包產品的可定製性。舉個最簡單的例子來說,針對專業使用者的錢包,會允許使用者手動選擇 UTXO,但是為了降低產品複雜度,避免普通使用者的人為失誤,手動選擇 UTXO 這樣的功能就應該被摒棄。下面詳細展開硬體錢包要如何改進才能降低人為失誤的概率從而避免丟幣。

觸控大屏

相信使用過目前主流硬體錢包的使用者都體會過小按鈕和小螢幕的糟糕體驗。這種體驗上的短板放大了使用者發生人為失誤的可能性。我們從輸入密語(Passphrase)這個點來看,因為小屏的顯示效果差,字元輸入的體驗也很差,所以現有的硬體錢包都是讓使用者只輸入一遍密語(Passphrase),這樣使用者一旦輸入錯誤,可能就會把幣轉到錯誤的地址上從而丟幣。有了大螢幕,輸入體驗更好了,展現資訊更全之後,系統可以要求使用者輸入兩遍密語(Passphrase),兩遍輸入匹配,則進入隱藏錢包,輸入不匹配,系統報錯。從而避免了人為失誤。

此外,大觸屏也能避免一些攻擊面。比如。當你收幣的時候,可以直接向對方展示你的硬體錢包上的收幣地址二維碼。因為配套 App 聯網,它的收幣地址易於發生攻擊,所以收取大量數字貨幣時,更安全的當時是直接使用硬體錢包端的收幣地址。

以上這些改進對於專業使用者來說可能不會構成威脅,但是正如前文提到的,越來越多的使用者擁有數字貨幣,硬體錢包不再是僅僅為專業使用者服務,更需要考慮普通使用者的使用場景。

防禦不可信韌體

程式碼開源對去中心化應用和產品來說異常重要,但是程式碼開源往往也會帶來新的攻擊面。目前部分硬體錢包支援使用者自行修改開原始碼,並編譯成升級包,然後燒錄到硬體錢包內。這給極客使用者更大的空間可以自行修改硬體錢包,但同樣也為駭客攻擊敞開了大門:駭客可以主動接觸那些在網上提問的小白使用者,誘騙小白使用者安裝駭客篡改過的韌體升級包(即使升級過程中會有提示但還是存在一定概率駭客欺騙成功),進而被盜幣。

為了縮小這樣的風險敞口,任何市售版本的硬體錢包應該只允許使用者安裝官方簽名的韌體升級包。這樣做並不代表一定會傷害極客使用者的使用者體驗。可以同時推出極客版本的產品,允許使用者自行定製韌體上傳,甚至產品出廠時不帶可工作的韌體,使用者必須自行燒錄才可以正常使用產品,這樣就避免了普通使用者誤購買了極客版本的產品從而增加自己的安全風險,更進一步,允許使用者替換硬體錢包內驗證升級包的公鑰,從而實現使用者手裡的硬體錢包,只認可使用者自行簽名的韌體升級包。

模組化電池

由於我們日常使用的電子產品(尤其是手機)已經成為了「快消品」,使用者通常是 1-2 年會更替一下產品,所以電池使用壽命一直不算太大的問題。電池廠商一般也根據 1-2 年的使用壽命來設計電池。但是硬體錢包的使用場景跟手機大大不同,往往是使用者可能要存放數年甚至十數年之久,甚至有的使用者,將硬體錢包封存在保險箱或者銀行保險櫃之後,可能數月甚至數年才會去操作一次硬體錢包。

在這種場景下,避免電池漏液損壞硬體錢包本體,模組化的可拆卸電池就成為了必須。同時,吐過支援普通乾電池供電,能夠避免使用者數月或者數年沒有操作硬體錢包導致電池失靈而在關鍵時刻無法轉幣的尷尬。

手機端配套 App

目前主流的硬體錢包主要使用電腦端 App 作為配套 App,比如 Ledger Live 或者 Trezor 的網頁端應用。但是相比於手機端 App,電腦端 App 會帶來更大的風險敞口:

移動端的 App 都執行於沙盒環境內。App 之間不允許互相讀取資料。

移動端的產品預設開啟系統全域性加密,電腦端往往不是這樣。

移動端的使用者許可權往往被強限制,不像電腦端,使用者甚至能透過命令列工具,繞過一些安全防護設定。

除了以上三點,此外,普通使用者也不善於辨別釣魚連結。所以,下載電腦端 App 時,普通使用者更容易遭受釣魚攻擊,下載到錯誤的配套 App 軟體,從而造成丟幣。

《精通比特幣》的作者 Andreas Antonopolous 也曾 建議 大眾使用手機端錢包而不是電腦端錢包。

支援線下購買

大多數普通使用者並不擅長保護他們的線上隱私。線上隱私洩露會導致使用者 遭受定向威脅攻擊(APT 攻擊) 甚至五美元扳手攻擊(5$ Wrench Attack)。如果我們把這一點也作為攻擊面之一來考慮的話,硬體錢包最好能夠支援使用者線上下渠道透過現金購買。

打造一款安全的硬體錢包並非易事。可以理解成這是一場矛和盾的對決。除了上述的 9 個硬體錢包改進點,另外還有 2 個點我們非常期待:

拋棄所有 MCU 晶片,使用一顆安全晶片控制所有硬體錢包的輸入和輸出,包括但不限於鍵盤,螢幕,攝像頭,讀卡器,藍芽,USB 等等等等。因為回顧硬體錢包的攻擊歷史,惡性的攻擊事件全部是圍繞著 MCU 來進行的。

全開源安全晶片。這將把安全晶片這個關鍵元件的透明度提升到一個前所未有的高度。很高興看到巨頭企業比如 Google 正在為此努力。

免責聲明:

  1. 本文版權歸原作者所有,僅代表作者本人觀點,不代表鏈報觀點或立場。
  2. 如發現文章、圖片等侵權行爲,侵權責任將由作者本人承擔。
  3. 鏈報僅提供相關項目信息,不構成任何投資建議

推荐阅读

;