原文:Why we need wide adoption of social recovery wallets
作者:Vitalik
译者:洒脱喜
来源:巴比特
特别感谢 Argent 团队的 Itamar Lesuisse 以及 Loopring 的王东(Daniel Wang)提供的反馈。
要让数字资产和区块链应用对普通用户可用的挑战之一,就是安全性:我们如何防止用户的资金丢失或被盗?损失和盗窃是一个严重的问题,它们往往会让无辜的区块链用户损失数千美元,甚至在某些情况下,用户会损失掉其净值的大部分。
这些年来,行业当中已经出现了很多解决方案,例如:纸钱包、硬件钱包,还有我自己曾经最喜欢的多重签名钱包。事实上,它们已经很好地改善了安全问题。然而,这些解决方案都有各种各样的缺陷,有时钱包提供的防盗和防丢失的额外保护,远远低于实际需要,有时则是钱包繁琐且难以使用,导致这些钱包的采用率非常低,而有时这些问题都会存在。而在最近,出现了一种更好的替代方案:一种新型的智能合约钱包,称之为「社交恢复钱包」。这些钱包有可能提供高水平的安全性,以及比以往选择更好的可用性,但在它们能被轻易和广泛地采用之前,还有一段路要走。这篇文章将讨论什么是「社交恢复钱包」,它们为什么是重要的,以及我们如何在整个生态系统中更广泛地采用它们。
钱包安全是一个大问题
从一开始,钱包安全问题便一直是区块链生态系统面临的一个棘手问题。即使在 2011 年,比特币几乎还是当时唯一的数字资产时,相关的损失和盗窃也非常猖獗。事实上,在创建以太坊之前,我作为 Bitcoin Magazine 的联合创始人和作者,写了一整篇文章来详细描述当时已发生的骇人听闻的黑客行为、损失及盗窃情况。
以下是其中一个示例:
「昨晚太平洋时间 9 点左右,我点击了一个链接进入 CoinChat[.]freetzi[.]com,然后我被提示运行 java。我这么做了(以为这是一个合法的聊天室),什么也没发生。我关上窗口,什么也没想。大约 14 分钟后,我打开了我的 bitcoin-qt 钱包,看到了一笔未经我批准的交易,我钱包里的所有资金都转到了 1Es3QVvKN1qA2p6me7jLCVMZpQXVXWPNTC……」
此人的损失是 2.07 BTC (当时价值约 300 美元),而在今天看来,他的损失超过了 7 万美元。还有一个例子:
「2011 年 6 月,Bitcointalk 论坛成员 ‘allinvain’ 失去了 25000 个 BTC (当时价值 50 万美元),当时一个未知的攻击者直接入侵了他的电脑。攻击者可访问 allinvain 的 wallet.dat 文件,并迅速清空了钱包。这要么是从 allinvain 的电脑上发送的交易,要么是简单地将这个 wallet.dat 钱包文件传给攻击者本身,然后在自己的机器上清空它。」
以现在的价值计算,‘allinvain’ 损失接近 10 亿美元。但盗窃并不是唯一的问题,丢失私钥也会造成非常大的损失,下面是来自 Stefan Thomas 的例子:
「比特币开发者 Stefan Thomas 的钱包有三个备份,一个加密 U 盘、一个 Dropbox 账户以及一个 Virtualbox 虚拟机。然而,他删除了其中两个备份,并忘记了第三个备份的密码,这使得他永远无法访问到自己的 7000 BTC (当时价值 12.5 万美元)。Thomas 的反应是:‘自那以后(我)会一直致力于创造更好的客户端。」
而一项针对比特币生态系统的分析表明,每天全球用户可能会损失 1500 BTC,这是比特币用户交易费用的 10 倍之多,这些年丢失的比特币合计占到了总供应量的 20%。这些事件和数字都指向了一个无法回避的事实:钱包安全问题的重要性是巨大的,我们不应该低估。
很容易得出钱包安全性容易被低估的社会和心理原因:人们很自然地会担心在总爱评判的公众面前显得自己不小心或愚蠢,因此很多人会把自己资金被黑的经历隐藏起来。资金损失更为严重,因为人们普遍认为「除了你自己,没有人可以责怪」。但现实是,包括区块链在内的数字技术的全部意义在于,使人类更容易地从事非常复杂的任务,而不必付出极大的精神努力,也不必生活在不断害怕犯错的恐惧之中。如果一个生态系统对损失和失窃的唯一答案是一个 12 步教程、不太安全的措施以及不那么偶然的半讽刺性的「对于你的损失感到抱歉」这样的方案,那么它将很难被广泛采用。
因此,在不要求所有数字资产用户将个人安全变成全职爱好的情况下,减少损失和盗窃数量的解决方案对业界来说是非常有价值的。
单靠硬件钱包还不够
硬件钱包通常被吹捧为管理数字资产资金的最佳技术,硬件钱包是一种专门的硬件设备,其可以连接到你的计算机或手机(例如通过 USB),它包含了一个专门的只能生成私钥和签署交易的芯片。交易将在你的计算机或手机上启动,必须在硬件钱包上确认后才能发送。私钥会留在你的硬件钱包里,因此入侵你的电脑或手机的攻击者,无法盗走你的资金。
硬件钱包是一种显著的改进,它们当然可以保护 Java 聊天室受害者,但它们并不完美,我发现硬件钱包存在两个主要问题:
- 供应链攻击:如果你购买了一个硬件钱包,你就相信了生产它的许多参与者(包括设计钱包的公司、生产钱包的工厂,以及所有参与运输钱包的人),这些参与者可以用赝品来代替钱包。硬件钱包可能是此类攻击的磁石:被盗资金与存在问题的设备数量的比率非常高。值得称道的是,Ledger 等硬件钱包商已经采取了很多措施来防范这些风险,但仍然存在一些风险。从根本上讲,硬件设备不能像开源软件那样被审计。
- 仍然存在单点失败风险:如果有人偷了你的硬件钱包,并获取了你的 PIN 密码,那他们就可以窃取你的资金。如果你失去了你的硬件钱包,那么你就失去了你的资金。除非硬件钱包在设置时生成并输出一个备份,但我们会看到,这些措施都存在着自己的问题……
助记词短语还不够友好
很多钱包(无论是硬件钱包还是软件钱包),都有一个设置过程,在这个过程中,它们会输出一个助记词短语,这是钱包根私钥的一种人类可读的 12 个单词或 24 个单词的短语,例如下面这个就是一个 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
如果你丢失了钱包,但你有助记词的话,你可以在设置新钱包以恢复你的账户时输入这些助记词,由于助记词短语包含根密钥,因此可以从中生成所有其他密钥。
助记词短语有助于防止丢失,但对于防盗窃而言却无能为力。更糟糕的是,它们为盗窃增加了一个新的载体:如果你有标准的硬件钱包+助记词备份组合,那么有人偷了你的硬件钱包+密码或你的助记词备份,就可以窃取你的资金。此外,保护好一个助记词短语,而不是不小心将其丢掉,这本身就是一件不容易办到的事情。
如果你把这个助记词短语一分为二,将其中一半分给你的朋友,那盗窃的问题就可以得到缓解,但(1)几乎没有人会这么做,(2)存在安全问题,因为这个助记词短语很短(128 位),那么就有可能存在一个老练而有动机的攻击者,如果其拿到了其中一半的助记词短语,他就可能通过暴力碰撞可能的组合来找到另一部分助记词短语,并且(3)它进一步增加了精神压力。
那么,我们需要的是什么?
我们需要的是能够满足三个关键标准的钱包设计:
- 没有单一的失败点:如果被盗,攻击者也无法简单地访问你的资金;
- 低精神负担:尽可能地降低要求,它不应该要求用户学习一些奇怪的新习惯,也不应强迫用户总是记住要遵循特定的行为模式。
- 交易的最大便利性:大多数正常的活动,不需要比普通钱包付出更多的努力(例如 Status、Metamask 等);
多重签名是好的!
早在 2013 年,解决这些问题的最佳技术就是多重签名(multisig)。你可以拥有一个存在三把密钥的钱包,只要有其中任意两把密钥签名,你就可以发送交易。
这项技术最初是在比特币生态系统中开发的,但优秀的多重签名钱包(例如 Gnosis Safe)现在也适用于以太坊。多重签名钱包在组织内部是非常成功的:以太坊基金会使用了一个 4-of-7 多重签名钱包来存储资金,以太坊生态系统中的许多其他组织也是如此。
而对于个人来说,使用多重签名钱包的主要挑战是:谁持有资金,以及如何批准交易?最常见的公式是「两个易于访问但独立的密钥是由你掌握的(笔记本或手机),第三个是更安全但不易访问的备份,其离线存放或由朋友或机构托管。」
这是相当安全的:即便其中一个设备丢失或被盗,你也可以访问到自己的资金。但安全性远不是完美的:如果你能偷别人的笔记本电脑,偷他们的手机通常也没有那么难。可用性也是一个挑战,因为现在每笔交易都需要使用两个设备进行两次确认。
社交恢复是更好的选择
这让我想到了我最喜欢的钱包保护方法:社交恢复。社交恢复系统的工作原理如下:
- 只有一个「签名密钥」可用于批准交易;
- 有一组(至少 3 个或更多)的「守护人」,其中多数人就可合作更改帐户的签名密钥。
签名密钥可以添加或删除守护人,但会有一个延迟期(通常是 1-3 天)。
在所有正常情况下,用户只需像普通钱包一样使用他们的社交恢复钱包,使用他们的签名密钥对消息进行签名,这样每笔签名的交易都可以通过一次确认点击完成,就像在「传统」的钱包那样(例如 Metamask)。
如果用户丢失了他们的签名密钥,那么社交恢复功能就会启动。用户只需联系他们的守护人,让他们签署一项特殊交易,将钱包合约中注册的签名公钥更改为新的。这很简单:他们可以简单地去访问一个页面,例如 security.loopring.io,登录,查看恢复请求并签名。对于每一个守护人来说,操作就像进行一笔 Uniswap 交易一样容易。
对于选谁作为守护人,有很多种可能的选择。最常见的三种选择是:
- 钱包持有者自己拥有的其他设备(或纸质助记词);
- 朋友和家人;
- 机构,如果他们得到了你的电话号码或电子邮件的确认,或者在价值很高的情况下,通过视频电话亲自核实你的身份,机构就会签署一条恢复信息;
守护人是很容易添加的:你只需要输入他们的 ENS 域名或 ETH 地址即可添加守护人,不过大多数社交恢复钱包都要求守护人在恢复网页中签署交易,以同意添加守护人。在任何设计合理的社交恢复钱包中,守护人不需要下载和使用同一个钱包。他们只需使用现有的以太坊钱包,无论是哪种类型的钱包。考虑到添加守护人的高度便利性,如果你足够幸运,你的社交圈已经由以太坊用户组成,我个人倾向于增加守护人的数量(最好是 7 个以上),以提高安全性。如果你已经有了一个钱包,那么你就不需要一直在精神上努力做一个守护人:你所做的任何恢复操作都会通过你现有的钱包来完成。如果你不认识许多其他活跃的以太坊用户,那么你信任的技术上有能力的少数守护人则是最好的。
为了减少守护人攻击或合谋的风险,你不必公开你的守护人:事实上,他们不需要知道对方的身份。这可以通过两种方式实现,首先,不必将守护人的地址直接存储在链上,而是将地址列表的哈希存储在链上,钱包所有者只需在恢复时发布完整的列表。第二,可以要求每个守护人确定地生成一个新的单用途地址,它们将仅用于特定的恢复。除非实际需要恢复,否则它们不需要使用该地址实际发送任何交易。
为了补充这些技术保护,建议从不同的社交圈子中选择不同的守护人集合(理想情况下要包括一个机构守护人),这些建议加在一起,将使得守护人极难同时受到攻击或发生合谋。
如果持有者不幸身亡或永久丧失行为能力,守护人就可以公开宣布自己的身份,这样他们就可以找到对方并收回你的资金。
社交恢复钱包不是一种背叛,而是「加密价值」的一种表达
对于使用任何形式的多重签名钱包、社交恢复或其他方式的建议,一个常见的回应是,这种解决方案回到了「信任人」的角度,这也是对区块链和数字资产行业价值观的背叛。虽然我理解人们为什么会这么想,但我认为,这种批评源于对「crypto 应该是什么」的根本误解。
对我来说,加密的目的永远不会消除对所有信任的需求。相反,加密的目标是让人们能够访问加密和经济构建块,让人们有更多的信任选择,并进一步让人们建立更受约束的信任形式:给予某人代表你做某些事情的权力,而不给予他们做任何事情的权力。从这个角度来看,多重签名和社交恢复是这一原则的完美体现:每个参与者对接受或拒绝交易的能力都有一定的影响,但任何人都不能单方面转移资金。这种更为复杂的逻辑,使得社交恢复钱包设置的安全性,远远高于只有一个人或一把密钥单方面控制资金的安全性。
这个基本的想法(应谨慎地使用人的输入而不是直接丢掉它)是有效的,因为它可以很好地与人脑的优缺点相适应。
人脑非常不适合记住密码和跟踪纸钱包,但是它是用于跟踪与其他人的关系的 ASIC。对于普通用户来说,这种效果甚至更强:他们可能更难使用钱包和密码,但他们同样擅长处理诸如「选择 7 个不会勾结的人」之类的社交任务。如果我们可以从人类输入中至少提取一些信息到一种机制中,而又不将这些输入变成攻击和利用的载体,那么我们应该弄清楚如何做到。社交恢复是非常强大的:要盗取一个有 7 个守护人的钱包,这需要 7 个守护人中的 4 个,以某种方式相互发现,并同意窃取钱包中的资金,而不让他们中的任何一个向失主告密:这当然要比攻击一个纯粹由一个人保护的钱包要困难得多。
社交恢复如何防止盗窃?
上面说明的社交恢复涉及你丢掉钱包的风险。但是仍然存在签名密钥被盗的风险:有人入侵了你的计算机,在你已登录时偷偷溜到你的身后,然后用一些用户界面故障诱使你签署自己不打算签署的交易。
我们可以通过增加一个金库来扩展社交恢复,以应对此类问题。每个社交恢复钱包都可以自动生成金库。只需将资产发送到金库的地址即可将其移动到金库,但只有在一周延迟期后才能将其移出金库。在该延迟期间,签名密钥(或者扩展为守护人)可以取消交易。如果需要,还可以对金库进行编程,以便可以毫不延迟地完成一些有限的金融操作(例如在一些列入白名单的代币之间进行 Uniswap 交易)。
现有的社交恢复钱包
目前,实施社交恢复功能的两大主要钱包有 Argent 钱包和 Loopring 钱包:
Argent 钱包是首个,也是目前最流行的「智能合约钱包」,而社交恢复是其主要卖点之一。Argent 钱包包括一个可以添加和删除守护人的界面:
为了防止被盗,钱包有一个每日限额:达到该金额的交易是即时的,而超过该金额的交易,需要守护人批准才能最终取款。
而 Loopring 钱包是由 Loopring 协议(这是一个用于支付和去中心化交易的 ZK Rollup 协议)的开发者构建的。Loopring 钱包也有一个社交恢复功能,其工作原理与 Argent 非常相似。在这两种情况下,钱包公司都免费提供了一名守护人,这依赖于手机发送的确认码来验证你的身份。对于其他守护人,你可以添加同一钱包的其他用户,或通过提供其以太坊地址添加任何以太坊用户。
这两个钱包的用户体验都出奇地流畅。但它们存在着两个主要挑战,首先,两个钱包的平稳性都依赖于钱包商运行的「中继器」(relayer),它将签名消息作为交易重新发布。第二,费用是很高的。幸运的是,这两个问题都是可以克服的。
迁移到 Layer 2 (Rollups)可解决剩余的挑战
如上所述,社交恢复钱包面临两个关键的挑战:(1)依赖中继器(relayer)处理交易,(2)高交易费用。第一个挑战是对中继器的依赖,这是以太坊应用中普遍面临的问题。这个问题的产生是因为以太坊中有两种类型的帐户:外部拥有账户(EOA)和合约账户,前者是由单个私钥控制的账户。在以太坊中,有一条规则是每一笔交易都必须从 EOA 开始,其初衷是 EOA 代表「用户」,合约则代表「应用」,只有用户与应用会话时,应用才能运行。如果我们希望钱包具有更复杂的策略,比如多重签名和社交恢复,我们需要使用合约来代表用户。但这带来了一个挑战:如果你的资金是放在了一个合约里,你需要有一些其他有 ETH 的帐户,以用于支付每一笔交易,那它就需要相当多的的 ETH,以防交易费用变得非常高。
Argent 和 Loopring 通过亲自运行「中继器」(relayer)来解决这个问题。这个「中继器」(relayer)负责侦听用户提交的带数字签名的链外「消息」,并将这些消息包装在交易中并发布到链上。但从长远来看,这是一个糟糕的解决方案,它增加了一个额外的中心点。如果「中继器」(relayer)关闭,并且用户确实需要发送一笔交易,他们总是可以从自己的 EOA 账户发送交易,但是在中心化和不便之间引入了一种新的权衡。有人在尝试解决这个问题,即在没有中心化的情况下获得便利,主要的两类是围绕着建立一个通用的去中心化中继网络或修改以太坊协议本身,以允许交易从合约开始。但这两种解决方案都不能解决交易费用问题,事实上,由于智能合约本身更为复杂,它们使得问题变得更糟。
幸运的是,通过寻找第三种解决方案,我们可以同时解决这两个问题:将生态系统移动到 layer 2 协议上,例如 Optimistic Rollup 和 ZK Rollup。Optimistic 和 ZK Rollup 都可以使用内置的帐户抽象进行设计,从而避免对「中继器」(relayer)的任何需求。现有的钱包开发者已经在研究 Rollup 解决方案,但最终迁移到 Rollup 是整个生态系统的挑战。
整个生态系统大规款迁移到 Rollup 是一个很好的机会,它可以扭转以太坊生态系统早期的错误,让多重签名和智能合约钱包在帮助确保用户资金安全方面发挥更重要的作用。
但这需要更广泛的认识,即钱包的安全性是一个挑战,而且我们在尝试应对和挑战方面还没有做得足够。多重签名和社交恢复不一定是故事的结局,可能还会有更好的设计。但是,简单地进行改革,即迁移到 Rollup,并确保这些 Rollup 将智能合约钱包视为一类公民,是实现这一目标的重要一步。