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 正在为此努力。
郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。
郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。