作者:lightclients

翻译:MetaCat

EIP-3074 后,恶意的签名会导致以太坊账户资金被耗尽吗?

在 EIP-3074 之后,一个错误的签名将能够耗尽你以太坊账户上的余额。

是的,这是真实的。

EIP-3074 联合作者在这此!在事情变得更加失控之前,让我先暂时平息一下这个担忧。

首先:我没有听说目前有任何钱包,支持签署无前缀数据。这意味着目前没有钱包支持 EIP-3074。无论你浏览多少个控制面板或打开多少个高级功能。现在无法签署 EIP-3074 的消息。

你签署「登录」dapp 的消息使用的是基于 EIP-191 的完全不同于 EIP-3074 的标准。这会将以下数据添加到你签名的消息中:

0x19 <0x45 (E)>

这就是为什么不可能欺骗登录 dapp 的人来实际签署有效的以太坊交易。

交易以单字节值作为前缀:

0x01 - 2930 tx0x02 - 1559 tx0x03 - 4844 tx

更多信息参见:https://github.com/ethereum/execution-specs/tree/master/lists/signature-types

EIP-3074 计划使用前缀 0x04。这将消除它与以太坊中所有其他类型的可签名数据的歧义。钱包必须主动选择允许用户签署这些消息。

基于钱包集成 EIP-3074 的具体方式,可能会造成用户更容易被利用的情况。要理解这一点,我们需要确保自己理解 EIP-3074 签名的工作原理。

构建签名的身份验证消息具有以下字段。重要的是,它包括一个调用者地址。这是 AUTH 认为签名有效的唯一地址。

EIP-3074 后,恶意的签名会导致以太坊账户资金被耗尽吗?

对于要耗尽余额的帐户,必须同时满足以下两点:

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-3074 与EIP-4337

EIP-3074 对账户抽象(Account Abstraction)提供者来说是一件非常好的事情,因为它对我们的客户非常有益。

  • ERC-4337 是将新用户引入加密领域的最佳方式。
  • EIP-3074 是将现有用户引入智能账户的最佳方式。