阈值加密内存池的反合谋机制

本文探讨了一种针对阈值加密内存池的反合谋机制,旨在解决公共区块链(如以太坊)中恶意提取最大可提取价值(MEV)的问题。该机制通过要求区块提议者对包含解密交易的承诺进行签名,并将该签名作为解密密钥,从而确保只有在提议者承诺包含交易后才能解密交易,从而降低了对密钥管理者的信任。

感谢 Luis Bezzenberger 对本文的宝贵意见。

要点:加密内存池是一种很有前景的方法,可以防止在以太坊等公共区块链中恶意提取最大可提取价值 (MEV)。阈值加密是建立加密内存池的一个很好的选择,但不幸的是,它关键性地依赖于阈值信任假设:即在一个预定义的参与方集合(阈值委员会)中,至少有一个子集是诚实地行动的。在这篇文章中,我们探索了一种建立阈值加密内存池的方法,即使阈值委员会中的所有参与方都串通,该内存池也能保持安全。

区块链网络中的最大可提取价值 (MEV) 描述的是某些参与者可以通过操纵交易执行顺序来获取的价值,这通常以牺牲其他用户为代价。事实上,据估计,迄今为止从以太坊用户那里窃取的 MEV 总额在 11 亿到 30 亿美元之间。加密内存池是一种很有前景的方法,可以通过加密交易直到其执行顺序被确定来防止恶意 MEV 提取。建立加密内存池的一个好方法是阈值加密,这是一种公钥加密方案,其中解密密钥在参与方委员会中分成若干份。也就是说,为了解密密文,需要来自这些参与方中至少达到某个阈值数量的参与方的协作。如果参与的参与方数量少于此数量,则不会泄露有关明文或解密密钥的任何信息。这种原语可以按如下方式启用加密内存池:

  1. 阈值委员会最初生成一个公钥,并共享相应私钥的份额。

  2. 用户使用阈值委员会的公钥加密他们的交易。

  3. 一旦加密交易的位置在某个区块的顶部被“固定”,委员会就会联合解密密文并揭示该交易。

虽然阈值加密是一种很有前景的方法,但它依赖于阈值信任假设——即少于阈值数量的委员会成员会恶意行事。如果超过此阈值,恶意方可能会串通提前解密交易,使他们能够了解加密交易的内容,从而提取恶意 MEV。在这篇文章中,我们探索了一种用于阈值加密内存池的反串通机制,该机制有效地降低了阈值信任假设。我们以使用 Shutter 阈值加密方案的加密内存池为例来说明该机制,并在后面讨论它可以推广到基本上任何阈值加密内存池。

回顾:Shutter 加密内存池

Shutter 本质上是 Boneh-Franklin 基于身份的加密 (IBE) 方案 的一种阈值变体。IBE 方案由一个主公钥/私钥对 (mpk, msk)(mpk,msk) 组成,它允许相对于某个身份 ii 和主公钥 mpkmpk 加密消息 mm。在下文中,我们将 Shutter 加密表示为 ct \leftarrow Shutter.Encrypt(mpk, i, m)ct←Shutter.Encrypt(mpk,i,m)。生成的密文 ctct 可以通过从主私钥 mskmsk 和身份 ii 派生出一个所谓的身份私钥 sk_iski 并使用 sk_iski 进行解密来解密。我们将解密表示为 m \leftarrow Shutter.Decrypt(sk_i, ct)m←Shutter.Decrypt(ski,ct)。通常,在 IBE 方案中,主私钥由受信任的机构维护,但在 Shutter 的情况下,它分布在参与方委员会(所谓的 Keypers)中,因此没有任何一个参与方可以访问完整的密钥。也就是说,对于 Shutter 加密内存池,用户可以发送其在 mpkmpk 和身份 ii 下加密的交易 txtx。然后,一旦加密交易的位置被固定在某个区块的顶部,Keypers 就会联合派生出身份私钥 sk_iski 并解密该交易。

将密文的位置固定在区块中是什么意思?

只有当密文在区块中的位置在解密之前被固定在顶部时,才能有效地通过阈值加密来防止 MEV。否则,区块提议者可以简单地等待密文被解密,并根据其内容重新排序其执行。有几种方法可以确保固定的位置,例如包含列表,如 FOCIL 或提议者承诺(例如,参见 Commit-Boost)。在这篇文章中,我们专注于利用提议者承诺的阈值加密内存池设计——我们最近 在这里 详细探讨了一个概念。稍后,我们将讨论在解密后如何将这种方法推广到其他强制执行交易顺序的方法。

