# Keystone 硬件钱包產品設計的五大原則

By [Keystone 硬件錢包](https://paragraph.com/@keystonecn) · 2022-05-17

---

打造一款安全的硬件錢包，其實完美契合我們常提起的木桶原理：一個木桶能放多少水，不是取決於木桶最長的那塊木板，而是取決於木桶最短的那塊木板。我們在設計一款硬件錢包的時候，也很容易出現“只見樹木，不見樹林”的情況，將某幾個點的安全防護做到淋漓盡致，但是忽略了其他的一些防護點。從而在安全問題上，造成“單點失敗”——只需要一個小的漏洞就會使用戶損失所有的資產。為了用戶能真正擁有財務主權，就需要對用戶體驗和儲存過程進行全面的考慮，包括新用戶可能出現的一些人為操作錯誤。

本篇文章為大家闡述了 Keystone 硬件錢包的產品設計原則，從這些“原則”，大家可以看到我們是如何盡可能照顧到木桶的方方面面。

攻擊成本最大化
=======

在展開所有討論之前，大家先要接受一個可能有些殘酷的事實：這個世界上，沒有任何產品/系統，是無法被攻破的。對於黑客來說，一切攻擊只是一個投入產出比的問題。如果某一個產品/系統，攻擊成本低，收益高，那就是一個值得黑客投入的事情。這里稍微扯遠一些，因為數字貨幣天生具有不同程度的匿名性，並且跨境資產轉移非常方便，所以在不考慮攻擊成本的情況下，攻擊數字貨幣項目的變現成本是最低的（或者說，偷了數字貨幣不容易被追蹤且容易“銷贓”——相比之下，盜取某連鎖酒店的用戶信息，“銷贓變現”就麻煩很多了），這也是為什麽現在全球最頂尖的黑客都盯著交易所——所以，我們一直建議，只把滿足你交易需求的幣量放在交易所，千萬不要用交易所來存幣。存幣還是建議用硬件錢包——自管私鑰。

說回“對黑客來說一切只是投入產出比”的問題，硬件錢包的作用，簡單來說，就是在不顯著增加用戶使用成本的前提下，盡可能地提高黑客的攻擊成本。

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

這里 Keystone 為了進一步增加黑客的攻擊成本（也就是連那短暫的間接聯網機會也不留給黑客），我們通過二維碼及TF卡實現數據交互，從而盡可能地縮小攻擊面。並且，所有通過二維碼或者TF卡進出硬件錢包的數據，都是100%透明可審查的。

如果一款硬件錢包實現了更徹底的脫網（二維碼或者TF卡數據傳輸），另一個必須要考慮的攻擊面是供應鏈攻擊——給你送硬件錢包的快遞員可能會對你的錢包掉包。多數硬件錢包防護供應鏈攻擊的方式是在包裝上下功夫，比如貼上防拆貼紙，或者是用需要暴力拆開的包裝盒。這些手段能起到一定作用（Keystone也采用了相應的手段），但是從“攻擊成本最大化”的角度來說，這些其實對黑客來說只是“小菜一碟”。於是，我們引入了網絡驗證真機的環節，大大提升了黑客的攻擊成本。

如果大家關注海外比特幣社區的話，會注意到前段時間 Trezor 被 Kraken Lab 攻破以後，社區掀起了一場關於安全芯片的大討論。Ledger甚至發布了一篇言辭激烈的文章《不是所有芯片生而平等》（[Not All Chips are Born Equal](https://www.ledger.com/academy/security/not-all-chips-are-born-equal)），矛頭直指 Trezor 以及其他從 Trezor 分叉出來的硬件錢包，沒有使用安全芯片的情況下，會面臨極大的物理攻擊（旁路攻擊）的風險——黑客如果可以盜取到你的Trezor，大概只需要十五分鐘，配合幾十美元的攻擊設備，就能獲得你的私鑰。Keystone 為了防護物理攻擊（旁路攻擊），也使用了安全芯片，但是基於“攻擊成本最大化”的原則，Keystone 還引入了在成熟銀行產品上已經被廣泛使用的拆機自毀機制——一旦 Keystone 檢測到暴力拆機，就會自行擦除私鑰的敏感信息，並且變磚不可再使用。

信任最小化
=====

大家知道，傳統金融世界建立在中心化系統之上，高度依賴對單一個體（或若幹個體）的信任，一旦信任崩塌，會引起一系列的連鎖反應，從而造成大面積的金融海嘯。曾經的[安達信會計師事務所](https://zh.wikipedia.org/wiki/%E5%AE%89%E8%BE%BE%E4%BF%A1%E4%BC%9A%E8%AE%A1%E5%B8%88%E4%BA%8B%E5%8A%A1%E6%89%80)，就是中心化信任模型中的典型失敗案例。2009年，中本聰舉起了去中心化的大旗，開啟了一場影響全球的去中心化的運動，從此，“代碼即法律”的概念也開始進入人心——信任不再是虛無縹緲的東西，信任來自於可審計的代碼。

秉承中本聰先生對比特幣的設計初衷，我們作為一款數字貨幣硬件錢包，也踐行了信任最小化的設計原則。這里為什麽是“信任最小化”而不是“零信任”，因為如果要做到硬件錢包的“零信任”，唯一的解法就是用戶自行審核我們公布出來的開發資料（電路原理圖，驅動代碼，系統代碼，固件代碼等等），自行打造一台硬件錢包——自己畫電路板，焊電路板，燒錄驅動，燒錄系統代碼應用代碼還有安全芯片固件。這對於絕大多數用戶來說是不可能的。所以我們只能做到盡可能的信任最小化。

實現信任最小化的第一個點其實前面已經提到，就是使用二維碼和TF卡的數據通訊方式，做到出入硬件錢包的信息全部可審計，用戶不需要“信任”傳輸信息不可見的USB或者藍牙傳輸。

為進一步實現信任最小化，我們甚至[開源了安全芯片的固件代碼](https://github.com/KeystoneHQ/keystone-se-firmware)（行業中並無先例）。雖然安全芯片的芯片設計和底層源代碼無法開源（因為這些都是安全芯片廠商的知識產權），但是開源出來的安全芯片固件代碼，足以讓用戶驗證這些關鍵信息： 1）如何從隨機熵值生成助記詞，進而生成主私鑰 2）所有私鑰和公鑰的派生 3）私鑰簽名過程全部發生在安全芯片內 4）私鑰一旦生成，永遠不離開安全芯片

開源安全芯片固件後，依然有三個功能點用戶無法通過檢查代碼來驗證（這些功能都是安全芯片廠商在芯片設計或者底層代碼實現的）：

1）真隨機數生成（TRNG）

2）簽名算法比如 ECDSA

3）安全芯片如何防禦物理攻擊（旁路攻擊）

但是這三個功能點，用戶都可以通過別的方式進行驗證。 1）真隨機數生成。用戶可以自己運行FIPS 140-2來驗證其隨機性。Trezor曾經也做過[相關測試](https://github.com/trezor/rng-test/blob/master/stm32_rng_nc_1.rngtest)。另外，我們允許用戶自行投擲骰子來生成隨機熵值，進而生成助記詞和私鑰，從而“繞過”了真隨機數的功能，用戶無需信任安全芯片的真隨機數生成器。

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

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

我們在很早以前的一個線上 AMA 就分享過，開源不是一件一蹴而就的事情。開源前需要經過嚴格的代碼審核，開源後需要隨時與開發社區互動，才能在開源的同時盡可能縮小攻擊面。部分硬件錢包為了開源而開源，是一種不負責任的做法，“只是把肚皮翻給黑客看罷了”。目前，我們已經開源了硬件電路的設計，未來，我們會繼續開源系統層的代碼。

此外，我們支持了PSBT後，還將努力推動 [PSBT 多簽在社區內的普及](https://btcguide.github.io/)。PSBT多簽的意義在於，可以實現多款不同品牌的硬件錢包之間進行多簽。這樣能夠大大降低用戶對某一品牌的硬件錢包的信任。同時也避免了某一款硬件錢包的“單點失敗”。

人為失誤不可忽視
========

2019年底公布的[統計數據](https://bitcoinist.com/crypto-owners-in-us-have-risen-81-ytd/)顯示，相比於2018年，美國本土的比特幣擁有者增長了81%。目前全美有 3650 萬的數字貨幣持有者。越來越多的新人正在進入這個領域，這無形中放大了“人為失誤”在丟幣事件中的影響。目前的已知數據是，由於人為失誤，已經有至少 [400 萬枚比特幣](https://bitcoinist.com/estimated-4-million-bitcoin-lost-forever-by-users-forgetfulness/)將永遠無法使用。

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

Keystone 在這方面，做了如下改進：

1）Keystone 只提供了移動端的配套App，並未提供桌面端App。因為普通用戶並不擅長鑒別釣魚網站，很容易下載到被黑客篡改過的桌面端App，然後黑客可能會通過篡改收幣地址等手段，造成用戶的丟幣。但畢竟移動端App無法完成一些覆雜的交互，所以針對高級用戶，我們也適配了 [BlueWallet](https://support.keyst.one/v/traditional-chinese/di-san-fang-qian-bao/bi-te-bi-qian-bao/bluewallet)，[MetaMask](https://support.keyst.one/v/traditional-chinese/di-san-fang-qian-bao/eth-web3-qian-bao/metamask-eth) 等第三方錢包，從而滿足高級用戶的需求。

2）Keystone 配備了一塊4寸觸摸屏。這樣就能讓硬件錢包的體驗盡可能接近手機的體驗，從而盡可能避免用戶操作失誤的概率。此外，因為大屏的緣故，用戶可以看到更多的提示信息——比如可以方便地檢查找零地址是否被黑客替換；用戶還能獲得更好的輸入體驗——比如可以讓用戶兩次輸入密語（[passphrase](https://support.keyst.one/v/traditional-chinese/gao-ji-gong-neng/mi-yu-passphrase)），從而避免輸錯密語然後用錯誤的地址收幣。這些，都極大程度上避免了人為錯誤的可能行。 盲签问题也能够得到显著解决。

3）市售版本的 Keystone 只能安裝我們官方發布的固件升級包。現在市面上的大部分硬件錢包都支持用戶自行修改代碼，編譯代碼，然後對升級包進行簽名，並上傳到硬件錢包內。這樣給極客用戶帶來了極大的定制空間可以打造自己的硬件錢包，但同時也打開了很大的安全敞口：黑客可以主動接觸那些在網上提問的小白用戶，誘騙小白用戶安裝黑客篡改過的固件升級包（即使升級過程中會有提示但還是存在一定概率黑客欺騙成功），進而被盜幣。為了縮小這樣的風險敞口，市售版本的 Keystone 只允許用戶安裝官方簽名的固件升級包。

避免“單點失敗”
========

去中心化系統的核心价值之一，就是它不會因為一次“單點失敗”就導致系統全線崩潰。硬件錢包的核心設計原則同樣如此。就像文章開頭說的那樣，一個木桶能放多少水，取決於木桶最短的那塊木板。我們在設計 Keystone 時，從多個角度去规避“单点失败”的問題：

1）Keystone 支持分片助記詞。您可以[將助記詞拆分成三份](https://docs.google.com/document/d/1WMSj73dAz-RRwDSt-AnzVgjlh553DpaylNrQHXUTTH8/edit?disco=AAAAZYfnfMM)，輸入其中任意兩份即可恢覆錢包。此功能是基於 SaotoshiLabs 提出的 [SLIP39 Shmir’s Secret Sharing](https://github.com/satoshilabs/slips/blob/master/slip-0039.md) 協議進行設計。同時建議您將分片助記詞保存在三個不用的地方，避免有人一次性盜取三份助記詞。

2）我們支持使用可拆卸的 AAA 電池，因为大多数用户不了解如何安全地储存电池。大多數電子產品不是為長期存儲而設計的，但是硬件錢包的使用卻是長期的甚至需要終身使用。所以我們認為硬件錢包不應該依賴單一類型的電池，因為如果可充電鋰電池出現故障，AAA電池可能會變得至關重要。

3）對抗“單點失敗”的必殺技——多重簽名。如果您對比特币多重簽名了解不多，強烈建議您阅读[这个教程](https://btcguide.github.io/)。如果您需要用多签对您的以太坊或者其他 EVM 链的资产进行保护，请参考[这份教程](https://support.keyst.one/3rd-party-wallets/defi-dapp-with-keystone/gnosis-safe)。

互操作性至關重要
========

我們認為更準確地称呼“硬件钱包”的方式应该是“離線簽名器”。我們正在使 Keystone 與盡可能多的軟件錢包兼容。這樣做有幾個好處：

1）使盡可能多的軟件錢包兼容，從某種方面避免了“單點失敗”，如果一個軟件服務暂停了服务，用戶可以切換到另一個兼容的軟件錢包中繼續使用。

2）兼容更多的軟件錢包可以滿足不同的用戶需求。比如支持通过与 [Wasabi Wallet](https://support.keyst.one/v/traditional-chinese/di-san-fang-qian-bao/bi-te-bi-qian-bao/wasabi) 的整合实现比特币混币，与 MetaMask [桌面端](https://support.keyst.one/v/traditional-chinese/di-san-fang-qian-bao/eth-web3-qian-bao/metamask-eth)和[移动端](https://support.keyst.one/v/traditional-chinese/di-san-fang-qian-bao/eth-web3-qian-bao/metamask-yi-dong-duan)的整合实现对 Web3 的支持。并且，Keystone 兼容网页端的 DeFi 項目，例如 [Sushiswap](https://support.keyst.one/v/traditional-chinese/di-san-fang-qian-bao/qu-zhong-xin-hua-ying-yong-defi/sushiswap)。

3）這樣的策略可以讓我們團隊專注在最關鍵的環節——如何確保用戶安全地進行簽名。一個典型的例子就是 Keystone 可以對 DeFi 交易進行解析，確保用戶清楚地知道自己正在簽一筆什麽樣的交易。

我們非常讚同 [Andrew Hong 的可組合錢包](https://medium.com/coinmonks/1the-importance-of-composable-wallets-for-users-and-developers-accb2aadff49) 的想法。一個好的硬件錢包應該關注4個安全層面的問題：密鑰對的生成，錢包恢复，交易或信息的簽名，利用 ABI 做智能合約的交易解析。

寫在最後
----

除了以上提到的產品設計原則和改進點。還有一些我們特別期待的提升點：

1）拋棄所有的通用MCU，用安全芯片控制所有的輸入和輸出（攝像頭，鍵盤，屏幕等等），從而消除了通用MCU這個最大的攻擊面。這樣從安全芯片的角度，實現了“信任最小化”。

2）全開源安全芯片，這將把“信任最小化”提升到一個全新的高度。谷歌正在[做相關的研究和開發](https://www.infoq.cn/article/IGyp5wZUxeQuhCmjBHoq)。

開篇提到了“木桶原理”，把硬件錢包的安全性看成是一整個木桶，然後分析了木桶的短板和我們的產品設計原則，但如果我們從一個更高的視角來看“保護數字資產”這件事，其實硬件錢包只是這個大木桶的其中一塊板。這個大木桶的其他木板包括——如何安全存儲你的助記詞，如何保護你在互聯網上的隱私，當意外發生時讓如何你的親人可以安全繼承你的數字資產，等等等等。

從 Keystone 的角度來說，造出一款硬件錢包不是我們的使命，我們的使命是幫助用戶安全地保護數字資產。所以大木桶的其他這些木板（話題），我們未來會通過科普教育的方式來與大家一起交流提升。這也是我們的責任。歡迎大家通過推特 [@KeystoneCN](https://twitter.com/KeystoneCN) 給我們提意見，感謝大家！

---

*Originally published on [Keystone 硬件錢包](https://paragraph.com/@keystonecn/keystone)*
