特别感谢 Argent 的 Itamar Lesuisse 和 Loopring 的 Daniel Wang 提供反馈。
使加密货币和区块链应用程序可用于普通用户的一大挑战是安全性:我们如何防止用户的资金丢失或被盗?
损失和盗窃是一个严重的问题,通常会让无辜的区块链用户损失数千美元,甚至在某些情况下损失他们全部净资产的大部分。
多年来提出了许多解决方案:纸质钱包、硬件钱包和我自己曾经最喜欢的: 多重签名钱包。
事实上,它们已经导致安全性的显着改善。然而,这些解决方案都存在各种缺陷——有时提供的额外保护远低于实际需要的防盗和丢失保护,有时笨重且难以使用导致采用率很低,有时两者兼而有之。
但最近,出现了一种更好的替代方案:一种称为社会恢复钱包的新型智能合约钱包。
与以前的选项相比,这些钱包可能提供更高级别的安全性和更好的可用性,但在它们可以轻松和广泛地部署之前还有一段路要走。
这篇文章将介绍什么是社会恢复钱包,它们为何重要,以及我们如何能够并且应该在整个生态系统中更广泛地采用它们。
几乎从一开始,钱包安全问题就一直是区块链生态系统的眼中钉。
甚至早在 2011 年比特币几乎是唯一的加密货币时,加密货币的损失和盗窃就很猖獗;事实上,在我作为比特币杂志的联合创始人和作家的前以太坊角色中,我写了一篇完整的文章,详细介绍了当时已经发生的黑客攻击、损失和盗窃的恐怖。
这是一个示例:
昨晚太平洋夏令时间晚上 9 点左右,我点击了一个链接转到 CoinChat[.]freetzi[.]com - 我被提示运行 java。我做到了(认为这是一个合法的聊天室),但什么也没发生。我关上窗户,什么都没想。大约 14 分钟后,我打开了我的 bitcoin-qt 钱包,看到一笔我没有批准的交易进入钱包 1Es3QVvKN1qA2p6me7jLCVMZpQXVXWPNTC 几乎我的整个钱包......
这个人的损失是 2.07 BTC,当时价值 300 美元,今天超过 70000 美元。这是另一个:
2011 年 6 月,Bitcointalk 成员“allinvain”在未知入侵者以某种方式直接访问他的计算机后损失了 25,000 BTC(当时价值 500,000 美元)。攻击者能够访问 allinvain 的 wallet.dat 文件,并快速清空钱包——可以通过从 allinvain 的计算机本身发送交易,或者只需上传 wallet.dat 文件并在他自己的计算机上清空它。
以今天的价值计算,这是近 10 亿美元的损失。但盗窃不是唯一的问题。丢失私钥也会造成损失。这是斯特凡·托马斯:
比特币开发者 Stefan Thomas 拥有他钱包的三个备份——一个加密的 U 盘、一个 Dropbox 帐户和一个 Virtualbox 虚拟机。然而,他设法删除了其中两个并忘记了第三个的密码,永远无法获得 7,000 BTC(当时价值 125,000 美元)。 Thomas 的反应是:“[我] 从那时起就非常致力于创造更好的客户。”
对比特币生态系统的一项分析表明, 每天可能会丢失 1500比特币——比比特币用户在交易费用上的花费高出十倍以上,多年来加起来高达总供应量的 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或你的助记词备份就可以窃取你的资金。
此外,保留一个助记词而不是意外丢弃它本身就是一项重要的脑力劳动。
如果您将短语分成两半并将一半给您的朋友,则可以缓解盗窃的问题,但是(i)几乎没有人真正提倡这一点,(ii)存在安全问题,好像短语很短(128位)那么,一个老练且积极主动的攻击者窃取了一个棋子可能能够通过所有 \(2^{64}\) 可能的组合暴力破解以找到另一个,并且 (iii) 它进一步增加了心理开销。
我们需要的是满足三个关键标准的钱包设计:
没有单点故障:没有单一的东西(理想情况下,没有一起旅行的东西的集合)如果被盗,可以让攻击者访问您的资金,或者如果丢失,可以拒绝您访问您的资金。
低心理开销:尽可能不要求用户学习奇怪的新习惯或付出脑力,以始终记住遵循某些行为模式。
最大程度地简化交易:大多数正常活动不应该比在普通钱包中花费更多的精力(例如,Status、Metamask ......)
早在 2013年,用于解决这些问题的一流技术就是 multisig。你可以有一个包含三个密钥的钱包,其中任何两个都需要发送交易。
该技术最初是在比特币生态系统中开发的,但现在以太坊也存在优秀的多重签名钱包(例如,参见Gnosis Safe )。
多重签名钱包在组织中非常成功:以太坊基金会使用 4-of-7 多重签名钱包来存储其资金,以太坊生态系统中的许多其他组织也是如此。
对于为个人持有资金的多重签名钱包,主要挑战是:谁持有资金,交易如何获得批准?最常见的公式是“两个易于访问但独立的密钥,由您持有(例如笔记本电脑和手机)和第三个更安全但不易访问的备份,离线或由朋友或机构持有”的一些变体。
这是相当安全的:没有任何一个设备会丢失或被盗,从而导致您无法访问您的资金。但安全性远非完美:如果你能偷走某人的笔记本电脑,那么偷走他们的手机通常也不是那么难。
可用性也是一个挑战,因为现在每笔交易都需要使用两台设备进行两次确认。
这让我们找到了我首选的保护钱包的方法:社会恢复。社会恢复系统的工作原理如下:
有一个“签名密钥”可用于批准交易
有一组至少 3 名(或更多)“监护人”,其中大多数人可以合作更改帐户的签名密钥。
签名密钥可以添加或删除监护人,但只能在延迟之后(通常是 1-3 天)。
在所有正常情况下,用户可以像使用普通钱包一样简单地使用他们的社交恢复钱包,用他们的签名密钥对消息进行签名,这样每笔签名的交易都可以通过一次确认点击就可以飞出去,就像在 Metamask 等“传统”钱包中一样.
如果用户丢失了他们的签名密钥,那么社交恢复功能就会启动。用户可以简单地联系他们的监护人并要求他们签署一项特殊交易,以将钱包合同中注册的签名公钥更改为新的.
这很简单:他们只需访问security.loopring.io等网页,登录,查看恢复请求并签名即可。对于每个监护人来说,就像进行 Uniswap 交易一样容易。
选择谁作为监护人有很多可能的选择。三个最常见的选择是:
钱包持有人自己拥有的其他设备(或纸质助记词)
朋友和家人
机构,如果他们收到您的电话号码或电子邮件的确认,或者在高价值的情况下可能会通过视频通话验证您的个人身份,他们会签署恢复消息。
监护人很容易添加:您只需输入监护人的 ENS 名称或 ETH 地址即可添加监护人,尽管大多数社交恢复钱包会要求监护人在恢复网页中签署交易以同意添加。
在任何设计合理的社交恢复钱包中,监护人不需要下载和使用同一个钱包;他们可以简单地使用现有的以太坊钱包,无论是哪种类型的钱包。
鉴于添加监护人的高度便利性,如果您足够幸运,您的社交圈已经由以太坊用户组成,我个人更倾向于增加监护人数量(最好是 7+)以提高安全性。
如果您已经有一个钱包,那么成为监护人不需要持续的脑力劳动:您所做的任何恢复操作都将通过您现有的钱包完成。如果您不认识许多其他活跃的以太坊用户,那么您认为具有技术能力的少数监护人是最好的。
为了减少对监护人的攻击和串通的风险,您的监护人不必公开:事实上,他们不需要知道彼此的身份。这可以通过两种方式实现。
首先,不是将监护人的地址直接存储在链上,而是可以将地址列表的哈希存储在链上,钱包所有者只需在恢复时发布完整列表。
其次,可以要求每个监护人确定性地生成一个新的单一用途地址,他们将仅用于该特定恢复;除非实际需要恢复,否则他们不需要实际使用该地址发送任何交易。
为了补充这些技术保护,建议选择来自不同社交圈的多样化监护人(包括理想情况下的一名机构监护人) ;这些建议加在一起将使监护人很难同时受到攻击或串通。
如果您死亡或永久丧失行为能力,这将是一个社会认可的标准协议,监护人可以公开宣布自己,因此在这种情况下,他们可以找到对方并追回您的资金。
对使用任何形式的多重签名、社会恢复或其他方式的建议的一个常见回应是,这种解决方案可以追溯到“信任人”,因此是对区块链和加密货币行业价值观的背叛。
虽然我理解为什么乍一看可能会这么想,但我认为这种批评源于对加密应该是什么的根本误解。
对我来说,加密的目标永远不是消除对所有信任的需求。
相反,加密的目标是让人们访问加密和经济构建块,让人们有更多选择信任谁,并进一步允许人们建立更受约束的信任形式:赋予某人代表你做一些事情的权力没有给他们做任何事情的权力。
从这个角度来看,多重签名和社会恢复是这一原则的完美体现:每个参与者对接受或拒绝交易的能力都有一定的影响,但没有人可以单方面转移资金。
这种更复杂的逻辑允许设置比必须有一个人或密钥单方面控制资金的情况更安全。
这个基本的想法,即人类的输入应该小心使用,而不是完全丢弃,是强大的,因为它很好地适应了人类大脑的优势和劣势。
人脑非常不适合记住密码和跟踪纸质钱包,但它是用于跟踪与他人关系的 ASIC。对于技术水平较低的用户来说,这种效果更加强烈:他们可能更难使用钱包和密码,但他们同样擅长社交任务,例如“选择 7 个不会全部联合起来攻击我的人”。
如果我们可以从人类输入中提取至少一些信息到一个机制中,而这些输入不会变成攻击和利用的向量,那么我们应该弄清楚如何。
社会恢复非常强劲:对于一个有 7 个监护人的钱包要被盗用,7 个监护人中的 4 个需要以某种方式发现对方并同意窃取资金,而他们中的任何一个都不能向所有者提供信息:当然这是一个更艰巨的挑战而不是攻击一个纯粹由一个人保护的钱包。
如上所述的社会恢复涉及您丢失钱包的风险。但是您的签名密钥仍然存在被盗的风险:有人入侵您的计算机,在您已经登录时偷偷溜到您身后并击中您的头部,或者甚至只是使用一些用户界面故障来欺骗您进行签名您不打算签署的交易。
我们可以通过添加保险库来扩展社会恢复以处理此类问题。每个社交恢复钱包都可以带有一个自动生成的保险库。只需将资产发送到保管库地址即可将资产移至保管库,但只能延迟 1 周才能将其移出保管库。
在此延迟期间,签名密钥(或扩展为监护人)可以取消交易。如果需要,还可以对金库进行编程,以便可以毫不拖延地完成一些有限的金融操作(例如,一些白名单代币之间的 Uniswap 交易)。
目前实现社会恢复的两大钱包是Argent钱包和Loopring钱包:
Argent 钱包是第一个主要的,也是目前最流行的“智能合约钱包”,社会恢复是其主要卖点之一。 Argent 钱包包含一个可以添加和删除监护人的界面:
为了防止被盗,钱包有一个每日限额:达到该金额的交易是即时的,但超过该金额的交易需要监护人批准才能完成提款。
Loopring 钱包最出名的是由Loopring 协议(当然也包括支持)的开发人员构建,该协议是用于支付和去中心化交易的ZK 汇总。但 Loopring 钱包还具有社交恢复功能,其工作原理与 Argent 中的非常相似。
在这两种情况下,钱包公司都免费提供一名监护人,该监护人依靠手机发送的确认码对您进行身份验证。对于其他监护人,您可以添加同一钱包的其他用户,也可以通过提供以太坊地址来添加任何以太坊用户。
两种情况下的用户体验都非常流畅。有两个主要挑战。首先,这两种情况下的平滑性都依赖于由钱包制造商运行的中央“中继器”,它将签名消息作为交易重新发布。二是收费高。幸运的是,这两个问题都是可以克服的。
如上所述,有两个关键挑战:(i)依赖中继器来解决交易,以及(ii)高昂的交易费用。第一个挑战,对中继器的依赖,是以太坊应用程序中越来越普遍的问题。
之所以出现这个问题,是因为以太坊中有两种类型的账户:外部拥有的账户 (EOA) ,即由单个私钥控制的账户,以及合约。在以太坊中,有一条规则是每笔交易都必须从 EOA 开始;最初的意图是EOA代表“用户”,合约代表“应用程序”,只有用户与应用程序对话,应用程序才能运行。
如果我们想要具有更复杂策略的钱包,例如多重签名和社会恢复,我们需要使用合约来代表用户。但这带来了一个挑战:如果你的资金在合约中,你需要有一些其他的账户,该账户有 ETH 可以支付开始每笔交易,并且它需要相当多的 ETH,以防交易费用变得非常高。
Argent 和 Loopring 通过亲自运行“中继器”来解决这个问题。中继器侦听用户提交的链下数字签名“消息”,并将这些消息包装在交易中并发布到链上。
但从长远来看,这是一个糟糕的解决方案;它增加了一个额外的中心化点。如果中继器出现故障并且用户确实需要发送交易,他们总是可以从他们自己的 EOA 发送交易,但是在中心化和不便之间引入了新的权衡。
努力解决这个问题并在没有中心化的情况下获得便利;主要的两个类别围绕着制作一个通用的去中心化中继网络或修改以太坊协议本身以允许交易从合约开始。但这些解决方案都没有解决交易费用问题,事实上,由于智能合约固有的更大复杂性,它们使问题变得更糟。
幸运的是,我们可以通过寻找第三种解决方案同时解决这两个问题:将生态系统转移到第 2 层协议上,例如乐观汇总和 ZK 汇总。
Optimistic 和 ZK 汇总都可以设计为内置帐户抽象,从而避免对中继器的任何需求。现有的钱包开发人员已经在研究汇总,但最终大规模迁移到汇总是整个生态系统的挑战。
生态系统范围内的大规模迁移到汇总是扭转以太坊生态系统早期错误并让多重签名和智能合约钱包在帮助保护用户资金方面发挥更核心作用的好机会。
但这需要更广泛地认识到钱包安全是一项挑战,而我们在努力迎接和挑战方面还没有走得那么远。
多重签名和社会恢复不一定是故事的结局;可能会有更好的设计。但是,转向汇总并确保这些汇总将智能合约钱包视为一等公民的简单改革是实现这一目标的重要一步。
也在这里发布。