提议者承诺允许区块提议者对其即将提议的区块中的空间分配做出承诺。这种承诺的一个流行的用例是交易预确认,其中区块提议者承诺将某些交易包含到其区块中,从而向交易发送者保证一旦区块完成,他们的交易将确实被执行。从高层次上讲,提议者承诺是签名声明,如果提议者不遵守其承诺,它可能会被削减,从而阻止恶意行为。Commit-Boost 是一个主要的提议者承诺标准化工作,它规定承诺可以是例如现有验证者密钥下的 BLS 签名。

在加密内存池的上下文中,提议者承诺可以扩展到包含加密交易。提议者可能会承诺将解密的密文包含在区块中,前提是生成的交易是有效的。该承诺可以是一个签名的声明“如果密文ctct包含一个有效的交易,并且如果它被及时解密,我将把加密在ctct中的交易包含在kk区块的顶部”。

使用提议者承诺的 Shutter 加密内存池的流程。\ 使用提议者承诺的 Shutter 加密内存池的流程。1435×802 122 KB

反串通机制

高层次的想法。 反串通机制的主要思想是使 Keypers 在技术上无法在区块提议者做出有效的承诺将解密的交易包含在区块顶部之前,从加密内存池中解密密文。这确保了如果一个密文被解密,生成的交易将被包含到下一个区块中,否则提议者将被削减。如果不存在这样的承诺,那么 Keypers 就无法解密该密文。在下文中,我们将在更技术的层面上描述这种方法。

技术细节。 反串通机制的核心是先前的工作所做的以下观察(例如,1, 2):BLS 签名可以用作 Boneh-Franklin 加密方案中的解密密钥。由于 Shutter 基于 Boneh-Franklin 方案,因此 Shutter 也是如此。让我们更详细地介绍一下:

  • 以太坊中使用的 BLS 和 Shutter 在相同的椭圆曲线 BLS12-381 上运行
  • BLS 公钥和私钥对也可以用作 Shutter 的主密钥对
  • Shutter 中的身份私钥具有 BLS 签名的结构,即身份 ii 的身份私钥为 sk_i = H(i)^{msk}ski=H(i)msk,sk_iski 是在私钥 mskmsk 下 ii 的有效 BLS 签名

所有这些都意味着提议者的 BLS 签名可以用作 Shutter 的解密密钥。

然后,反串通机制的工作方式如下:令 mpkmpk 为 Shutter 委员会的主公钥,令 pkpk 为提议者的 BLS 公钥。然后,用户按如下方式加密其交易 txtx:

  1. 像以前一样,用户使用 mpkmpk 和身份 ii 加密 txtx,即用户计算 ct_1 \leftarrow Shutter.Encrypt(mpk, i, tx)ct1←Shutter.Encrypt(mpk,i,tx)
  2. 此外,用户在 pkpk 和另一个身份 jj 下加密 ii,即用户另外计算 ct_2 \leftarrow Shutter.Encrypt(pk, j, i)ct2←Shutter.Encrypt(pk,j,i)

然后,用户将两个密文 (ct_1, ct_2)(ct1,ct2) 连同身份 jj 发送到加密内存池。请注意,在不知道身份 ii 的情况下,Keypers 无法解密 ct_1ct1,因此他们无法了解交易 txtx。最终,提议者通过发送身份 jj 上的 BLS 签名来承诺将 txtx 包含在其区块的顶部,即 \sigma = H(j)^{sk}σ=H(j)sk。此签名本质上是身份 ii 和公钥 pkpk 的身份私钥,即可以通过计算 i \leftarrow Shutter.Decrypt(\sigma, ct_2)i←Shutter.Decrypt(σ,ct2) 来解密身份 ii。现在已知身份 ii,Keypers 可以通过首先派生身份私钥 sk_iski 然后计算 tx \leftarrow Shutter.Decrypt(sk_i,ct_1)tx←Shutter.Decrypt(ski,ct1) 来解密交易 txtx。

使用提议者承诺和反串通机制的 Shutter 加密内存池的流程。\ 使用提议者承诺和反串通机制的 Shutter 加密内存池的流程。1513×819 143 KB

只要提议者和 Keypers 没有串通,Keypers 在技术上就不可能在提议者承诺包含 txtx 之前解密 txtx。请注意,在提议者发送其承诺之后解密 txtx 不会造成任何危害,因为该交易已被承诺包含在区块的顶部。

讨论和该方法的局限性

