前言:对于钱包私钥和助记词泄露问题,SAFE VAULT 用隔离安全来改善解决,对于钱包密钥丢失的问题,SAFE VAULT 下一步引入新的安全模块:“计时器所有者”,让合约计时器经过指定的休眠时间后,允许合约激活指定第二所有者,避免因为钱包私钥丢失导致资产死锁,这是一个安全和有意义的新途径。
钱包,作为Web3.0的入口,其用户体验与安全性直接影响到加密行业何时能迎来大规模化采用。尽管各大钱包在这方面卯足了劲,可在普通用户的眼里,钱包使用体验依旧不尽人意。交易所钱包虽然易用,但是安全性是一个很大的隐患,钱包被盗事件层出不穷。自托管钱包虽然安全,但助记词和私钥比传统互联网的用户名-密码复杂了很多。据Chainalysis 的研究报告显示,截止 2021 年约有 20% 流通中的比特币,因所有者不记得私钥而丢失。
在波哥大举办的Devcon 6大会中,Tomasz Tunguz还提到了Web3.0的一些统计数据:各主流公链DAU累计约为250万,而传统互联网的DAU为50亿,前者勉强够上后者的0.05%。因此,Web3.0离规模应用还有很远的距离。
钱包的三个问题
Web3.0大规模普及,需要解决一些关键问题,包括钱包私钥带来一个用户体验问题与两个安全问题。
1.一个用户体验问题:
助记词与私钥难记、难保存,导致用户使用门槛过高
2.两个安全问题:
助记词和私钥的泄露,导致资产被盗。
助记词和私钥的丢失,导致资产丢失。
为什么只能通过私钥的方式进行验证?为了回答这个问题,我们需要了一些背景知识和概念。首先是以太坊上的账户类型。以太坊一共有两种账户:外部账户(EOA)和合约账户(CA)。
合约账户就是智能合约,其代码由以太坊虚拟机来运行。而外部账户就是我们平常用来发起交易的钱包账户,它之所以被称为“外部“是因为这种账户本身是没有代码的,因此独立于以太坊虚拟机之外,由用户通过私钥进行控制。
合约账户(CA)虽然有自定义逻辑,但它是无法主动发起事务的。因此任何合约状态的改变都依赖外部账户来发起,并由外部账户(EOA)支付Eth。
如何验证事务的合法性呢?以太坊上的验证方式为检查事务的发起人和资产账户的拥有者是一致的(同一个人)。因此需要用户通过钱包对交易进行签名。而以太坊默认的验证逻辑是通过secp256k1非对称密钥算法实现,用户必须掌握用于签名的私钥。这就是为什么无论如何优化钱包的用户体验也无法绕开私钥的问题。
前文提到,外部账户(EOA)并不具备代码逻辑。如果想要引入更复杂的逻辑来实现其他的功能,比如多签等等,是无法在外部账户上直接进行的。那么,目前有什么样的方式可以解决此问题呢?下面将介绍被认为最可行有效的两种解决方案:MPC钱包和智能合约钱包。
MPC Wallet
MPC,全称为Multi-Party Computation,是一种重要的加密安全措施。其包含了很多种技术方案,在本文的语境下主要指MPC-TSS。而MPC钱包,是通过对私钥进行多方计算在链下实现“多签“、”跨链“等等更复杂的验证方式。
简单来说,就是将一个私钥打碎成多片,将私钥碎片交与一个去中心化的网络(Multi-Party多方)进行计算和加密。当需要私钥签名时,则将多方碎片再拼接起来形成一个完整的私钥。MPC的核心思路为分散控制权以达到分散风险或提高备灾的目的,有效避免了单点失败等安全问题。
MPC钱包“多方参与”的概念与“多签钱包”有些类似,但实际上,虽然都可以实现“多签”的功能,二者的实现途径是不一样的。
之前我们所熟知的多签钱包,比如Gnosis Safe等等,是建立在智能合约上的钱包,合约中定义了验证逻辑,比如如果需要验证一笔交易,需要一个以上的私钥,或者五个中至少三个私钥进行验证。这类钱包属于后文即将提到的智能钱包的一种。
而MPC钱包,则是将一个私钥分解成多个片段,验证过程只涉及到一个私钥。并且计算网络是链下的,与智能合约并无联系。
Smart Wallet
智能合约钱包,正如其名,是基于智能合约(CA)而不是外部账户的钱包。市面上已经有不少的智能合约钱包,但因为这些智能合约是自定义的,缺乏统一的行业标准,且存在合约漏洞以及与其他合约兼容性等等问题未获得广泛的应用。
即将来临的以太坊上海升级,智能合约钱包又因为“账户抽象”提案EIP-4337的重大进展而再次成为了热议的话题。那么账户抽象到底是什么意思呢?实现了账户抽象后,又能给用户带来怎样全新的体验?在了解以太坊上的账户抽象之前,我们首先需要了解“抽象”的概念。
“抽象”是计算机科学最重要的概念之一,指在向外界提供必要的关键信息的同时隐藏其后台的实现细节,使得开发者在处理一个抽象层的任务时,只需要专注于这一个抽象层。
账户抽象同理,我们作为钱包用户,需要考虑很多因素,比如gas price、gas limit、事务阻塞等等复杂的费用逻辑。其根本原因是钱包不够“抽象”,导致需要处理很多本不应该由用户处理的问题。那如何解决呢?
逻辑很简单,我们可以将外部账户和合约账户抽象,使外部账户与合约账户相“结合”,通过智能合约赋予EOA钱包更加复杂的逻辑。智能合约钱包能够实现的功能也不止“多签”这一个场景了。
如果EIP-4337能够实现以太坊账户的系统性升级,作为用户能获得什么新的体验呢?理论上只要能通过智能合约代码定义的功能都能实现。首先,智能合约钱包可以通过非secp256k1的验证算法进行验证,用户不需要面对长长的密钥对和助记词。
智能合约还可以赋予密钥更多的逻辑。比如在多签的场景下,给每一个私钥定义不同的权限:50USDC以下的交易需要私钥A签名,50USDC以上的交易需要私钥B签名,超过2000USDC的交易需要私钥ABC共同签名等等。
此外,通过移动端与区块链交互会变得更加容易,我们可以授权一个专属于手机的密钥,且可以定义这个密钥加上限制,比如只能与固定几个智能合约交互,或者智能验证数额较小的交易等。其他能够实现的功能还包括一键授权批量交易、交易黑名单等等。总之,智能合约钱包的想象空间非常大。
应用案例1.Safe Vault
Safe Vault (安全金库)-无需信任的以太坊自托管合约保险箱,是一系列开源且安全的以太坊智能合约。 可以安全“托管”你存入的资金 (ETH 和 ERC20 资产),只有金库的所有者能够根据预先定义的合约比例提取。
无第三方&完全去中心化
安全金库(Vault)利用默克尔树提供数据检索与存储。 通常处理Merkle树很复杂并且需要链下存储, 并且经常导致一些业务以中心化服务的方式运行。 但安全金库(Safe Vault)则完全不同。 不需要依赖第三方。 工作原理如下:
默克尔树存储在IPFS上: 默克尔树存储在IPFS(将来同步存储到 ARWEAVE)
IPFS哈希存储在以太坊上: 默克尔树的 IPFS 哈希然后存储在链上智能合约中.
安全金库(Safe Vault)不在任何中心化云服务上存储默克尔树及关键应用数据, 并且完全不依赖第3方服务。 一切数据都在IPFS和以太坊上。 任何人都可以安全运行自己的金库程序(Safe Vault).
安全风险评估:
合约安全 : 金库(Safe Vault)智能合约开源,接受第三方开放审核,具备可靠的安全性.
运行安全 : 金库(Safe Vault) 基于 Web3.0 免费客户端界面,所有代码均在客户侧本机运行,并与以太坊区块链进行交互。 开源的Vault平台允许您生成链上金库(合约钱包)、与智能合约交互等等 .
资金安全 : 每一个金库(Safe Vault) 都是具有自己独立地址的智能合约,由于没有私钥,资金一旦存入金库地址,将会按合约代码永远确定的存放与运作,完全保障资金安全。
隔离安全 : 资金存储在金库, 主人钱包地址具备取款权(相当于金库钥匙), 如果主人钱包私钥泄露, 由于金库与主人钱包是完全隔离的, 黑客不知道金库信息( 1.不知道泄露的是金库钥匙; 2.不知道金库地址), 因此钱包私钥泄露时,金库依然能够保障安全。
定向攻击(1). 如果黑客通过社会工程攻击,得知某个钱包是金库所有者的钱包 (2). 对其发起定向攻击,并成功获取了钱包的私钥或助记词; (3). 此时金库与主人钱包之间的信息隔离已被打破,黑客可能通过分析工具追溯主人钱包交易历史数据,获取金库合约地址,并利用主人钱包私钥对金库合约发起提款操作。
99% 的安全提升
对于钱包私钥和助记词泄露问题,SAFE VAULT 用隔离安全来改善解决,对于钱包密钥丢失的问题,SAFE VAULT 下一步将引入新的安全模块“计时器所有者”,让合约计时器经过指定的休眠时间后,允许合约激活指定第二所有者,对于避免因为钱包私钥丢失导致资产死锁,这是一个安全和有意义的新途径。
风险评估综合分析表明,使用Metamask + Safe Vault相较于一般热钱包提升 99% 安全性; 但为了100%的资金安全, 依旧建议用户(1).保护好主控钱包私钥或助记词的安全; (2).保持金库地址的私密性, 维护金库与主控钱包之间的信息安全隔离。
Safe Vault 下一步将提供通用、独立、可扩展、开放的Web3.0 API标准和服务,同时项目紧密追踪以太坊账户抽象和ERC-4337提案成熟,并将逐步引入MPC技术, 用户可以谨慎体验。
2.OPENBLOCK
近期出现的 MPC钱包中,我们注意到OpenBlock,这是一个2014年就存在的历史比较长的钱包,近期通过与OPEN-TSS 合作推出了全新的MPC加密协议钱包,应用了2-3门限签名方案(TSS),审批者模式以及多层多维度安全防护系统。具备较好的用户体验和易用性,但缺憾是目前没有看到OPENBLOCK钱包关键代码开源计划,用户可以谨慎体验
总结
上面介绍到两种钱包,大家可能会产生疑问,这两种解决方案哪一种更好呢?我们认为二者是互补的方案,因为MPC钱包和智能合约钱包本质上不在同一个层面解决问题。MPC钱包是链下方案,既可以控制基于外部账户的普通钱包,也可以控制智能钱包。二者各有用例,并不冲突。
MPC钱包作为链下方案,并不涉及到以太坊共识层或合约层的改动,用户的使用成本更低,且在短期内更具可行性。此外,在一些特殊的使用场景比如跨链密钥等更具优势。智能合约钱包是以太坊的系统性升级,可以给用户带来更多全新的体验和用例。但账户抽象是一个需要“兴师动众”的大工程,要求其他智能合约、开发者、以及以太坊架构都配合升级。过大的实操难度使从2015年就提出的愿景到今天也没有完全落地。而智能合约钱包对于用户而言,最直接的问题就是钱包的使用成本将会提升,从创建钱包开始就需要支付费用。
我们认为,智能合约钱包是我们的最终愿景,MPC是短期内的热点方案,且在一些特殊场景更具实施优势。
考虑成本问题,智能钱包在以太坊主网实现的可行性和可能性都较低。可以更多关注Layer2上的账户抽象和智能钱包进展。目前EIP-4337是最可行的账户抽象方案,已经有不少智能合约钱包项目在探索这条路径,智能钱包的全面落地可能比我们想象的更近。