目录
- 跨L2交易的使用者体验
- 帐户安全
- 监护人应该是谁或什么?
- 新使用者和应用内钱包
- 保护使用者免受诈骗和其它外部威胁
- 隐私
- 安全的链访问
- 理想的密钥库钱包
- Dapp安全
- 更长远的未来
特别感谢LirazSiri、YoavWeiss以及ImToken、Metamask和OKX开发人员的回馈和审核。
以太坊基础设施堆栈的一个关键层是钱包,但经常被核心L1研究人员和开发人员低估。钱包是使用者和以太坊世界之间的窗口,使用者只能从以太坊及其应用程式提供的任何去中心化、审查阻力、安全、隐私或其它属性中受益,前提是钱包本身也具有这些属性。
最近,我们看到以太坊钱包在改善使用者体验、安全性和功能方面取得了很大进展。这篇文章的目的是给出我自己对理想的以太坊钱包应具备的一些特性的看法。这并不是一个完整的列表;它反映了我的密码朋克倾向,它专注于安全和隐私,并且几乎可以肯定它在使用者体验方面是不完整的。然而,我认为愿望清单在优化使用者体验方面不如简单地根据回馈进行部署和叠代有效,因此我认为关注安全和隐私属性是最有价值的。
跨L2交易的使用者体验
现在有一个越来越详细的改善跨L2使用者体验的路线图,该路线图有短期部分和长期部分。在这里,我将谈论短期部分:即使在今天理论上仍然可以实施的想法。
核心思想是
您的钱包应该能够为您提供一个地址(遵循本ERC草案的风格),如下所示:
当某人(或某些应用程式)向您提供这种格式的地址时,您应该能够将其黏贴到钱包的「收件人」字段中,然后单击「发送」。钱包应该以任何可能的方式自动处理发送的数据:
- 如果您在目标链上已经有足够的所需类型的代币,请直接发送代币
- 如果您在另一条链上有所需类型的代币(或多个其它链),使用ERC-7683 等协议(实际上是一个跨链DEX)发送代币
- 如果您在同一链或其它链上有不同类型的代币,使用去中心化交易所将它们转换为正确链上正确类型的货币并发送。这应该需要使用者的明确许可:使用者将看到他们支付了多少费用,以及接收者收到了多少费用。
具有跨链地址支持的可能钱包接口的模型
上面的内容适用于「您复制黏贴地址(或ENS,例如,vitalik.eth@optimism.eth)有人向您付款」应用。如果dapp请求押金(例如,参见这个Polymarket示例)那么理想的流程是扩充功能Web3API并允许dapp发出特定于链的支付请求。然后,您的钱包将能够以任何需要的方式满足该请求。要使用者体验良好,还需要标准化getAvailableBalance请求,并且钱包需要认真考虑默认将使用者资产储存在哪些链上,以最大程度地提高安全性和转帐便利性。
特定于链的支付请求也可以放入QRCode中,移动钱包可以扫描QRCode。在面对面(或线上)消费者支付场景中,接收者将发出QR码或Web3API调用,表示「我想要链上X单位的代币YZ,带有参考ID或回调W」,钱包将可以以任何方式自由满足该请求。另一种选择是claim连结协议,其中使用者的钱包生成包含索赔授权的QR程式码或URL从他们的链上合约中获取一定数量的资金,接收者的工作就是弄清楚如何将这些资金转移到他们自己的钱包中。
另一个相关主题是gas支付。如果您在还没有以太币的L2上收到资产,并且需要在该L2上发送交易,钱包应该能够自动使用协议(例如RIP-7755)来支付链上的Gas你有以太币的地方。如果钱包希望你将来在L2上进行更多交易,它也应该只使用DEX来发送,例如。价值几百万Gas的以太币,以便未来的交易可以直接在那里花费Gas(因为这样更便宜)。
帐户安全
我对帐户安全挑战的概念化的一种方式是,一个好的钱包应该同时在两个方面发挥作用:
- 保护使用者免受钱包开发人员的骇客攻击或恶意攻击,
- 保护使用者免受自己的错误的影响。
左边的「错误」是无意的。然而,当我看到它时,我意识到它非常适合上下文,所以我决定保留它。
我对此的首选解决方案,超过十年来,一直是社交恢复和多签钱包钱包,具有分级访问控制。使用者的帐户有两层密钥:主密钥和N个监护人(例如N=5)。主键是能够进行低价值和非财务操作。大多数监护人需要执行(i)高价值操作,例如发送帐户中的全部价值,或(ii)更改主密钥或任何监护人。如果需要,可以允许主键通过时间锁执行高价值操作。
以上是基本设计,可以进行扩充功能。会话密钥和ERC-7715等权限机制可以帮助支持不同应用程式的便利性和安全性之间的不同平衡。更复杂的监护人架构,例如在不同阈值下具有多个时间锁定持续时间,可以帮助最大限度地提高成功恢复合法帐户的机会,同时最大限度地降低盗窃风险。
以上是基本设计,可以进行扩充功能。会话密钥和ERC-7715等权限机制可以帮助支持不同应用程式的便利性和安全性之间的不同平衡。更复杂的监护人架构,例如在不同阈值下具有多个时间锁定持续时间,可以帮助最大限度地提高成功恢复合法帐户的机会,同时最大限度地降低盗窃风险。
监护人应该是谁或什么?
对于经验丰富的加密货币使用者社群中的经验丰富的加密使用者来说,一个可行的选择是您的朋友和家人的密钥。如果您要求每个人为您提供一个新的地址,那么没有人需要知道他们是谁-事实上,您的监护人甚至不需要知道彼此是谁。如果他们没有向你通风报信,他们串通一气的可能性很小。然而,对于大多数新使用者来说,此选项不可用。
第二种选择是机构监护人:专门提供仅在收到您的请求的其它确认资讯时才签署交易的服务的公司:例如。确认码,或者针对高价值使用者的影片通话。人们长期以来一直试图制造这些,例如。我在2013年对CryptoCorp进行了介绍。然而,到目前为止,这些公司还不是很成功。
第三种选择是多个个人设备(例如电话、台式机、硬体设备钱包)。这可以工作,但对于没有经验的使用者来说也很难设置和管理。还存在设备同时丢失或被盗的风险,尤其是当它们位于同一位置时。
最近,我们开始看到更多基于万能钥匙。密钥只能备份在您的设备上,使其成为一种个人设备解决方案,也可以备份在云端中,使其安全性依赖于复杂的混合密码安全、机构和可信硬体设备假设。实际上,密钥对于普通使用者来说是一种宝贵的安全增益,但仅靠它们还不足以保护使用者的毕生积蓄。
幸运的是,有了ZK-SNARK,我们还有第四种选择:ZK包裹的中心化ID。这种类型包括zk-email、AnonAadhaar、MynaWallet等等。基本上,您可以采用多种形式(公司或政府)中心化ID,并将其转换为以太坊地址,您只能通过生成证明拥有中心化ID的ZK-SNARK来发送交易。
有了这个补充,我们现在有了广泛的选择,并且ZK包装的中心化ID具有独特的「新手友善性」。
为此,它需要通过简化且整合的UI来实现:您应该能够仅指定您想要「example@gmail.net」作为监护人,并且它应该自动生成相应的zk-email以太坊地址在引擎盖下。高级使用者应该能够将他们的电子邮件(以及可能保存在该电子邮件中的隐私盐值)输入到开源第三方应用程式中,并确认生成的地址是正确的。对于任何其它受支持的监护人类型也应该如此。
请注意,如今zk-email面临的一个实际挑战是它依赖于DKIM签名,该签名使用每隔几个月轮换一次的密钥,并且这些密钥本身并未由任何其它机构签名。这意味着如今的zk-email具有超出提供商本身的某种程度的信任要求;如果zk-email在受信任的硬体设备内使用TLSNotary来验证更新的密钥,则可以减少这种情况,但这并不理想。希望电子邮件提供商能够开始直接签署其DKIM密钥。今天,我建议一位监护人使用zk-email,但不建议大多数监护人使用:不要将资金储存在zk-email损坏意味着您无法使用资金的设置中。
新使用者和应用内钱包
新使用者实际上不希望在第一次注册时输入大量监护人。因此,钱包应该为他们提供一个非常简单的选择。一种自然的途径是在其电子邮件地址上使用zk-email、本地储存在使用者设备上的密钥(可能是万能密钥)以及提供商持有的备份密钥,进行2-of-3的选择。随着使用者变得更有经验或积累更多资产,在某些时候应该提示他们添加更多监护人。
钱包整合到应用程式中是不可避免的,因为试图吸引非加密使用者的应用程式不希望使用者同时下载两个新应用程式(应用程式本身,加上以太坊钱包)带来混乱的使用者体验。然而,许多应用程式钱包的使用者应该能够将他们的所有钱包连结在一起,这样他们就只需担心一个「访问控制问题」。最简单的方法是采用分层方案,其中有一个快速的「连结」过程,允许使用者将其主钱包设置为所有应用内钱包的监护人。Farcaster客户端Warpcast已经支持这一点:
保护使用者免受诈骗和其它外部威胁
除了帐户安全之外,当今的钱包还做了很多工作来识别虚假地址、网路钓鱼、诈骗和其它外部威胁,并尽力保护使用者免受此类威胁。与此同时,许多对策仍然相当原始:例如,要求点击才能将以太币或其它代币发送到任何新地址,无论您发送的是100美元还是100,000美元。在这里,不存在单一的灵丹妙药。这是针对不同类别威胁的一系列缓慢的持续修复和改进。然而,继续努力改进这里有很多价值。
隐私
现在是时候开始更加认真地对待以太坊的隐私了。ZK-SNARK技术现在已经非常先进,不依赖后门来降低监管风险的隐私技术(例如隐私池)越来越成熟,而像Waku和ERC-4337mempools这样的二级基础设施也慢慢变得更加稳定。然而,到目前为止,在以太坊上进行私人转帐需要用户明确下载并使用「隐私钱包」,例如Railway(或用于隐形地址的Umbra)。这增加了极大的不便并减少了数量愿意进行私人转帐的人。解决办法是私人转帐需要直接整合到钱包中。
一个简单的实现如下。钱包可以将使用者资产的一部分作为「私人余额」储存在隐私池中。使用者进行转帐时,会先自动退出隐私池。如果使用者需要接收资金,钱包可以自动生成一个隐形地址。
此外,钱包可以自动为使用者参与的每个应用程式生成一个新地址(例如,defi协议)。存款将来自隐私池,提款将直接进入隐私池。这允许使用者在任何一个应用程式中的活动与其在其它应用程式中的活动取消连结。
这项技术的一个优点是,它不仅是保护隐私的资产转移的自然途径,也是保护隐私的身份的自然途径。身份已经发生在链上:任何使用身份证明门控的应用程式(例如GitcoinGrants)、任何代币门控聊天、以太坊遵循协议等等都是链上身份。我们希望这个生态系也能保护隐私。这意味着使用者的链上活动不应收集在一个地方:每个项目都应单独储存,并且使用者的钱包应该是唯一具有「全局视图」的东西,可以同时看到您的所有证明。每个使用者拥有多个帐户的原生生态系有助于实现这一目标,EAS和Zupass等链下证明协议也是如此。
这代表了中期内以太坊隐私的务实愿景。尽管可以在L1和L2引入一些功能以使隐私保护传输更加高效和可靠,但它现在就可以实现。一些隐私倡导者认为,唯一可以接受的事情是所有事物的完全隐私:加密整个EVM。我认为这可能是理想的长期结果,但它需要对程式撰写模型进行更根本的重新思考,而且目前还没有达到准备在以太坊上部署的成熟水准。我们确实需要默认隐私以获得足够大的匿名集。然而,首先关注(i)帐户之间的转帐,以及(ii)身份和与身份相关的应用(例如私有证明)是务实的第一步,更容易实现,而且钱包现在就可以开始使用。
以太坊钱包也需要成为数据钱包
任何有效的隐私解决方案的一个后果是,无论是用于支付、身份还是其它应用,它都会产生使用者储存链下数据的需求。这在TornadoCash中很明显,它要求使用者保存每张代表0.1-100以太币存款的「票据」。更现代的隐私协议有时会在链上保存加密的数据,并使用单个私钥对其进行解密。这是有风险的,因为如果密钥泄露,或者量子计算机变得可行,数据就会全部公开。EAS和Zupass等链下证明对链下数据储存的需求更为明显。
钱包不仅需要成为储存链上访问权限的软件,还需要成为储存您的私人数据的软件。所有我们需要围绕稳健保证访问权限控制来解决的问题,我们还需要围绕稳健保证数据的可访问性和不泄漏来解决。也许这些解决方案可以叠加在一起:如果您有N个监护人,请在这N个监护人之间使用M-of-N秘密共享来储存您的数据。数据本质上更难保护,因为你无法撤销某人的数据市占率,但我们应该提出尽可能安全的去中心化托管解决方案。
安全的链访问
如今,钱包相信他们的RPC提供商会告诉他们有关链的任何资讯。这是一个漏洞,有两个方面:
- RPC提供商可能会尝试通过向他们提供虚假资讯来窃取金钱,例如。关于市场价格。
- RPC提供者可以提取私人资讯关于使用者正在互动的应用程式和其它帐户。
理想情况下,我们希望堵住这两个漏洞。为了解决第一个问题,我们需要L1和L2的标准化轻客户端,它们可以直接验证区块链共识。Helios已经这样做了L1,并且一直在做一些前期工作来支持一些具体的L2s。为了正确覆盖所有L2,我们需要一个标准,通过该标准代表L2的配置合约(也用于特定于链的地址)可以声明一个函数,可能以类似于ERC-3668的方式,包含获取最近状态根并验证证明的逻辑州和针对这些州根的收据。这样我们就可以有一个通用轻客户端,允许钱包安全地验证L1和L2上的任何状态或事件。
为了隐私,当今唯一现实的方法是运行您自己的完整节点。然而,现在L2正在进入人们的视野,运行所有内容的完整节点变得越来越困难。这里相当于轻客户端的是私有资讯检索(PIR)。PIR涉及保存所有数据副本的伺服器和向伺服器发送加密请求的客户端。伺服器对所有数据执行计算,返回客户端所需的数据,并加密到客户端的密钥,而不会向伺服器透露客户端访问了哪条数据。
为了保持伺服器的诚实,各个数据库项目本身就是Merkle分支,因此客户端可以使用轻客户端来验证它们。
PIR(深潮注:通常指的是「私有资讯检索」(PrivateInformationRetrieval),是一种允许使用者从数据库中检索资讯而不泄露所检索资讯的协议或技术。)的计算量非常大。解决这个问题有几种途径:
- 用蛮力:演算法或专用硬体设备的改进可能会使PIR运行得足够快。这些技术可能取决于预处理:伺服器可以为每个客户端储存加密和打乱的数据,并且客户端可以查询该数据。以太坊环境中的主要挑战是使这些技术适应快速变化的数据集(就像国家一样)。这使得即时计算成本更低,但很可能使总计算和储存成本更高。
- 削弱隐私要求:例如,每次查找只能有100万个「mixins」,因此伺服器将知道客户端可以访问的一百万个可能值,但不知道任何更细的粒度。
- 多伺服器PIR:如果您使用多个伺服器,并且这些伺服器之间的诚实性假设为1-of-N,那么PIR演算法通常会更快。
- 匿名而不是机密性:可以通过混合网路发送请求,从而隐藏请求的发送者,而不是隐藏请求的内容。然而,有效地这样做不可避免地会增加延迟,从而恶化使用者体验。
在以太坊环境中找出正确的技术组合来最大化隐私,同时保持实用性是一个开放的研究问题,我欢迎密码学家尝试这样做。
理想的密钥库钱包
除了传输和状态访问之外,需要在跨L2上下文中顺利工作的另一个重要工作流程是更改帐户的验证配置:无论是更改其密钥(例如恢复),还是对帐户的整个逻辑进行更深层次的更改。这里有三层解决方案,按照难度递增的顺序排列:
- 重播更新:当使用者更改其配置时,授权此更改的消息将在钱包检测到使用者拥有资产的每个链上重播。有可能,消息格式和验证规则可以独立于链,因此可以在尽可能多的链上自动重播。
- L1上的密钥库:配置资讯位于L1上,L2上的钱包使用L1SLOAD读取它或远程静态呼叫。这样,只需要在L1上更新配置,配置就会自动生效。
- L2上的密钥库:配置资讯存在于L2上,L2上的钱包使用ZK-SNARK读取它。这与(2)相同,除了密钥库更新可能更便宜,但另一方面读取更昂贵。
解决方案(3)特别强大,因为它可以很好地与隐私。在正常的「隐私解决方案」中,使用者拥有秘密s,在链上发布「叶子值」L,使用者证明L=hash(s,1)且N=hash(s,2)对于他们控制的一些(从未泄露的)秘密。无效符N被发布,使得确保同一片叶子的未来支出会失败,而不会透露L这取决于使用者s安全。一个恢复友善的隐私解决方案会说:s是一个位置(例如地址和储存槽)onchain,使用者必须证明状态查询:L=hash(sload(s),1)。
Dapp安全
使用者安全中最薄弱的环节通常是dapp。大多数时候,使用者通过访问网站与应用程式互动,网站隐式地从伺服器即时下载使用者介面程式码,然后在浏览器中执行。如果伺服器被骇客攻击,或者DNS被骇客攻击,使用者将获得界面的虚假副本,这可能会诱骗使用者执行任意操作。交易模拟等钱包功能对于降低风险非常有帮助,但它们还远非完美。
理想情况下,我们会将生态系转移到链上内容版本控制:使用者将通过其ENS名称访问dapp,该名称将包含接口的IPFS哈希值。更新接口需要来自多签钱包或DAO的链上交易。钱包会向使用者显示他们是否正在与更安全的链上界面或安全性较低的Web2界面进行互动。钱包还可以向使用者显示他们是否正在与安全链互动(例如阶段1+、多重安全审核)。
对于注重隐私的使用者,钱包还可以添加偏执模式(paranoidmode),要求使用者点击接受HTTP请求,而不仅仅是Web3操作:
偏执模式可能的界面模型
更先进的方法是超越HTML+Javascript,并用专用语言(可能是Solidity或Vyper上相对较薄的覆盖层)编写dapp的业务逻辑。然后,浏览器可以自动生成任何所需功能的UI。OKContract已经在这样做了。
另一个方向是加密经济资讯防御: dapp开发人员、安全公司、链部署者和其它人可以建立一笔债券,如果dapp被骇客攻击或以高度误导性的方式伤害使用者,则该债券将支付给受影响的使用者(经确定)由一些链上裁决DAO。钱包可以向使用者显示基于债券大小的分数。
更长远的未来
以上都是在传统界面的背景下进行的,其中涉及指向和单击事物以及将事物输入到文本字段中。然而,我们也正处于范式发生更深刻变化的风口浪尖:
- 人工智慧:这可能会导致我们从点击式打字范式转向「说出你想做的事情,机器人就会弄清楚」的范式
- 脑机接口:既有眼动追踪等「温和」方法,也有更直接甚至侵入性的技术
- 客户端主动防御: Brave浏览器主动保护使用者免受广告、追踪器和许多其他不良物件的侵害。许多浏览器、扩充应用程式和加密钱包都有整个团队积极致力于保护使用者免受各种安全和隐私威胁。这些「积极的守护者」在未来十年只会变得更加强大。
这三种趋势共同将导致人们对界面工作方式进行更深入的重新思考。通过自然语言输入、眼球追踪或最终更直接的脑机接口,再加上您的历史记录(也许包括短信,只要所有数据都在本地处理),「钱包」可以清楚直观地了解您想要什么去做。然后,人工智慧可以将这种直觉转化为具体的「行动计划」:一系列链上和链下互动来完成你想要的事情。这可以大大减少对第三方使用者介面的需求。如果使用者确实与第三方应用程式(或其它使用者)进行互动,人工智慧应该代表使用者进行对抗性思考,识别任何威胁并提出避免威胁的行动计划。理想情况下,这些人工智慧应该有一个开放的生态系,由具有不同偏见和激励结构的不同群体产生。
这些更激进的想法取决于技术今天非常不成熟,所以我今天不会把我的资产放入依赖它们的钱包中。然而,类似的事情似乎很明显是未来的趋势,因此值得开始朝这个方向更积极地探索。