「无助记词」本质是一种取舍:用较低安全级别存储密钥的方式,来提升用户登录便捷度。
1.为什么需要无助记词钱包
「无助记词钱包」并不是任何一种具体的钱包技术,而是一种功能体验:用户不再需要保管复杂的助记词,而是通过邮箱密码即可登录。由此,用户使用钱包的门槛大大降低,使用体验上接近Web2产品。
这类钱包的本质是允许密码丢失,也就是在密码丢失的情况下仍然可以保全资产安全、并且最终恢复对钱包的访问。所以,用户不再需要谨小慎微地在线下自行保管助记词,而是可以用安全级别较低的方式来存储密码,包括云端存储、移动端本地存储、第三方托管等等。如此,产品就可以在用户体验上做文章,设计新手友好的登录体验。
实现无助记词有多种技术路线,包括MPC、智能合约等。但不论何种技术,在获得使用便利性的同时,也都存在某种信任假设或是需要信任托管中介、或是需要信任智能合约,钱包的安全性并不唯一掌握在用户自己手中。对于安全要求极高的人来说,这未必是个最佳选择;但是对于普罗大众而言,无助记词钱包确实能够降低Web3的进入门槛。
2.无助记词钱包有哪些实现方案
本文介绍市面上主流的三种实现方案。
2.1MPC钱包
第一种主流的方式是MPC(Multi-partyComputation,多方计算)。这是一种链下的解决方案,是钱包之外的另一层技术,换言之可以和任何类型的钱包结合,使用了MPC技术来保管私钥的钱包都可以称作MPC钱包。
MPC钱包使用SSS或TSS技术生成私钥的多个分片,分发给多个参与方。在使用钱包时,各方通过自己的分片,在不暴露每一方分片的情况下,生成完整的数据来签名。
MPC钱包可以灵活地设置阈值策略,比如可以要求3个分片中至少2个分片参与签名,也可以要求2个分片全部参与签名。但是需要注意,虽然允许密码丢失,但是分片的存储方案仍然会影响钱包安全,比如由项目方托管的存储更多依赖于项目方不作恶。目前MPC钱包的阈值策略和存储方案并不统一,还没有一个行业标准;每种钱包所使用的不同方案,也体现了不同的安全设计策略。
MPC钱包的私钥分片方案可以有效避免单点故障:即使丢失了单个分片,也可以保全钱包内资产,而且可以在不改变私钥的情况下更新各个分片,做到密码恢复。此外,MPC钱包的所有实现都在链下,最终只生成一个私钥签名,因此相比智能合约的多签更节约资源。
典型的MPC钱包包括Web3Auth、ParticleNetwork、Openblock等。
Web3Auth采用SSS(ShamirSecretSharing,Shamir私钥分割)方案来进行密钥分割。SSS区别于TSS(ThresholdSignatureScheme,门限签名方案)的地方在于,SSS需要首先由单方生成一个私钥,然后再通过密码学分割私钥并分发给各方,签名时也必须先重构完整私钥,因此私钥仍然有在前端暴露的风险;而TSS不论在密钥生成还是签名的阶段,都是通过分布式计算进行、而不需要进行重构,因此避免了暴露风险。SSS方案使得Web3Auth存在一定安全缺陷,MPC钱包的后起之秀通常都使用TSS。
下图展示了2-3模型,也是Web3Auth采用的基础模型,即需要3个分片中的2个分片参与才能完成签名。其中,设备分片存储在用户的本地设备中;OAuth登录分片由节点网络进一步分割存储;备份分片由用户自行存储,可以存储在单独的设备或通过密码访问。
来源:https://web3auth.io/docs/overview/key-management/
用户在登录时,首先通过Gmail等第三方登录,获得OAuth登录分片;再用存储在本地设备的设备分片,就可以重构完整私钥。当用户登录新设备时,必须同时用到第三个分片,也就是备份分片来实现登录。此外,通过用户也可以自己设置不同的阈值模型,比如3-4、4-5等等。
来源:https://web3auth.io/docs/overview/web3auth-for-wallets
ParticleNetwork采用TSS,相对SSS更安全。其阈值模型采用2-2,客户和官方分别保管一部分分片。客户端的分片由Particle或第三方云服务提供商存储在云端,通过邮件OTP或社交登录验证后调用。但是,客户端密钥本质上不受保护,服务提供商可以访问该密钥,这一方案依赖于客户信任Particle或者第三方提供商。
获客方式是所有钱包都面临的难题,因为绝大部分ToC市场都已经被占据。Web3Auth和ParticleNetwork都采用ToB策略,通过服务项目方来获得用户量。值得一提的是,使用了ParticleNetowork钱包服务的Web3游戏PowerofWomen曾一度登顶美国区谷歌商店游戏总榜,成为了Web3游戏破圈的一个标杆案例。MPC钱包提供了丝滑的登录体验,对于FreetoPlay的游戏来说是一个非常重要的降低门槛的方式,可以预见未来低门槛的Web3项目很可能会大规模采用类似的登录体验。
来源:https://foresightnews.pro/article/detail/14777
2.2智能合约钱包
上文说的「MPC钱包」是使用了MPC技术来保管私钥的钱包,「智能合约钱包」则是钱包本身的一种类型。
在EVM有两种钱包类型,一种是EOA钱包(ExternallyOwnedAccounts,外部控制账户),由任何人通过私钥控制;另一种是CA钱包(ContractAccounts,合约账户),部署在区块链上,由合约代码控制,这也就是智能合约钱包。
目前我们使用的绝大多数钱包都是EOA钱包,如小狐狸。事实上,智能合约钱包由于可以自定义合约代码,实现的功能远比EOA钱包丰富,例如账户找回、预设执行逻辑等;但是目前普及度并不高,主要是由于使用成本高,每笔交易都会比EOA钱包多出一笔gasfee。因此,目前的使用场景主要在于「多签」这样的机构管理层面,个人用户采用较少。此外,智能合约钱包没有私钥、无法验签,因此交易实质上仍然需要由一个EOA钱包来调起,个人用户如果要用智能合约钱包,还需要另外保管EOA钱包密钥,仍然有较高的复杂度。
在针对个人用户的智能合约钱包赛道,Argent是一个先行者,2019年就开始运营至今。Argent包含两个产品:
1)移动端App钱包「Argent」,在ETH和zkSync上,实现无助记词功能;在ETH上还有「ArgentVault」产品,提供社交恢复功能;
2)浏览器插件钱包「ArgentX」,只在StarkNet上,是基于账户抽象(AccountAbstraction)的钱包,后文会再做解释。
我们先来看第一个产品,移动端钱包Argent,其中的「Vault」也就是传统的智能合约钱包。
前文说过,EVM上的智能合约钱包没有私钥、无法验签,发起交易时仍然需要另一个EOA钱包,因此使用Argent移动端时,实质上是首先生成了一个EOA钱包,接着再生成一个智能合约钱包「Vault」,这一步需要额外支付gasfee。
「无助记词功能」是在生成EOA钱包这一步,通过手机本地存储私钥来实现的。用户只需要邮箱或者电话就可以注册生成EOA钱包,私钥存储在手机本地、无法导出;与此同时会有一份备用私钥存储在云端,在用户更换设备时使用。具体步骤为:备份私钥被加密后存储在用户的iCloud云端,而解密密钥由Argent掌握。用户更换设备时,从iCloud获取加密后的私钥,再通过邮件电话验证后从Argent获取解密密钥,从而获得备份私钥。此外,Argent在发送解密密钥前等会先通知用户并等待两天,给用户充足的缓冲时间,防止盗窃行为。
Argent移动端产品界面
「社交恢复功能」在是在生成「Vault」后,通过智能合约钱包实现的,目前只在ETH上。值得一提的是,目前「Vault」功能只针对5万美元以上存款的用户才提供,门槛不低。设置Vault后,用户可以添加Guardians(守护人),可以是任何钱包,包括EOA或者CA,这些被指定的钱包在用户丢失密钥后可以签名生成一个新的账户设定为钱包Owner,以此来实现社交恢复。此外,钱包Owner还可以设置是否需要Guardians批准交易、是否在指定时间段内任意交易等等。
Argent移动端产品界面
根据Dune显示,目前有7万多个Argent合约钱包,总计存储了7.6万个ETH。
接着再来看第二个产品,浏览器插件「ArgentX」。事实上,Argent公司近期的高估值更多是由ArgentX之称的,因为这是StarkNet上的第一个钱包,也是基于账户抽象的钱包,代表了钱包赛道的新方向。
「账户抽象」是以太坊社区对于钱包发展方向的一个共识概念,可以简单概括为:将EVM中的实体(账户)与移动资产的所有权的实体(密钥对或签名者)进行解耦,换言之就是把所有账户都变成CA[2]。前文提到,EOA和CA是EVM中的两种账户类型,CA无法验签,因此必须依赖EOA主动发起交易;而在实现了账户抽象后,CA将不再依赖EOA就可以发起交易,实现更多的自定义功能。
听起来很美好,但这里仍然有很多问题,一是技术实现上仍然有很多工作,比如ArgentX现在的功能非常有限,还没有做到在ETH实现的Guardians社交恢复功能;二是智能合约钱包历来面临的gasfee问题依然存在,在Layer2上虽然有所好转,但是依然不如同链上的EOA钱包。gasfee问题最终的解决方案,是通过批量交易来摊薄额外支出,从这一点来讲智能合约钱包确实是未来的发展方向,有潜力做到比EOA钱包更便宜。当然,这就要看赛道上各路英雄的开发速度了。
2.3MPC+智能合约的混合方案
前文介绍的「MPC钱包」和「智能合约钱包」其实是两个维度的描述,前者是叠加在钱包之外的一层链下验证技术,后者则是钱包本身的一种类型(相对于EOA钱包)。这两种钱包并不冲突,事实上也确实存在两者相结合的混合方案:Unipass就是在智能合约钱包的基础上,叠加了MPC技术。
智能合约钱包的典型功能,就是可以设置多个密钥来管理同一个账户。例如在ArgentVault中,用户可以添加Guardians,在在用户丢失密钥后生成一个新的账户并设定为钱包Owner;在GnosisSafe中,用户可以添加多个钱包来实现门限签名。Unipass同样通过一系列具有角色权重的密钥来管理账户,较之ArgentVault和GnosisSafe更为丰富,主要有三种角色:
1)Owner:设定为这类角色的密钥可以控制账户,有最高权限;
2)Operator:这类密钥可以转账、交互合约、授权等,是用户最常用的角色;
3)Guardians:这类密钥可以在其他密钥丢失时,用来恢复账户,效果等同于ArgentVault的社交恢复。Unipass更先进的地方在于,ArgentVault只允许绑定EOA钱包作为Guardians,而Unipass则可以绑定邮箱而非钱包来做社交恢复,大大降低了用户门槛。
来源:https://docs.wallet.unipass.id/architecture/key-management
上述功能体现了智能合约钱包的特性,而MPC则体现在上图中的MasterKey中。MasterKey是默认会为用户生成的主密钥,包含Owner和Operator角色,可以说是Unipass账户中最重要的密钥,而这一密钥的生成管理使用了MPC技术。
MPC方案在分片存储上存在这样一个困境:如果客户端分片由用户保管,那么就存在丢失风险;如果客户端分片实质上仍然由第三方保管(如ParticleNetwork),就存在中心化风险,密码可以被服务商访问。Unipass选择了前者:客户端分片中的Password由用户自己保管,允许丢失,万一丢失的情况下可以通过Guardians来进行社交恢复。相对于纯MPC钱包,Unipass在保持去中心化的前提下,通过智能合约的社交恢复来保证账户安全。
来源:https://docs.wallet.unipass.id/architecture/master-key
此外,Unipass也支持ERC-4337协议,未来可以提供账户抽象所实现的功能。
3.总结
本文从「无助记词」的场景出发,探讨了几种典型的实现方式。第一种是以Web3Auth和ParticleNetwork为代表的纯MPC钱包,这类钱包仍然是EOA钱包,只是将私钥分片。MPC方案简单高效,但是面临中心化或者密钥丢失风险。第二种是以Argent为代表的智能合约钱包,Argent通过手机本地存储密钥来实现无助记词功能,并通过智能合约的社交恢复来保障账户安全,应对密钥丢失。第三种则是Unipass的MPC+智能钱包混合方案,将最主要的密钥通过MPC技术实现无助记词,再通过智能合约的角色权重管理来实现社交恢复,达到和Argent一样的目的。
可以看到,「无助记词」本质是这样一种取舍:用较低安全级别存储密钥的方式,来提升用户登录便捷度。相应地,要么用部份托管的手段来应对密钥丢失风险,要么通过智能合约的社交恢复来保证安全。智能合约钱包并不能直接实现无助记词功能,但是其社交恢复却能给低安全级别的密钥存储带来托底保障,而且去中心化的实现方式更符合Web3价值观。
不过另一个值得思考的问题是:什么样的用户需要无助记词钱包?Web3用户几乎人手多个小狐狸账号,是否会注册新钱包完全取决于项目方集成了什么钱包,在这样的背景下,无助记词钱包似乎更适合Web2用户。但是这部分用户原本就是需要教育、获客成本更高的群体,很难转化成高价值Web3用户。无助记词钱包面临着类似社交赛道的问题:如何吸引大批量、低资产属性的用户。
参考资料:
[1]https://mp.weixin.qq.net/s/TF2FCQDyyApzEVHQjxgZRg
[2]https://www.ethereum.cn/Technology/account-abstraction