背景
上个月,我发表了智能钱包的发展概况介绍。许多人质疑智能钱包是中心化或者说托管钱包,也就是说钱包运营商可以任意处置资产。这种看法并不准确,本文将分析智能钱包的自主权,并举例说明如何完全控制你的智能钱包。
什么是自主权?
自主权意味着用户可以完全控制该账户。对于以太坊外部账户(EOA),用户拥有该地址对应的私钥即拥有自主权。如果用户不持有私钥,私钥由第三方保管,则该账户是托管账户。对于智能钱包的合约账户,由于账户逻辑多样,自主权问题要复杂得多。大致可以从四个方面进行判断:(1)账户的最高权限是什么?(2)指定的第三方(受托人)是否可以完全接管账户或冻结资产?(3)用户是否可以在无需第三者协助的情况下发送交易?(4)账户合约是否可以升级,用户可以拒绝吗?
01 受托人可以对账户和资产做什么?
大多数智能钱包通过链下身份验证实现账户恢复和紧急操作,这意味着指定的第三方(受托人)可以改变账户所有者。受托人可以是钱包服务提供者、硬件钱包、用户抄写在纸上的种子短语(用户拥有的其他钱包),也可能是家庭或可信赖的朋友。不同的智能钱包授予受托人不同的权限:
· 更改账户的所有者。
· 为该账户添加新所有者(账户可能由一个所有者,或m个所有者中的n个控制)。
· 协助加速账户安全操作。
· 冻结或限制账户。
引入受托人增加了账户的可靠性,也增加了额外信任的风险。但是,受托者的权限是受限的,并且其权限可被账户所有人撤销,因此用户仍然具有最高权限。尽管如此,由于大部分用户选择了默认受托人,默认受托人仍然可能对用户发起攻击(无论是出于恶意或是受托人自身受到攻击)。
在智能合约层面,受托人可以是任何账户。尽管如此,大多数产品只支持使用由钱包提供商提供的默认受托人,该受托人一般通过电子邮件,电话号码和身份证件对用户进行身份验证。
02 账户的最高权限是什么?
账户所有者具有账户的最高权限,可以更改账户的一切状态。尽管受托人具有更改账户所有者或冻结账户等特权,但账户所有者可以阻止恶意行为行为并删除受托人。账户所有者是具有预定义逻辑的单个私钥或一组私钥对应的地址,以多种形式保存。
· 所有者是保持离线状态的私钥。-例如,MYKEY
· 所有者是私钥,保存在本地(例如,在智能手机中),但是无法导出。-例如Argent,Dharma
· 所有者是保存在本地并且可以导出的私钥。-例如,Monolith
· 所有者是加密保存在云上并且可以导出的私钥。-例如Authereum
· 所有者是一组门限私钥,其中部分私钥可以导出。例如,Gnosis,Dapper
· 所有加密钱包都在尝试保护私钥,以避免密钥丢失带来损失。智能钱包除提示用户备份外,还可以采取不同的方法来降低单点风险。
在所有这些产品中,我最有兴趣介绍MYKEY中的设计。MYKEY将权限分为管理权限和操作权限。管理员密钥具有最高权限,但无法执行常规事务;因此,它始终可以保持脱机状态。借助延迟机制和紧急联系人的协助,管理员密钥的泄漏仍不会造成致命伤害。
03 我可以不借助钱包界面发送交易吗?
智能钱包使用元交易来广播交易,任何持有有效签名的用户都可以广播交易。通常,大多数用户使用钱包界面发送依赖于钱包提供者的中继服务的交易。如果提供商停止中继服务怎么办?智能钱包提供不同的解决方案。对于大多数智能钱包,签名密钥是所有者密钥或所有者密钥之一。对于MYKEY用户,则需要使用操作密钥进行普通交易的签名。
· 签名密钥可以导出,因此用户可使用其它客户端构建交易。例如,MYKEY,Monolith,Gnosis,Dapper。
· 签名密钥无法导出,但是用户可以从钱包中提取原始签名。例如,Argent。
· 签名密钥或签名都无法导出,因此用户需要通过受托者更改密钥。例如Dharma。
与普通钱包不同,智能钱包仅签署交易;交易构建和广播由后端服务器完成。在不依赖钱包界面的情况下发送交易,可以在钱包提供商不工作时保持账户的可用性。但是,对于普通人来说,使用etherscan或CLI客户端(geth,parity…)打包交易并不容易,因此这仅适用于硬核玩家。
04 如果我不想升级账户合约该怎么办?
默认情况下,以太坊中的智能合约是不可升级的。但是,为了添加新的功能特性或修复潜在的漏洞,大多数项目都会创建可升级的合约。这种可升级的特性对账户安全构成了威胁。
大多数智能钱包都采用模块化设计,升级意味着启用新模块,此外困难伴随对旧模块的禁用。启用或禁用模块需要身份验证,因此看上去升级是用户自愿选择的。但是大多数智能钱包会强制用户进行升级,否则,他们将无法再使用钱包客户端,只能使用所有者密钥来操作账户。
如何进行完美升级?
什么是完美升级
完美的合约升级具备以下特性:无需信任、安全、低成本。
如何做到无需信任?
无需信任意味着用户可以自由选择。在实现方面,这意味着升级需要用户授权,或者提供足够长的新合约生效期,供用户迁移到另一个账户。
01 谁可以升级?
目前,所有智能钱包只允许“特权用户”部署新的账户合约。“特权用户”是钱包提供商,可以是外部账户多重签名账户。尚无明显的趋势表明,智能钱包会转变为DAO治理。
02 用户被迫升级吗?
智能钱包用户有权选择是否升级,有两种主要的实现方式。
升级不是全局的,每个用户都对升级进行链上授权。
升级是全局的,但是有足够长的公告和等待期,任何对此有疑议的用户都可以选择迁移账户。
以上是理想情况,现实情况是用户的选择权和知情权还不是那么完美。在情况1中,用户不能在拒绝升级的情况下使用钱包(强制更新),而在情况2中,用户可能会错过警告通知。
03 升级是立即的吗?
升级过程需要一个公告期,以便更多的用户知晓。等待时间可以是链上或链下的,前者更安全,而后者保持了灵活性,可以更好地应对紧急情况。
但是,大多数智能钱包没有标准化的升级过程。MYKEY有一个 网页 列出升级规则和升级历史。
如何使其安全?
安全是钱包面临的最关键问题。为确保资产安全,再多努力都不为过。常见的方法包括安全审计和漏洞赏金活动。
01安全审计
优秀的安全机构正在对所有智能钱包进行全面的审计,在每次升级之前,必须对计划中的代码进行良好的审核。目前,大多数智能钱包尚未披露所有审核报告。「我正在设计针对所有智能钱包的安全披露网站,如果有兴趣请联系我」
02 漏洞赏金
再好的审计机构也不能保证合约百分之百安全,必须将源代码供更多专家检查,这就是为什么我们需要通过悬赏的方式向公众邀约。2020年6月,Open Zeppelin 公开了 Argent 的漏洞,并帮助他们修复了易受攻击的智能合约。Open Zeppelin获得高严重等级的奖励,最高可达25,000美元。据我所知, Argent, Monolith, Gnosis, MYKEY和 Authereum 都有其漏洞赏金计划。
如何使其更便宜?
升级成本是一个讨论较少的问题。如果升级是全局的,那么其成本不是问题。但是,如果升级需要每个用户的授权,则意味着10亿用户的升级需要10亿笔链上交易。这是否合理,是否实用?zkRollup技术对此有帮助吗?
如何完全控制智能钱包账户?
本文不会提供任何操作手册来让您“退出”智能钱包。我只想指出思路和重点。此外,并非所有智能钱包都在下面列出。
Argent
自己拥有一个监护人很重要,以防万一您丢失了手机并且官方监护人无法使用。您可以使用 https://security.argent.xyz/ 进行操作。目前支持Metamask,Ledger Nano和Trezor。
MYKEY
如果MYKEY无法正常工作,请务必确保您的恢复短语(管理员密钥)安全,请遵循 涅磐计划 并使用 工具 (https://github.com/mykeylab/mykey-tx-tool) 来控制您的账户。
Monolith
照顾好您的种子短语,然后阅读 本文 (https://medium.com/monolith/your-monolith-account-is-due-for-an-upgrade-35b1814a01ed)。
结论
大多数智能钱包可保证自主权,即使钱包服务商停止服务,用户仍可以控制其身份和财产。默认的受托人是系统的风险之一,但用户可以选择信任钱包服务商,或自行添加受托人来降低单点风险。此外,需要特别注意升级过程中的信任和安全问题。智能钱包可以提供更加透明和标准化的升级,以确保不受信任和安全。