于 2021 年 1 月 11 日 原文:https://vitalik.ca/general/2021/01/11/recovery.html
特别感谢 Argent 的 Itamar Lesuisse 和 Loopring 的 Daniel Wang 的反馈。
使加密货币[1]和区块链应用程序对普通用户可用的最大挑战之一是安全性:我们如何防止用户的资金丢失或被盗?丢失和盗窃是一个严重的问题,通常使无辜的区块链用户损失数千美元,甚至在某些情况下导致全部资产的大部分消失殆尽。
这些年来,社区提出了许多解决方案:纸钱包,硬件钱包和我自己喜欢的[多签(multisig)钱包](https://bitcoinmagazine.com/articles/bitcoin-self-defense-part-i-wallet-protection-1368758841 "多签(multisig "多签(multisig)钱包")钱包")。实际上,它们显着改善钱包安全性。但是,这些解决方案都存在各种缺陷,如:提供的防盗和防丢保护不能满足实际需要,或笨拙且难以使用,导致使用率极低,或两者兼而有之。
但是最近,出现了一个更好的替代方案:一种称为“社交恢复型钱包”的新型智能合约钱包。与以前的安全钱包相比,这些钱包可以提供更高的安全性和更好的可用性,但是要轻松且广泛地部署它们,还有一段路要走。这篇文章将介绍什么是社交恢复型钱包,为什么它重要,以及我们如何(并且应该)在整个生态系统更广泛地采用社交恢复型钱包。
钱包安全是一个大问题
几乎从一开始,钱包安全性问题就一直困扰着区块链生态系统。甚至在 2011 年,当时比特币几乎是当时唯一的加密货币,就已经有不少猖狂的盗窃导致用户损失资产了。确实,在以太坊之前,我作为Bitcoin Magazine[2]的联合创始人和作者,我写了一篇文章,详细介绍了当时发生的骇客事件及用户遭受的损失。
这里一个案例描述:
昨晚 PDT 晚上 9 点左右,我单击一个链接转到 CoinChat [.] freetzi [.] com – 并被提示运行 Java。我照做了(认为这是一个合法的聊天室),并没有发生什么。我关上窗户,什么也没想。大约 14 分钟后,我打开了我的 bitcoin-qt 钱包,发现一笔不是我签署的交易:几乎我整个钱包都转到了 1Es3QVvKN1qA2p6me7jLCVMZpQXVXWPNTC。
此人的损失为 2.07 BTC,当时价值
70000。这是另一个案例:
2011 年 6 月,在一个未知的入侵者以某种方式直接访问他的计算机后,Bitcointalk 成员“ allinvain”损失了 25,000 BTC(当时价值 500,000 美元)。攻击者能够访问 allinvain 的 wallet.dat 文件,并通过从 allinvain 的计算机发送交易,或者上传 wallet.dat 文件到自己的计算机上,再迅速清空钱包。
以目前的价值计算,这相当于损失了近 10 亿美元。但是,盗窃并不是唯一的问题。丢失私钥也会带来损失。这是 Stefan Thomas 的案例:
比特币开发商 Stefan Thomas 有三个钱包备份 – 一个加密的 U 盘,一个 Dropbox 帐户和一个 Virtualbox 虚拟机。但是,他删除了其中两个,而第三个忘记了密码,从而永远失去了 7,000 BTC(当时价值 125,000 美元)。托马斯(Thomas)的回应:“ 自那时起,我一直致力于创造更好的钱包客户端。”
对比特币生态系统的一项分析表明,每天可能丢失 1500 BTC[3] ,这比比特币用户交易费用[4]多十倍,多年来总计高达总供应量的 20%[5]。故事和数字都指向相同的不可避免的事实:钱包安全性问题的重要性是巨大的,不应低估。
如果从社会和心理分析的话,就很容易看出为什么钱包安全性容易被人们低估,主要原因是:人们很自然地会担心在爱评判的公众面前显得自己愚蠢(或不小心),因此很多人会把自己资金被黑的经历隐藏起来。资金损失更为严重,因为人们认为“除了你自己,没有人可以责怪你”。但现实是,包括区块链在内的数字技术的全部意义在于,使人类更容易地从事非常复杂的任务,而不必付出极大的精神代价,也不必生活在不断害怕犯错的恐惧之中。如果一个生态系统对损失和失窃的唯一答案是一个 12 个助记词、不太安全的措施以及半讽刺性的“对于你的损失感到抱歉”这样的方案,那么它将很难被广泛采用。
因此,在不要求所有加密货币用户因个人安全变成区块链专家的情况下,减少损失和盗窃的数量的解决方案对行业来说非常有价值。
单靠硬件钱包还不够
硬件钱包经常被吹捧为加密货币资金管理的最佳技术。硬件钱包是一种专用硬件设备,可以连接到你的计算机或手机(例如,通过 USB),并且包含专用芯片,该芯片只能生成私钥和签署交易。交易将在你的计算机或手机上启动,必须在硬件钱包中确认后才能发送。私钥保留在你的硬件钱包中,因此,攻击到你的计算机或手机中的攻击者可能不能耗尽资金。
硬件钱包是一个重大的改进,它们肯定可以保护例如上面 Java 聊天室的受害者,但并不完美。硬件钱包有两个主要问题:
- 供应链攻击:如果你购买了硬件钱包,那么你会信任许多参与生产钱包的参与者:设计钱包的公司、生产钱包的工厂以及所有可能运送钱包的人用假货取代了它。硬件钱包可能会受到此类攻击:资金被盗与被盗设备数量之比非常高。值得称赞的是,诸如 Ledger 之类的硬件钱包制造商已经采取了许多保护措施来防范这些风险,但是仍然存在一些风险。但在根本上说,硬件设备不能像开源软件那样进行审计。
- 仍然是单点故障:如果有人在站在你的肩膀后偷看你输入 PIN 后,立即偷走了你的硬件钱包,他们就可以窃取你的资金。如果你丢失了硬件钱包,那么你将损失你的资金,除非硬件钱包在设置时生成并输出备份,但是正如我们将看到的那样,它们都有自己的问题...
靠助记词也不够好
许多钱包(无论是硬件还是软件)都有一个设置过程,在此过程中,它们会输出一个助记词,这是人们可以理解的 12 到 24 个单词的钱包根私钥编码。助记词短语如下:
代码语言:javascript复制 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 年[6]就提出,解决这些问题的技术是多重签名。你可以拥有一个带有三个钥匙的钱包,需要其中任何两个钥匙才能发送交易。
该技术最初是在比特币生态系统内开发的,但是现在,以太坊也存在出色的多重签名钱包(例如,请参见Gnosis Safe[7])。Multisig 钱包在组织内部非常成功:以太坊基金会使用 7 分之 4 的多签钱包来保管其资金[8],与以太坊生态系统中的许多其他组织也是类似。
而对于个人用户来说,使用多重签名钱包可能存在的一个主要问题是:谁持有资金,以及如何批准交易?最常见的形式是“由你(例如,笔记本电脑和手机)持有的两个易于访问但独立的密钥,第三个更安全采用不可访问的(离线)备份,可以由朋友或机构持有。
这是相当安全的:即使任何单一设备丢失或窃取,不会导致你无法使用资金。但是安全性远非完美无缺:如果你可以窃取某人的笔记本电脑,那么窃取他们的手机通常也并不难。可用性也是一个挑战,因为每个交易现在都需要使用两个设备进行两次确认。
社交恢复是更好的选择
这让我想到了我最喜欢的钱包保护方法:社交恢复。社交恢复系统的工作原理如下:
- 只有一个“签名密钥”可用于批准交易
- 至少有 3 个(或更多)“监护人”,其中大多数可以合作更改帐户的签名密钥。
签名密钥具有添加或删除监护人的功能,尽管仅在延迟(通常 1-3 天)之后才可以。
在所有正常情况下,用户都可以像普通钱包一样简单地使用其社交恢复型钱包,并使用其签名密钥对交易进行签名,从而使每个已签名的交易都可以通过一次确认快速完成,就像在“传统”钱包(如 Metamask)中一样。
如果用户“丢失”了他们的签名密钥,那么社交恢复功能就会启动。用户可以与他们的监护人联系,并要求他们签署一项特殊交易,以将钱包合约中注册的签名公钥更改为新的一个。这很容易:他们只需登录进security.loopring.io[9]等网页,查看恢复请求并签名。对于每个监护人而言,这与进行 Uniswap 交易一样容易。
选择作为监护人有许多可能的选择。三种最常见的选择是:
- 钱包持有者自己拥有的其他设备(或纸助记符)
- 朋友和家人
- 机构会在收到你的手机号码或电子邮件确认后签署恢复消息,或者在高价值的情况下通过视频调用来验证你的身份
监护人很容易添加:你只需输入他们的 ENS 名称或 ETH 地址即可添加监护人,尽管大多数社交恢复钱包都要求监护人在恢复网页上签署交易以同意添加。在任何设计合理的社交恢复型钱包中,监护人无需下载和使用同样钱包;他们可以简单地使用现有的以太坊钱包,无论哪种钱包。鉴于添加监护人的便利性很高,如果你很幸运你的社交圈已经由以太坊用户组成,我个人更希望监护人数量多(最好是 7 个以上),以提高安全性。如果你已经有了一个钱包,你也可以通过现有的钱包进行任何恢复操作。
为了减少监护人攻击和串通的风险,监护人不必公开:实际上,他们不需要知道彼此的身份。这可以通过两种方式来完成。首先,代替将监护人的地址直接存储在链上,可以将地址列表的哈希存储在链上,并且钱包所有者只需要在恢复时发布完整列表即可。其次,可以要求每个监护人确定性地生成一个新的单一目的地址,以用于特定的恢复。除非实际需要恢复,否则他们实际上不需要发送任何具有该地址的交易。为了补充这些技术保护,建议从不同社会圈子中选择各种各样的监护人(最好是一个机构监护人);这些建议一起使监护人很难同时受到攻击或串通。
如果你死亡或永久丧失工作能力,这将是一项社会认可的标准协议,监护人可以公开宣布自己,以便在此案例中,他们可以找到彼此并追回你的资金。
社交恢复型钱包不是对“加密价值”的背叛,而是一种表达。
对于使用任何形式的多重签名,社交恢复或其他形式的建议的一种常见回应是,该解决方案可以追溯到“信任人”,也就是对区块链和加密货币行业价值的背叛。虽然我理解为什么人们乍看之下会想到这一点,但我还是认为,这种批评源于对加密技术的基本误解。
对我而言,加密货币的目标绝不是消除对“所有”信任的需求。相反,加密的目标是使人们能够访问加密经济基础设施,从而为人们提供更多”选择”的信任对象,并允许人们建立更多受限的信任形式:赋予某人代你做某事的权力而又不赋予他们做某事的权力。这样看来,多重签名和社交恢复是这一原则的完美表达:每个参与者对接受或拒绝交易的能力具有某种影响,但是没有人可以单方面转移资金。与必须由一个人或钥匙单方面控制资金的情况相比,这种更复杂的逻辑设置安全性高得多。
这个基本的想法(应谨慎地使用人输入而不是直接丢掉它)是有效的。因为它可以很好地与人脑的优缺点相适应。人脑非常不适合记住密码和跟踪纸钱包,但是能跟踪与其他人的关系的 ASIC 码。对于不那么技术的用户来说,这种效果甚至更强:他们可能更难使用钱包和密码,但是他们擅长处理诸如“选择 7 个人,不会勾结的人”之类的社交任务。如果我们能够从人类输入中至少提取一些信息到一种机制中,而又不将这些输入变成攻击和利用的载体,那么我们应该弄清楚该如何做。社交恢复非常强劲:要让一个有 7 个监护人的钱包受到损害,这 7 个监护人中的 4 个将需要以某种方式相互发现并同意窃取资金,而其中的任何都不会给所有者告密:显然,比攻击仅由一个人保护的钱包[10]更为艰巨
社交恢复钱包如何防止盗窃?
上文所述的社交恢复说明了防“丢”的风险。但是仍然存在签名密钥被“窃取”的风险:例如,有人侵入你的计算机,或者是使用一些用户界面欺骗你签署你不打算签署的交易。
我们可以通过添加保险库[11]来扩展社交恢复钱包的能力以应对此类问题。每个社交恢复钱包都可以附带一个自动生成的保险库。只需将资产发送到保险库的地址即可将其移至保险库,但资金移出保管库则需要延迟 1 周。在该延迟期间,签名密钥(或扩展为监护人)可以取消交易。如果需要,还可以对保险库进行编程,以便可以立即进行一些有限的财务操作(例如,白名单代币之间的 Uniswap 交易)。
现有的社交恢复型钱包
当前,已实现社交恢复的两个主要钱包是Argent wallet[12]和Loopring 钱包[13]:
社交恢复钱包
Argent 钱包是目前使用最多且最受欢迎的“智能合约钱包”,而社交恢复是其主要卖点之一。Argent 钱包包含一个界面,可通过该界面添加和删除监护人:
为了防止盗窃,钱包有每日限额:达到该金额的交易是即时的,但超过该金额的交易需要监护人批准才能完成提款。
Loopring 钱包是因为Loopring 协议[14] (ZK Rollup [15]支付和去中心化交易)为大家所知。Loopring 钱包也具有社交恢复功能,该功能与 Argent 中的功能非常相似。在这两个案例,钱包公司都免费提供一位监护人,该监护人依靠手机发送的确认码来对你进行身份验证。对于其他监护人,你可以通过提供其以太坊地址来添加同一钱包的其他用户或任何以太坊用户。
在这两种情况下,用户体验都非常流畅。有两个主要挑战。首先,两种情况下的平滑度都依赖于钱包制造商运行中央的“中继器”,该中继器将签名消息重新发布为交易。第二,费用高。幸运的是,这两个问题都是可以克服的。
迁移到二层 Rollup 可以解决剩余的挑战
如上所述,存在两个主要挑战:(i)依赖中继器,以及(ii)高交易费用。在以太坊应用中,第一个挑战是对中继器的依赖,这是一个日益普遍的问题。出现此问题是因为以太坊中有两种类型的帐户:外部拥有的帐户(EOA),由单个私钥控制的帐户,以及合约帐户。在以太坊中,有一个规则,即每笔交易都必须从 EOA 开始。最初的意图是 EOA 代表“用户”,合约代表“应用程序”,并且仅当用户与应用程序对话时,该应用程序才能运行。如果我们想要具有更复杂政策(如多重签名和社交恢复)的钱包,则需要使用合约来代表用户。但这带来了一个挑战:如果你的资金处于合约中,你还需要拥有一个有ETH账户,该账户可以支付以启动每笔交易的手续费,还要以防万一交易费用变得很高,它需要大量的 ETH。
Argent 和 Loopring 通过亲自运行“中继器”来解决此问题。中继器侦听用户提交的链下数字签名的“消息”,并将这些消息包装在交易中,然后发布到链中。但是从长远来看,这是一个糟糕的解决方案。它增加了中心化的额外点。如果中继器关闭并且用户确实需要发送交易,用户需要始终可以从自己的 EOA 发送交易,因此仍然需要在中心化和不便利之间进行权衡。人们在去中心化情况下努力解决这个问题,并不牺牲便利性。这些努力主要有两类:建立“通用去中心化中继网络”[16]或修改以太坊协议本身以允许交易从合约开始[17]. 但是,这些解决方案都不能解决交易费用,实际上,由于智能合约本来就更复杂,它们使问题变得更糟。
**幸运的是,我们可以通过寻求第三种解决方案同时解决这两个问题:将生态系统移至第 2 层协议[18]例如 Optimistic Rollup 和 ZK Rollup 。**可以在内置帐户抽象的情况下设计 Optimistic Rollup 和 ZK Rollup ,从而避免了对中继器的任何需求。现有的钱包开发人员已经在研究 Rollup ,但是最终要整体迁移到 Rollup 是整个生态系统的挑战。
生态系统范围内的大规模迁移到 Rollup[19] 是一个很好的机会,它可以扭转以太坊生态系统的早期错误,并为多重签名和智能合约钱包来帮助确保用户资金方面发挥更加重要的作用。但这需要更广泛的认识,即钱包安全性是一个挑战,而且我们在尝试应对和挑战方面还没有走得那么远。多重签名和社交恢复不一定是故事的结局。可能会有更好的设计。但是,简单地进行改革,即转移到 Rollup 并确保这些 Rollup 将智能合约钱包视为“头等公民”,是朝着实现这一目标迈出的重要一步。
本翻译由 Cell Network[20] 赞助支持。
参考资料
[1]
加密货币: https://learnblockchain.cn/2019/11/26/progress
[2]
Bitcoin Magazine: https://bitcoinmagazine.com/
[3]
每天可能丢失1500 BTC: https://news.bitcoin.com/analyst-1500-bitcoins-lost-every-day-less-than-14-million-coins-will-ever-circulate/
[4]
交易费用: https://ycharts.com/indicators/bitcoin_total_transaction_fees_per_day
[5]
总供应量的20%: https://www.investopedia.com/news/20-all-btc-lost-unrecoverable-study-shows/
[6]
早在2013年: https://bitcoinmagazine.com/articles/multisig-revolution-incomplete-1406578252
[7]
Gnosis Safe: https://gnosis-safe.io/
[8]
保管其资金: https://etherscan.io/address/0xde0b295669a9fd93d5f28d9ec85e40f4cb697bae
[9]
security.loopring.io: https://security.loopring.io/
[10]
仅由一个人保护的钱包: https://bitcoinmagazine.com/articles/bitcoin-self-defense-part-i-wallet-protection-1368758841
[11]
保险库: https://hackingdistributed.com/2016/02/26/how-to-implement-secure-bitcoin-vaults/
[12]
Argent wallet: https://www.argent.xyz/
[13]
Loopring钱包: https://loopring.io/
[14]
Loopring协议: https://exchange.loopring.io/
[15]
ZK Rollup : https://vitalik.ca/general/2021/01/05/rollup.html
[16]
“通用去中心化中继网络”: https://docs.opengsn.org/learn/
[17]
允许交易从合约开始: https://our.status.im/account-abstraction-eip-2938/
[18]
移至第2层协议: https://vitalik.ca/general/2021/01/05/rollup.html
[19]
Rollup: https://learnblockchain.cn/article/1977
[20]
Cell Network: https://www.cellnetwork.io/?utm_souce=learnblockchain