從技術安全和人爲失誤這兩個維度探討硬件錢包安全性的 9 個提升點:全脫網、多簽名、安全芯片等。

撰文:劉力心,Cobo 硬件業務線負責人

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

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

  1. 技術安全。這一塊的安全,數字貨幣社區已經談論了很多年,包括如何防禦中間人攻擊,物理攻擊(旁路攻擊),供應鏈攻擊等,主要集中討論如何從技術的角度防禦這些攻擊手段。
  2. 第二塊不能不討論的即使人爲失誤。統計數據顯示,由於人爲失誤,已經有至少 400 萬枚比特幣將永遠無法被使用。如果我們關注一下比特幣的發展史,我們會看到很多改進(BIP)都是爲了避免人爲失誤。比如爲了避免管理過過多私鑰,HD 錢包被創造了出來;比如助記詞被創造出來,也是爲了用戶在保存主私鑰的過程中避免發生人爲失誤。

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

硬核丨九種方法教你如何安全使用硬件錢包

全脫網

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

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

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

安全芯片

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

如何驗證安全芯片?

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

安全芯片固件開源後,可以讓用戶驗證這些關鍵信息:

  1. 如何從隨機熵值生成助記詞,進而生成主私鑰
  2. 所有私鑰和公鑰的派生
  3. 私鑰簽名過程全部發生在安全芯片內
  4. 私鑰一旦生成,永遠不離開安全芯片

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

  1. 真隨機數生成(TRNG)
  2. 簽名算法比如 ECDSA
  3. 安全芯片如何防禦物理攻擊(旁路攻擊)

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

  1. 真隨機數生成。用戶可以自己運行 FIPS 140-2 來驗證其隨機性。Trezor 曾經也做過相關測試。另外,我們後面的產品更新中,會允許用戶自行投擲骰子來生成隨機熵值,進而生成助記詞和私鑰,從而「繞過」了真隨機數的功能,用戶無需信任安全芯片的真隨機數生成器。
  2. 簽名算法比如 ECDSA,這一部分的驗證,需要依賴一定的專業知識,我們可以提供安全芯片的開發板給感興趣的研究人員進行驗證並公佈相關結果。
  3. 安全芯片對物理攻擊(旁路攻擊)的防禦,我們可以從硬件錢包的攻擊歷史來看,雖然無法得到「安全芯片可以抵禦一切物理攻擊(旁路攻擊)」的結論,但是相比通用 MCU,安全芯片對物理攻擊(旁路攻擊)的防禦能力,是遠遠超出的。此外,研究人員也可以向我們申請安全芯片的開發板,用於驗證其對物理攻擊(旁路攻擊)的防禦能力。

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

PSBT 多籤

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

  1. 混幣。混幣可以幫助用戶更好的保護自己的隱私,不輕易被線上分析實現追蹤。
  2. 跨硬件錢包多籤。PSBT 相當於是統一了不同硬件錢包,和觀察錢包之間「溝通語言」。從而實現了不同硬件錢包之間的跨硬件多籤。這樣可以有效避免某一款硬件錢包的「單點失敗」帶來的安全風險。對未來的硬件錢包來說,支持 PSBT 將成爲必選項。

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

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

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

  1. 這樣的方式使得黑客能夠更低成本地造出一臺假的硬件錢包,然後銷售假錢包或者實施供應鏈攻擊,從而盜取用戶的數字資產。歷史上也確實發生過類似事件。
  2. 這樣的方式對用戶的技術能力要求極高,用戶需要同時具有硬件和軟件的研發能力,才能完成 DIY。

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

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

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

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

觸摸大屏

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

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

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

防禦不可信固件

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

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

模塊化電池

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

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

手機端配套 App

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

  1. 移動端的 App 都運行於沙盒環境內。App 之間不允許互相讀取數據。
  2. 移動端的產品默認打開系統全局加密,電腦端往往不是這樣。
  3. 移動端的用戶權限往往被強限制,不像電腦端,用戶甚至能通過命令行工具,繞過一些安全防護設置。

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

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

支持線下購買

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

寫在最後

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

  1. 拋棄所有 MCU 芯片,使用一顆安全芯片控制所有硬件錢包的輸入和輸出,包括但不限於鍵盤,屏幕,攝像頭,讀卡器,藍牙,USB 等等等等。因爲回顧硬件錢包的攻擊歷史,惡性的攻擊事件全部是圍繞着 MCU 來進行的。
  2. 全開源安全芯片。這將把安全芯片這個關鍵組件的透明度提升到一個前所未有的高度。很高興看到巨頭企業比如 Google 正在爲此努力。

感謝 Matt Odell 和 Lazy Ninja 爲此文提出的寶貴意見!