EIP-3074 签名中的调用者字段非常重要,一个不良的调用者可能会窃取你的资金。
原文作者:lightclients
原文来源:twitter
原文编译:MetaCat
在 EIP-3074 之后,一个错误的签名将能够耗尽你以太坊账户上的余额。
是的,这是真实的。
EIP-3074联合作者在这此!在事情变得更加失控之前,让我先暂时平息一下这个担忧。
首先:我没有听说目前有任何钱包,支持签署无前缀数据。这意味着目前没有钱包支持 EIP-3074。无论你浏览多少个控制面板或打开多少个高级功能。现在无法签署 EIP-3074 的消息。
你签署「登录」dapp 的消息使用的是基于 EIP-191 的完全不同于 EIP-3074 的标准。这会将以下数据添加到你签名的消息中:
这就是为什么不可能欺骗登录 dapp 的人来实际签署有效的以太坊交易。
交易以单字节值作为前缀:
更多信息参见:https://github.com/ethereum/execution-specs/tree/master/lists/signature-types
EIP-3074 计划使用前缀 0x04。这将消除它与以太坊中所有其他类型的可签名数据的歧义。钱包必须主动选择允许用户签署这些消息。
基于钱包集成 EIP-3074 的具体方式,可能会造成用户更容易被利用的情况。要理解这一点,我们需要确保自己理解 EIP-3074 签名的工作原理。
构建签名的身份验证消息具有以下字段。重要的是,它包括一个调用者地址。这是 AUTH 认为签名有效的唯一地址。
对于要耗尽余额的帐户,必须同时满足以下两点:
1) 钱包需要允许用户签名到任何调用者地址(invoker address),
2) 用户必须没有验证调用者(invoker)是否可信。
这意味着,用户执行了其中任何一条都不会有问题。
我们希望钱包软件明白:EIP-3074 调用者(invoker)更类似于钱包软件代码的扩展而不是合约。钱包不允许用户自由地运行任意代码并访问其 pk(私钥);同样,他们不应该允许用户任意委托(delegate)他们的以太坊帐户。
因此,如果钱包软件不安全地集成 EIP-3074,并且用户不验证他们正在交互的调用者,则可能会委托给恶意调用者。但是,依然可以通过从 EOA 发送单个 tx 来撤消。这将撤销所有「正在进行的」AUTH 签名。
至少,钱包软件应该让签署 EIP-3074 消息成为一件大事,就像导出你的私钥级别的大事一样。
假设钱包安全地集成了 3074,帐户仍然有可能被盗。这是批量交易的基本属性。它允许你轻松发送多个操作,就像它允许攻击者诱骗你将一批资产发送到他们控制的地址一样。
钱包软件必须清楚地显示你正在签名的每个操作。这样,很容易注意到「我只打算进行一笔交易,但这个签名请求让我还进行了十几次交易」。如果通过盲签名(blind signing)进行批处理,则无法检测到这一点。
是的,EIP-3074 非常信任钱包。但是,我们已经用我们的私钥安全地信任他们了!没有更高层次的信任。
可以安全地集成和使用 EIP-3074。如果任何钱包对如何执行此操作有疑问,请随时与我们联系。作为 EIP-3074 的作者,我们目前正在考虑如何才能最好地帮助该标准的下一阶段发展。
在过去的几年里,我们花了很多时间来开发关于如何使用和滥用它的假设场景。我们很高兴这些想法开始投入生产。但我们也认识到这是最困难的部分。
总结一下 EIP-3074 之后,单个错误签名会耗尽你的以太坊帐户余额的担忧:
- 目前钱包不支持 EIP-3074 类型的签名,该签名遵循新的格式。
- EIP-3074 签名中的调用者字段非常重要。一个不良的调用者可能会窃取你的资金。
- 钱包需要确保调用者地址是可信的。这类似于钱包目前如何防止执行任意代码。
- EIP-3074 中的批量交易仍然会开启一个世界,恶意行为者可以欺骗你签署转移资产的交易。钱包需要清楚地显示当签署 EIP-3074 消息时会发生什么。
- 是的,我们对钱包有很高的信任,但用户已经将私钥托付给它们,这是最高级别的信任。
EIP-3074 与 EIP-4337
EIP-3074 对账户抽象(Account Abstraction)提供者来说是一件非常好的事情,因为它对我们的客户非常有益。
- ERC-4337 是将新用户引入加密领域的最佳方式。
- EIP-3074 是将现有用户引入智能账户的最佳方式。
本文来自MetaCat,经授权后发布,本文观点不代表星空财经BlockGlobe立场,转载请联系原作者。