防止 Keypers 和提议者之间的串通。 所提出的机制通过确保只有在当前区块提议者承诺将解密的密文包含在下一个区块的顶部时才能进行解密,从而减轻了阈值委员会内部串通的有害影响。但是,如上所述,这种方法并不能解决 Keypers 和区块提议者之间潜在的串通。为了有效地阻止这种串通,必须对 Keypers 委员会和提议者的不当行为处以经济处罚。

加密到多个提议者。 另一个限制是,以其当前形式,用户始终将其交易加密到特定的提议者。如果此提议者不承诺该交易,则该交易将不会被包含,实际上迫使用户重新发送该交易。一个显而易见的对策是让用户加密到多个提议者,以增加其中一个实际上承诺包含该交易的可能性。但是,这有两个缺点:(1)它使密文大小与提议者的数量成线性关系增加,并且(2)涉及的提议者越多,他们中的一个与 Keypers 串通的可能性就越大。可以通过使用多接收者加密方案来解决第一个缺点。另一方面,第二个缺点似乎更像是安全性和便利性之间的权衡:用户选择的提议者越多,他们中的一个与 Keypers 串通的风险就越大,但是用户重新发送交易的可能性就越小。

确保 Keypers 释放解密密钥。 如果我们假设所有 Keypers 恶意行事并互相串通好,那么他们有可能拒绝释放解密密钥,从而导致系统停止运行。避免这种情况的解决方案是让 Keypers 质押一些资金,并让证明者委员会证明 Keypers 是否为有效的提议者承诺发布了解密密钥。如果 Keypers 不释放密钥,他们可能会被削减股权。

如果用户可以直接加密到提议者,为什么我们需要 Keypers? 有人可能会想,如果提议者承诺允许用户将其交易直接加密到提议者,为什么我们还需要 Keypers 委员会呢?原因是,如果没有委员会,恶意的提议者可以仅在本地解密交易,而无需公开承诺包含这些交易,从而再次为 MEV 攻击打开了大门。只有有另一个独立的参与方(在我们的例子中是委员会)需要解密交易时,我们才能强制提议者公开其承诺,从而确保提议者对自己的行为负责。

在区块顶部对加密交易进行排序。 在整篇文章中,我们假设当提议者承诺加密交易时,相应的解密交易必须出现在区块的顶部。但是如果提议者承诺了多个交易怎么办?在这种情况下,这些交易的排序不明确。

一个简单的解决方案是让提议者在每个承诺中包含一个递增的计数器。然后可以按此计数器对交易进行排序,并且 Keypers 将仅按该顺序解密交易。

我们注意到,当使用包含列表而不是提议者承诺时,不会出现此排序问题,因为包含列表可以显式定义区块中加密交易的排序。

推广该方法

我们的方法可以通过两种方式进行推广,即关于加密内存池和关于固定密文位置的机制。

推广加密内存池。 为了简单起见,我们描述了关于 Shutter 加密内存池的反串通机制。但是,核心思想独立于 Shutter。主要的见解是,以 BLS 签名形式的提议者承诺可以用作 Boneh-Franklin IBE 方案中的解密密钥。这可以与任何使用提议者承诺的(加阈值)加密内存池结合使用。考虑以下更一般的设计:令 pk_CpkC 为操作(加阈值)加密内存池的委员会的公钥,令 pk_PpkP 为提议者的公钥。然后,用户可以首先将其交易加密到加密内存池(即,在 pk_CpkC 下),然后通过 Boneh-Frankling IBE 方案在 pk_PpkP 下将生成的密文加密到提议者。这实际上创建了一个双重加密的交易,必须首先由提议者(通过承诺)解密,然后阈值委员会才能解密该交易。

推广“固定”机制。 我们描述了一种加密内存池的反串通机制,该机制使用提议者承诺来固定密文在区块中的位置。但是,在更高的抽象层面上,该机制独立于固定位置的确切方式,只要以可以用作解密密钥的 BLS 签名形式完成固定即可。例如,对于 FOCIL,包含列表可以使用 BLS 签名进行签名,该签名允许解密包含列表中的所有交易。但是,将像 FOCIL 这样的机制与我们的反串通解决方案进行精确集成仍然是未来工作的一个有趣任务。

结论

这篇文章中描述的解决方案为阈值加密内存池提供了一种实用而有效的反串通机制,甚至可以推广到任何类型的加密内存池。通过将解密与提议者承诺(以及潜在的包含列表)联系起来,该机制大大降低了对加密内存池提供商的信任,而无需任何大量的通信或计算开销。

  • 原文链接: ethresear.ch/t/an-anti-c...
  • 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
以太坊中文
以太坊中文
以太坊中文, 用中文传播以太坊的最新进展