加密货币和区块链应用对普通用户来说,其可用的最大挑战之一无疑是安全性:我们如何防止用户的资金丢失或被盗?丢失和被盗是不可忽视的问题,致使无辜的区块链用户损失数千美元,甚至在某些情况下丢失其大部分净资产。
多年来,有许多解决方案被提出:纸钱包、硬件钱包和多签钱包 (我个人一度的最爱)。实际上这些方案确实显著改善了安全性,但都存在各种缺陷:防盗和防丢保护功能可能远远低于实际需要,或是操作的不便利导致极低的采用率。但是最近出现了一个更好的替代方案:一种称为“社交恢复式钱包” (social recovery wallet) 的新型智能合约钱包。与以前的选择相比,这类钱包可以提供更高的安全性和更好的可用性,但距离轻松且广泛的部署,还有一段路要走。这篇文章将介绍什么是社交恢复式钱包、其重要性何在,以及我们应该如何在整个生态系统中对其进行更广泛的采用。
钱包安全性问题非同小可
可以说从区块链行业发轫之初,钱包安全性问题就一直困扰着生态系统。在2011年,当时比特币几乎是当时唯一的加密货币,丢失和被盗事件频发。在建立以太坊之前,我作为 Bitcoin Magazine 的联合创始人和作者撰写了一篇文章详细介绍当时加密货币中发生的攻击、损失和盗窃事件。
这是其中一个例子:
这位用户丢失了 2.07 个 BTC,当时价值 300 美元,现在已经超过 7 万美元。还有一个例子:
按照现在的价值来算,其价值近一百万美元。但盗窃并不是唯一的问题,还有私钥丢失的例子。来看看 Stefan Thomas 的故事:
根据比特币生态系统的一份分析,每天可能有 1500 BTC 丢失,超过比特币用户交易手续费的十倍,随着时间推移丢失的比特币总量占其总供应量的 20%。这些故事和数字都指向同一个不可避免的事实:钱包安全性问题的重要性非同小可,不应该被低估。
我们很容易得出钱包安全性容易被低估的社会和心理原因:人们不希望在总是具有批判性的公众面前显得愚蠢或粗心,结果其资金往往容易被盗。而丢失资金就更是如此,因为普遍 (尽管在我看来非常不正确) 的看法是“要怪只能怪自己”。但现实是,包括区块链在内的数字技术,其目标在于使人们能更轻松地参与复杂事务,而无需付出极大的脑力劳动或是活在担心失误的恐惧中。如果一个生态系统解决丢失和被盗问题的方式仅仅是 12 个步骤的教程、不太安全的对策和不那么偶然的讽刺性的“对您的损失感到抱歉”的回应,其将很难被广泛采用。
因此,旨在降低资金丢失和被盗风险的方案开始被采用,这些方案不需要加密货币用户消耗过多精力和时间来维护个人资产安全性,并且对于整个行业来说也是非常有价值的。
光靠硬件钱包还不够
硬件钱包经常被宣扬为加密货币资产管理的最佳技术。硬件钱包是一种专用硬件设备,可以连接到用户的计算机或手机 (例如通过 USB),并且包含专用芯片,该芯片只能生成私钥和签署交易。用户能在计算机或手机上发起交易,并且必须在硬件钱包中确认后才能发送。私钥保留在硬件钱包中,因此,攻击计算机或手机中无法将资金洗劫一空。
硬件钱包是一个意义重大的进步,可以避免上述的 Java 聊天室案例,但硬件钱包也不是尽善尽美的。在我看来硬件钱包有两大问题:
供应链攻击:如果你购买了一个硬件钱包,就相当于你信任其生产过程中的许多参与者,包括设计钱包的公司、生产钱包的工厂以及运输过程中的经手人,他们可以调换钱包。硬件钱包可能会引来此类攻击:资金被盗的概率与被盗设备数量相关性非常高。值得称赞的是,诸如 Ledger 之类的硬件钱包生产商已经采取了许多保护措施来防范这些风险,但并不是万事大吉了。从根本上来说,硬件设备不像开源软件,无法进行审计。
单点故障:如果有人站在你的身后目睹你输入 PIN,然后偷走了你的硬件钱包,他们就能窃取你的资金。如果你丢失了你的硬件钱包,你也就丢失了你的资产,除非硬件钱包在初始设置时生成并输出备份,但正如我们看到的一样,仍然有不同的问题存在。
光靠助记词也不够
许多钱包 (无论是硬件还是软件) 都有一个初始设置过程,在此过程中会输出一些助记词短语,这是钱包根私钥的编码,形式是人类可读的 12-24 个单词。助记词短语如下:
vote dance type subject valley fall usage silk essay lunch endorse lunar obvious race ribbon key already arrow enable drama keen survey lesson cruel
如果你丢失了钱包但保留有助记词,则可以在设置新钱包恢复帐户时输入助记词,因为助记词包含根密钥,可以从中生成所有其他密钥。
助记词有助于防止丢失,但是对资金被盗的情况来说于事无补。更糟糕的是,如果你有标准的硬件钱包+助记符备份组合,那么无论是硬件钱包+ PIN 被盗或助记词备份被盗都会导致资金损失。此外,要保证保护好助记词并且不意外丢失本身就是一项的精神负担。
如果将短语五五分,然后将一半交由朋友保存,可以减轻盗窃的问题,但是 1) 几乎没有人真正推广这种行为;2) 存在安全问题,如果助记词很简短 (128位),那么一个死磕的攻击者,偷走一半之后可能会暴力寻找其余 264 种可能的组合来找到另一半,并且 3) 进一步增加了精神负担。
那我们需要的是什么?
我们需要的钱包设计要满足以下三个标准:
不存在单点故障:不存在会被窃取的事物,从而使攻击者可以获取您的资金,或者即使丢失了,也可以拒绝获取资金。
减轻精神负担:尽可能不要求用户学习陌生的新习惯或付出脑力,以始终遵循某些行为模式。
交易便捷:进行大多数正常活动不应该比常规钱包花费更多的精力 (例如 Status 和 Metamask 等等)
多签还不错!
早在2013年,解决这些问题的最佳技术是多重签名 (multisig)。你可以拥有一个配有三个密钥的钱包,需要其中任何两个密钥才能发送交易。
最初这项技术是在比特币生态中开发的,但是以太坊现在也有优秀的多签钱包 (例如 Gnosis Safe)。多签钱包在组织内部的应用十分成功,以太坊基金会使用 4-7 多签钱包来存储资金,以太坊生态中许多其他的组织也应用了多签钱包。
对于多签钱包来说,要替“个人”持有资金主要的挑战是:谁持有资金?如何批准交易?最常见的公式是“由用户持有的两个易于获取但独立的密钥 (例如笔记本和手机),而第三个密钥是更为安全且更难获取的备份,线下保存或是由朋友或者组织持有”。
这是相当安全的:任何单一设备丢失或被盗不会导致你无法使用资金。但是其安全性远非完美无缺,如果能窃取某人的笔记本电脑,那么窃取他们的手机通常来说也并不难。可用性也是一个挑战,因为每笔交易现在都需要使用两个设备进行两次确认。
社交恢复更胜一筹
这是我个人比较倾向的钱包保障方式:社交恢复。其运行机制如下:
有一个单独的“签名密钥”用以批准交易
还有一套至少由三个成员组成的“守护者”,其中大多数人联合起来可以改变账户的签名密钥
签名密钥能够增加或减少守护者,这个过程存在延迟 (通常为 1-3 天)。
在正常情况下,用户都可以像普通钱包一样简易使用社交恢复式钱包,并使用其签名密钥对消息进行签名,从而使每个已签名的交易都可以通过一次确认点击快速完成,操作如同“传统”钱包 (如 Metamask)。
而社交恢复式钱包真正发挥作用的地方,就是用户丢失签名密钥的情况。用户可以联系他们的守护者,并要求他们签署一个特殊交易,以更改其在钱包中注册的签名公钥。这其实不难,他们可以访问一个网页 (比如security.loopring.io),登入之后收到一个恢复请求,然后进行签名。守护者的操作可能就像在 Uniswap 上进行交易一样简单。
守护者有很多可能的选择,其中最常见的三种选项是:
钱包所有者自己的其他设备 (或是纸质助记词)
朋友或是家庭成员
组织机构,在收到你的电话号码或电子邮件确认后签署恢复交易,或者在所设价值较高的情况下通过视频通话来验证你的身份
添加守护者也很容易,只需输入 ENS 域名或 ETH 地址即可添加监护人,尽管大多数社交恢复式钱包都要求守护者在恢复页面中签署交易以同意添加。在任何设计合理的社交恢复式钱包中,守护者无需下载并使用同一钱包,他们可以使用其现有的以太坊钱包,不受类型限制。鉴于添加守护者的便利性,如果你的社交圈由以太坊用户组成,我个人更偏向设置较多守护者 (最好是7个以上),以提高安全性。如果你已经有了一个钱包,那么就不需要守护者不断保持注意,你可以通过现有的钱包进行任何恢复操作。如果你不认识足够的活跃以太坊用户,那么设置数量较少且懂得操作的守护者是更好的选择。
为了减少守护者遭受攻击和串谋的风险,不必要公开守护者,实际上,他们不需要知道彼此的身份。这可以通过两种方式来实现。首先,将守护者地址列表的哈希存储在链上,而非守护者的地址,并且钱包所有者只需要在恢复时发布完整列表即可。其次,可以要求每个守护者确定性地生成一个新的地址,仅以用于当次恢复。除非实际需要恢复,不然他们不需要使用该地址发送任何交易。为了配合技术上的防护,建议选择来自不同社交圈的、具有差异性的守护者 (理想情况下包括一个机构守护者),这些方案使守护者很难同时受到攻击或是进行串谋。
如果钱包所有者去世或是永久丧失行为能力,这将是一项社会认可的标准协议,守护者可以公开其身份,以便在这种情况下他们可以找到彼此并恢复资金。
社交恢复式钱包并未背叛“密码学价值”,而是一种体现
对于任何形式的多重签名,社交恢复等等使用建议的一种常见反应是,这些解决方案最终还是要追溯到“信任他人”这一点上,因此是对区块链和加密货币行业价值的背叛。虽然我理解人们为什么会在乍看之下产生这种想法,但我还是认为,这种批评源于对密码技术的误解。
对我而言,密码技术的目标绝不是消除所有形式的信任。相反,密码技术的目的是使人们能够使用密码学和经济学来构建事物,从而增加可信任对象的选择,并进一步建立更多有限的信任形式:可以授予某人代表你进行某些行为的权力,而无需授予全权。从这种角度来看,多重签名和社交恢复是这一原则的完美体现:每个参与者对能否接受或拒绝交易都有一定影响,但是没有人能单方面转移资金。与必须由个人或密钥单方面控制资金的情况相比,这种更复杂的逻辑引入了安全得多的设置。
“谨慎地运用人的输入而非彻底抛弃”这一基本理念是有效的,因为这可以很好地与人脑的优缺点相适应。人脑非常不适合记忆密码和保存纸钱包,但却是用于追踪与他人关系的 ASIC。对于非技术用户来说,其效果甚至更强。他们可能在使用钱包和密码时遇到麻烦,但是他们与技术用户一样擅长处理诸如“选择七个不会全部勾结起来欺骗我的人”之类的社交任务。如果我们能够从人类输入中提取一些信息到某种机制中,而又避免使这些输入成为攻击向量,那么我们应该弄清楚如何实现。社交恢复非常稳健,要破坏一个拥有七个守护者的钱包,七个守护者中至少有四个需要以某种方式识别彼此并勾结起来盗取资金,其中任何一个人都不能向钱包所有者通风报信,这比起攻击一个纯粹由个人维护的钱包要困难许多。
社交恢复如何防止盗窃?
上文所述的社交恢复讨论到了“丢失”钱包的风险,但是仍然存在签名密钥被“窃取”的风险:有人侵入你的计算机,在你已经登入的情况下趁虚而入,然后给你当头一棒,甚至只是通过制造用户界面故障来引诱你签署交易。
我们可以通过添加保险库来增强社交恢复能力以应对此类问题。每个社交恢复式钱包都可以附带一个自动生成的保险库。只需将资产发送到保险库地址即可将其转移至保险库,但要将其转出保险库需要一周延迟时间。在延迟期间,签名密钥 (或监护者) 可以取消交易。如果需要,还可以对保险库进行编程,以便可以立即进行一些有限的操作 (例如在白名单代币之间进行 Uniswap 交易)。
既有的社交恢复式钱包
目前已经有两个主要的钱包实现了社交恢复功能,Argent 以及 Loopring:
Argent 钱包是首个且最受欢迎的“智能合约”钱包,社交恢复是其卖点之一。Argent 钱包加入了可以对监护者进行增删的界面:
为了防止盗窃,钱包设有每日限额:达到该金额的交易可以即时进行,但超过该金额的交易需要守护者批准才能完成提款。
Loopring 钱包为大家所知可能因为它是由 Loopring 协议 (用于支付和去中心化交易所的 ZK rollup 方案) 开发者及支持者构建的。但是 Loopring 钱包还具有社交恢复功能,与 Argent 中的功能非常相似。在这两种情况下,钱包服务商都免费提供一位守护者,该守护者通过手机发送的确认码来对用户进行身份验证。用户可以通过提供以太坊地址来添加同一钱包的其他用户或任何以太坊用户作为其他守护者。
两个钱包的用户体验都非常顺滑。可能存在两个挑战。首先,两个钱包中的操作顺滑度都依赖于钱包商的“中心化”中继者 (relayer),将已签署的交易重新发布出来,其次费用较高。所幸这两个挑战都是可以解决的。
迁移到 L2 (rollups) 可以解决其他挑战
如上所述,存在两个主要挑战:1) 依赖中继者 (relayer) 来处理交易,以及 2) 交易费用高。在以太坊应用中,对中继者的依赖是一个日益普遍的问题。出现此问题的原因是,以太坊中有两种帐户类型:由单个私钥控制的外部帐户 (EOA) 和合约账户。以太坊有一条规则,即每笔交易都必须始于外部账户。最初的意图是外部账户代表“用户”,合约账户代表“应用程序”,并且仅当用户与应用程序交互时,该应用程序才能运行。如果我们想要机制更加复杂 (如多签和社会恢复) 的钱包,则需要使用合约来代表用户。但一个新的挑战随之而来:如果你的资金在合约账户中,则需要拥有一个其他有 ETH 余额的账户,以支付每笔交易,一旦交易费用迅速攀升,可能需要大量的 ETH。
Argent 和 Loopring 的解决方案式亲自运行中继者。中继者侦听用户提交的链下数字签名的消息,并将这些消息打包在交易中,继而发布到链上。但是从长远来看,这不是一个好的解决方案,因其带来了中心化问题。如果中继者发生故障,而用户需要发送交易,虽然他们始终可以从自己的外部账户发送交易,但是仍然需要在中心化和使用不便之间引入新的权衡。有解决方案尝试在去中心化的情况下解决这个问题并提升操作便利度。主要的两种解决方案一是创建一个通用型去中心化中继者网络,二是修改以太坊协议以支持交易从合约账户发出。但是这些方案都不能解决交易费用的问题,实际上由于智能合约本来就更复杂,可能会加剧问题严重性。
幸运的是,我们可以寻求第三种解决方案同时解决这两个问题:将生态系统移至二层协议,例如 optimistic rollups 和 ZK rollups。Optimistic 和 ZK rollups 可以设计为内置抽象,无需中继者。现有的钱包开发人员已经在研究 rollups,但是最终要整体迁移到 rollup 上是整个生态系统的挑战。
将生态系统大规模迁移到 rollups 提供了很好的机会,可以扭转以太坊生态系统早期的错误,并为多签和智能合约钱包在帮助保护用户资金方面发挥更加重要的作用。但这需要大家更广泛地认识到钱包安全性确实是一项挑战,而且我们还没有做出足够的尝试以应对挑战。多重签名和社交恢复不一定是故事的结局,可能会有更好的设计。但是转移到 rollups 并确保其将智能合约钱包视为“头等公民”,这一革新是实现这个目标的关键步骤。
来源 | vitalik.ca
作者 | Vitalik Buterin
感谢 Argent 的 Itamar Lesuisse 和 Loopring 的 Daniel Wang 提供反馈。