MPC 和社交恢复带来的无助记词方案是大规模采用的基础。
撰文:Ggg,Redline DAO
摘要
2010 年,以太坊创始人 Vitalik Buterin 在魔兽世界中有一个术士的账号,有一天暴雪决定将术士角色大削,移除了生命虹吸法术的法伤部分。他哭着睡着了,并且在那一天意识到集中服务器会带来怎样的恐怖,于是他决定退出,创建了去中心化网络以太坊。2022 年 11 月,世界上最大的衍生品交易所 FTX 被曝挪用用户资金,创始人 SBF 被巴哈马警方逮捕,准备移交美国受审。
从 13 年前被暴雪莫名背刺的术士玩家,到今天维权的 FTX 受害用户,我们越来越认识到「Not your key, not your coin」这句话的重要性:即使有第三方的审计 / 监管机构,中心化的服务器仍然可以肆意篡改、粉饰数据,而在去中心化网络上,链上账本透明且无法篡改,只要我们拥有自己账户的私钥,便拥有对个人资产的绝对控制权。
生活在区块链网络中的我们,是个人资产的第一负责人。大部分的用户选择在选择链上钱包时,最关键的权衡是,我愿意为我的资产承担多大的风险以及多大的责任?以传统金融机构为例:
回到 web3,我们在 web3 中存放资产有两种方式,托管钱包和非托管钱包,而在此之前我们需要对钱包的原理进行一个简要的介绍:
账户的生成即私钥的创建过程。在以太坊上,有两种账户类型:EOA 账号(External Owned Account,外部账户)和合约账户(通过 EOA 账户部署在链上的智能合约):
1.以 EOA 账户为例,
EOA address
通过生成 256bit 的随机数作为私钥,再通过私钥由 SHA3 算法推导出对应的公钥,然后再通过 keccak-256 计算出地址(原始哈希的后 20 字节),便得到了一个由唯一私钥对应的个人账户。在这个过程中,私钥会计算生成 12 个助记词,我们可以用助记词来重新推导出私钥。
目前各大主链上最主流的 dApp 钱包都是 EOA 钱包,如 Metamask,Phantom(Solana),BSC Wallet(BSC),Keplr(Cosmos)。
2. 而智能账户则是通过 EOA 账户在链上部署的一段 EVM 编码,可以实现不同的功能。但是和 EOA 账户不一样的是,合约账户没有私钥,不能主动执行,它只能被 EOA 账户发起调用,也正因此,智能合约钱包的最终控制权 = 部署合约使用的 EOA 账户私钥,在这个层面上理解,智能合约账户也是被私钥控制的。只要钱包地址是合约,那就是智能合约钱包。
Apecoin Contract Address
3.账户创建之后,我们参与任何链上活动,都离不开私钥的参与。
根据廖雪峰老师的介绍:
在去中心化的网络中,并没有一个类似银行这样的信任机构存在,要想在两个节点之间达成交易,就必须实现一种在零信任的情况下安全交易的机制。
我们假设小明和小红希望达成一笔交易,一种创建交易的方法是小红声称小明给了他 1 万块钱,显然这是不可信的;
还有一种创建交易的方法是:小明声称他给了小红一万块钱,只要能验证这个声明确实是小明作出的,并且小明真的有 1 万块钱,那么这笔交易就被认为是有效的。
如何验证小明做出的声明呢?
钱包的一切都围绕着私钥构建。钱包本质上是一个 1.创建私钥,2.保管私钥,3.使用私钥,4.备份私钥,5.恢复私钥的工具,目前的主流私钥备份 / 恢复方案便是助记词,即在注册钱包时出现的 12/24 个单词组合:
由于私钥是我们与区块链网络进行交互的唯一凭证,我们的责任在于保管好我们的钱包私钥和助记词。最安全的创建账户方式当然是在一个离线的环境,自己通过代码运行随机数(私钥)和 SHA256 算法生成自己的地址,但是无疑这个门槛太高,并不适用与绝大部分的用户。所以在钱包的选择上,用户需要考虑三点:安全性,门槛和抗审查性:
钱包类别主要分为两种:非托管钱包和中心化的托管钱包。
非托管钱包:用户自行保管助记词
a.以主流钱包 Metamask 为例,MetaMask 是一种非托管(或自托管)加密货币钱包。非托管意味着 MetaMask 不存储有关钱包的任何数据,而私钥数据都在本地级别的浏览器或移动应用程序中,当用户需要进行链上签名活动时,Metamask 将从本地文件调用私钥进行签名。而如果用户的私钥和助记词都丢失 / 窃取,Metamask 将无法帮助用户寻回,用户的资产也将永久丢失。
b.被公认为最安全的硬件钱包(如 Ledger),则是采用了一个硬件设备离线生成私钥和钱包地址,再通过将地址的公钥导入至网页钱包如 Metamask,需要签名时再通过 Ledger 硬件的线下确认,由于私钥完全不接触互联网,黑客很难窃取硬件钱包里的私钥。但是如果用户把助记词丢失了,或者被钓鱼了,硬件钱包的防护作用也归零,用户的资产依旧会被盗走。
托管钱包
交易所钱包如 Coinbase/Binance 等则采取了托管钱包的方式,不同之处在于,Coinbase 内显示的账户不是用户持有自己的私钥,而只是 Coinbase 程序里显示的记账数字而非 Etherscan 上显示的链上资产,可以理解为用户信任 Coinbase,将资产托管给 Coinbase 而非自己拥有,所以 coinbase 的账户也无法和 Uniswap 等 dAPP 进行交互
Source: Binance
总体而言,托管钱包中,项目方代为保管助记词,注册和恢复钱包的门槛低,但是钱包的安全取决于项目方而非用户自身,且项目方拥有钱包的实际控制权;非托管钱包的助记词掌握在用户手中,注册和恢复钱包的门槛高,但是安全性和抗审查性都很高。
随着 WEB3 不断向前发展,越来越多的需求和应用场景随之出现,链上的生态蓬勃发展,尤其是 2021 年的 Defi Summer 吸引了大批原本只在交易所交易的用户将资产迁移至链上,截至 2022 年 3 月,MetaMask 月活用户已经达到 3000 万,但同时,助记词作为目前最主流的助记词账户恢复方案,成为了黑客的主要攻击目标:对于普通用户而言,最常见的钱包被盗事件便是助记词在剪贴板被复制,或者遇到了钓鱼网站被窃取了储存于本地的私钥文件。
继续以 Metamask 作为例子,黑客可以在两个地方获得保存的助记词和私钥:
1.助记词
a.钱包创建之后,用户需要保管好生成的助记词,一般建议采取用纸笔的方式抄写在白纸上并妥善保管,但是也有懒惰的人会使用剪切板进行复制粘贴,保存在 doc 文档,甚至是微信的聊天记录里;
b.如果黑客已经在用户的手机上 / 电脑上安装的恶意软件,时刻监控用户的剪贴板,便可以窃取到刚刚创建的私钥。比如 QuickQ VPN 曾被曝出复制用户的剪贴板窃取助记词。
2.私钥
a.同时,Metamask 一般会将私钥加密后保存在创建钱包的本地设备以便随时调用,如果是在 Chrome 上安装的 Metamask 插件:
i.在 Windows 上的储存位置,Metamask 的私钥保存地址:
C:\Users\USER_NAME\AppData\Local\Google\Chrome\User Data\Default\Local Extension Settings\nkbihfbeogaeaoehlefnkodbefgpgknn。
ii.在 Mac 上的储存位置:Library>Application Support>Google>Chrome>Default>Local Extension Settings>nkbihfbeogaeaoehlefnkodbefgpgknn
b.即 Metamask 的安全性取决于 Chrome 的安全性,一旦 Chrome 的防火墙被黑客攻破,黑客便可以获得用户的地址私钥,转移所有资产。这也是为什么硬件钱包在安全性上优于 Metamask 等插件钱包。
Metamask 以外,部分非托管钱包,甚至达不到高抗审查性,如 Solana 上的 Slope 钱包被盗事件:Slope 的移动应用在创造 Phantom 钱包时,通过 TLS 向他们的 Sentry 服务器发送助记词,这些助记词随后以明文形式存储,这意味着任何可以访问 Sentry 的人都可以访问用户私钥。
除此之外,还有更多的钱包安全事故值得我们反省:
EOA 账户被盗
Fenbushi 资本创始人钱包被盗:
沈波钱包被盗原因为助记词泄露,被盗时使用的钱包为 Trust Wallet,被盗金额包括约 3823 万枚 USDC、1607 枚 ETH、72 万枚 USDT 和 4.13 枚 BTC。
Wintermute 钱包遭攻击损失约 1.6 亿美元,被盗原因是 Wintermute 为了节省 Gas 费使用了 Profanity 来创建 Vanity 钱包(开头 0x0000000,它可以在调用智能合约时达到节省 Gas 的效果):
Profanity 的设计目的,是帮助人们生成一个具有特殊视觉效果的账号,比如以特殊字符开头或者结尾的账号,另一方面,一些开发者使用它来生成开头为很多个 0 的账号。
Profanity 在获取到第一个 32 位私钥 SeedPrivateKey 以后,为了碰撞出需要的账号地址,会通过一个固定的算法不断迭代这个私钥,最多 200 万次(数值来源于 1inch 披露的文章)。当 PublicKey 已知时,我们可以通过穷举 SeedPrivateKey 和 Iterator 来得到 SeedPrivateKey,计算量大概为 2^32 乘以 200 万次,算力大的显卡在几天甚至几个小时内就能完成。
合约账户被盗
Paraswap 的合约部署地址被盗:
根据慢雾的调查报告:黑客地址(0xf358..7036)已经获得了 ParaSwap Deployer 和 QANplatform Deployer 的私钥权限。黑客从 ParaSwap Deployer 中提取了 1000 美元,并将其转入转出 QANplatform 部署者地址作为测试。我们使用 AML 平台对 0xf358..7036 进行分析后发现,黑客还盗取了 The SolaVerse Deployer 及多个其他靓号地址。截止目前,黑客已经窃取了超过 17 万美元的资金。
Ronin 桥于今年 3 月受到黑客攻击,损失 17.36 万枚 ETH 和 2550 万枚 USDC:
黑客虚构了不存在的公司,通过 Linkedin 和 WhatsApp 勾搭了 Axie 的高级工程师,利用新工作机会引诱他,还安排了面试,最后开出丰厚的待遇,但 offer 文件有毒,于是成功侵入 Axie 系统,盗窃工程师部署合约的 EOA 地址私钥。
助记词方案除了是黑客的主要攻击目标以外,同时也是阻止新用户进入 WEB3 的高门槛。
保管一张写有 12 个单词的白纸这件事情本身听起来就很不靠谱且不 web3:我们期待着生活在 metaverse 的未来,但是我们的账户安全却靠一张宋代发明的白纸。至此,这两个步骤足以劝退大部分的 web2 玩家,毕竟在 web2 的世界里,大部分注册流程都可以使用 google 账号 /ios 账号一键登录。
为了降低钱包的门槛,吸引更多的用户进入 WEB3,我们需要使用如 Web2 的社交账号登录方案,而不损失钱包的安全性和抗审查性。由此,我们需要更便捷且安全的的账户恢复方案,目前的一切讨论都指向一个终局:无助记词。目前的无助记词有两种实现方案:MPC 方案和社交恢复方案。
MPC 方案是在创建 EOA 钱包时,多方共同创建私钥碎片。2019 年,在 CRYPTO 2019 上公布了《基于安全多方计算的两方椭圆曲线数字签名》的论文,正式将 MPC 的实现带入大家的视野。MPC 即安全多方计算(Secure Multi-Party Computation)。
MPC 方案做到了在账户创建,使用,保存,备份和恢复都没有出现完整的私钥,通过多方共同生成 / 持有私钥碎片以及「t out of n」的 TSS 门限签名方案,达到了比 Metamask 等单点生成 / 持有私钥钱包更高的便捷性。安全性和抗审查性:与传统的助记词方案相比,大大提高了用户使用的安全性,甚至可以媲美硬件钱包
安全性:a.无私钥 / 助记词:钱包生成的过程中,各方(钱包项目方和用户)通过 MPC 各自生成私钥碎片,完整的私钥在整个过程中都没有出现过,可以理解为 MPC 是真正的无私钥钱包;b.黑客攻击成本大大增加:黑客即便入侵了用户的本地设备,也只能获得私钥碎片。只有当黑客掌握了钱包方的服务器 + 用户的本地设备才可以盗取用户的财产。
门槛:社交登录,用户可以通过邮箱等身份验证方式在 MPC 钱包上创建账户(假设 MPC 钱包采用了 2/2 的签名方案,即两个私钥碎片同时使用才可签名)。
抗审查性:中心化机构(钱包方 / 备份的设备)只持有账户私钥碎片,无法控制用户的账户。
社交恢复方案部署在智能合约账户上,智能合约钱包可以理解为用 EOA 账户在链上部署了一个用于管理资金的合约,和普通的智能合约相同,部署者的 EOA 钱包拥有对于智能合约的控制权。
EIP-2929 提案之后过了两年,2021 年 Vitalik 首次在论坛里提出了社交恢复的钱包应用案例:
a.创建私钥:账户抽象钱包在私钥的创建上和 Metamask 无异。
b.保管私钥:由于控制合约的 EOA 钱包只是作为「签名私钥」使用,并可以通过监护人转移控制权,所以用户不需要特意保管助记词。
c.使用私钥
○ 合约钱包同样是转账 / 交易,因为需要调用合约,所以会比 MPC 钱包和传统钱包更贵;
○ 但也因为是调用合约,所以支持使用 USDC/USDT 等非 Native token(如 ETH 是 Ethereum 上用于支付 gas fee 的 native token)支付,这无疑会大大降低 Web3 新玩家的交互难度:原理上,项目方在同一个交易里,将用户的 USDC swap 成 ETH 之后代为支付 gas fee。
d.备份私钥:账户抽象钱包的私钥备份步骤用「监护人」代替,然而这是反直觉并且高成本的:
①用户初次使用 web3,希望注册钱包,却需要寻找三个已经在 web3 内有 EOA 钱包的可信任的好友,让他们付出 gas fee 成为自己的监护人;
②若用户希望补偿好友的 gas fee,用新创建的钱包进行三次转账,则创建一个钱包,一共需要给出 6 次 gas fee,而 MPC 钱包创建账户是无成本的。
e.恢复私钥:如果用户丢失了他们的签名密钥,这时可以申请使用社交恢复功能。用户需联系他们的监护人,让他们签署一项特殊的交易(用户或监护人支付 gas fee),将钱包合约中注册的签名公钥更改为一个新的签名即可。这就简单多了:监护人可以通过访问一个网页,比如 security.loopring,查看恢复请求并签名。
然而,在私钥的安全性上,没有达到 MPC 钱包的高度:
①合谋:如果一些用户知道他们是某个恢复的一部分,他们可能会对恢复攻击的执行感兴趣;
②目标攻击:外部代理可能了解恢复的所有者,并瞄准执行恢复攻击所需最薄弱的点;
③一般暴露:攻击者如果设法感染大型用户基础环境依赖项,并获得对多个身份的访问权限,也可能通过恢复对未受影响的用户产生副作用。
MPC 方案 v.s. 社交恢复方案:安全性,门槛,抗审查性
有了无助记词账户恢复方案之后,我们可以期待新一代的 Web3 钱包,即可以使用邮箱注册和登录的钱包。在我们挑选了 MPC 钱包和账户抽象钱包的代表项目来分别做分析:用户准入上他们都达到了无助记词的低门槛,我们从安全性和抗审查性分别对他们做评估——
在 MPC 钱包中,抗审查性和便捷性做得比较彻底的 Bitizen 钱包采用了 2/3 的 TSS 方案,让我们从钱包的安全性和抗审查性对其进行分析:
安全性:
a.创建:为了达到强审查性,用户在完成钱包注册之后,可以用第二台设备通过蓝牙进行私钥碎片备份,采用 2/3TSS 方案:Bitizen 服务器,用户本地设备以及用户第二台设备。
b.保管:由于钱包创建过程中没有生成过完整私钥,所以也没有助记词:用户的 Bitizen 账号会关联用户的云盘和邮箱,用户只需邮箱登录,便可正常使用 Bitizen 钱包。
c.使用
d.备份
①将本地私钥碎片备份至用户的云盘;
②当用户需要更换设备登录,只需要通过邮箱和面容认证即可,Bitizen 会请求用户从云盘上的恢复私钥碎片的备份。
e.恢复
①同样的,当用户的设备丢失 / 误删了 Bitizen 的本地文件,可以通过云盘恢复私钥碎片;
②当用户甚至无法登录云盘,Bitizen 会通过服务器上的私钥碎片和用户第二台备份设备,重新计算出私钥碎片,让用户恢复正常的使用。
Source: Bitizen
抗审查性:
2/3 的 TSS 方案让用户拥有自己钱包的绝对控制权(2/3 的私钥碎片在用户手里),即使 Bitizen 倒闭或者跑路,用户依然可以正常行使钱包的控制权。
账户抽象钱包以 Unipass 为例,Unipass 采取了智能合约 +MPC 钱包的方式,结合两种方案的优点:
Source: Unipass
低门槛钱包并不是钱包应用的终点,目前的 Web3 基础设施与 Web2 的传统金融相比仍有一定距离。Visa 提供的自动扣款和定期自动付款功能为用户带来了巨大的便捷,但在以太坊上实现仍具有一定难度。账户抽象账户可能会是下一个高应用性的区块链钱包叙事:Visa 发布文章「自我托管钱包的自动支付(Auto Payments for Self-Custodial Wallets)」,探索利用账户抽象钱包 Argent 在 StarNet 网络上实现自动可编程支付,允许用户使用自我托管钱包自动付款而无需签署每笔交易。而账户抽象钱包具体是如何实现的呢?这个概念实际起源已久。
账户抽象 - 从 EIP-2938 到 EIP-4337
随着 EIP-4337 的提出,账户抽象这个话题重新回到大家的视线。社交恢复方案和账户抽象(将智能合约作为 EOA 钱包使用,即账户抽象)早于 EIP-1271 已经提出,并且由 Argent 等钱包在 StarkNet 等 Layer2 完成了落地应用,最近社区热议的 EIP-4337 方案(账户抽象)有何不同呢?
从 2015 年的 EIP-86 到最近热点 EIP-4337,开发者们的核心的思路围绕着「合约即为钱包」,帐户抽象使用户能够以直观的方式与主网进行交互。从而使用户对账户的关键权限进行精准控制。由于 EOA 账户的代码已经被规定,无法在 EOA 钱包上进行模块化和功能化的设计,比如增加批量转账 / 社交恢复等功能,所以大家将突破口放在了智能合约上。与 EIP-4337 最为接近的提案是 EIP-2938,EIP-2938 同样定义了一个新的智能合约运作协议,但是需要在共识层进行了修改,开发者们难以对其进行维护,而 EIP-4337 的主要创新点在于主网就不需要进行共识级别的协议更改。
①毕竟从账户抽象钱包 Argent 从 2018 年至今,已经完成了 5620 万美元的融资,经过 4 年的开发,也仅仅只有 7.4w 地址:正如 defi 兴起之后,币圈用户才从交易所转去使用 Metamask 冲土狗挖高 APY 矿,造就了 Metamask 的崛起,目前来看智能合约钱包的热潮仍需一个新的催化剂;
Source: Dune
②Argent 上目前的用户存款还没有融资额多
Source: Dune
③但是随着以太主网的账户抽象提案落地,意味着 Argent 用户可以从 StarkNet 无缝衔接至 Ethereum 主网,这个过程中燃起的火花也值得我们期待。
使用案例
①精细化权限控制:将 EOA 单一的签名权限精细化:
▽赋予 A 用户合约里的 X 个 TokenB 的转账额度
▽赋予 B 用户合约的授权 tokenC 的交易权限而非转账的权限
▽当合约长时间无人使用,自动将合约的使用权转移
②Gas 的多样化支付方式:他人代付或者任意代币支付
③自动扣款 / 自动退款
老生常谈一句,web2 用户 48 亿人,web3 用户在 22 年刚刚超过了 1 亿,我们仍处在区块链发展的早期蛮荒阶段。
回到文章开头的那个问题:「我愿意为我的资产承担多大的风险以及多大的责任?」能不能既不用记住我的私钥,也能保证我的钱包不丢失?
一直都有听到传统的 VC 质问:有没有什么场景,是只有 web3 可以做到而 web2 做不到的?我们认为,Web3 钱包就其中一个打脸传统 Web2 的例子:只有在 Web3 的去中心化网络中,我们才能期待一个满足抗审查性,安全性和用户体验的好钱包,用户既不用承担风险,也不用承担责任。而这样的钱包出现,也是 47 亿 Web2 用户拥抱 Web3 未来的重要基础:钱包是不仅是 Web3 第一个入口,更是链上域名(如 ENS),灵魂绑定代币(Soul-Bounded Token),链上声誉系统(Decentralized Identifiers)等发展的基础,如果没有安全的钱包环境,Web3 Lego 的搭建就没有稳固的根基。
我们需要更认真地思考,熊市开枪的机会不多,MPC 给我们看到了 EOA 钱包更易用更安全的未来,并且能够适配目前所有的 EVM 链,智能合约的接入 dAPP 还有很长一段路要走,社交恢复方案目前看着鸡肋,但是智能合约的未来可能性让人期待,我们究竟要押宝在谁身上,我们会用真金白银交上这份答卷。
2022 是加密货币黑暗的一年,但是我们依旧相信未来是光明的。我们是魔兽世界里觉醒的术士,我们希望创造一个这样的世界:在这个世界里,没有人能拿走我们的生命虹吸(除非提案投票通过)。
声明:本文部分内容基于对 Web3 钱包 Bitizen CEO Winson 的访谈,Bitizen 为 RedlineDAO 的 Portfolio 之一,在此感谢 Bitizen 与 Winson 对此文的支持。
参考文献
门限签名说明: https://www.wwsww.cn/btbjiaoxue/1273.html
将 Web2 用户带入 Web3 ——未来属于无助记词钱包:https://mp.weixin.qq.com/s/TF2FCQDyyApzEVHQjxgZRg
V 神:为什么我们需要广泛采用社交恢复钱包?:https://www.163.com/dy/article/GNQ4K9D905373E94.html
非托管 Solana 钱包 Phantom 遭黑客攻击,多名用户资金被盗:https://chainfeeds.xyz/search
Fenbushi Capital 创始合伙人沈波:个人价值 4200 万资产被盗,已报案:https://chainfeeds.xyz/feed/flash/detail/7a02d517-5a54-4892-a42a-ac519406da12
Wintermute 在 DeFi 黑客攻击中损失 1.6 亿美元:https://chainfeeds.xyz/feed/flash/detail/39c24b5e-693c-49a1-bf5c-ec04b829f8b6
ParaSwap 合约部署地址私钥或已泄露,链上资金被盗:https://chainfeeds.xyz/feed/flash/detail/04c9a5d2-6e86-4207-9b1d-913eced8d2a7
Ronin 跨链桥被盗原因:https://chainfeeds.xyz/feed/flash/detail/7a810726-80eb-4fef-a40b-a38c3c9f9738
【免责声明】市场有风险,投资需谨慎。本文不构成投资建议,用户应考虑本文中的任何意见、观点或结论是否符合其特定状况。据此投资,责任自负。