文章深入探讨了加密内存池的安全设计,指出其不仅依赖加密方案,还需确保在整个交易生命周期中,交易内容在排序确定前保持隐藏,解密后必须立即执行或终结。重点分析了阈值加密、CCA安全、密文上下文绑定、解密时机与最终性对齐、防止无效交易被解密后利用等关键安全点,并讨论了资源耗尽、边界重放等常见失败模式。最后强调加密内存池能减少抢先交易MEV,但无法完全消除,用户需明确其局限性。

大多数区块链交易在最终确定并执行之前都是公开的,并且在 mempool(交易内存池)中可见。这有利于透明度和传播,但也给了搜索者(searcher)、区块构建者和验证者反应的时间。如果一笔交易揭示了有利可图的交易、清算、NFT 铸造或跨链桥操作,其他人可能能够在它上链之前复制、抢先交易、三明治攻击或审查它,这被称为矿工可提取价值(MEV)。
加密内存池是解决这个问题的一种有前景的方法。其思路很简单:用户提交加密的交易,验证者在不查看明文的情况下对其进行排序,交易仅在排序固定之后、执行之前才被解密。在理想情况下,交易意图只有在无法再对其重新排序时才变得可见。
这是一个强大的想法,但它也为交易流程增加了更多的安全假设。加密内存池不仅仅是一个普通的、在有效载荷上增加了加密的内存池。它改变了交易的生命周期,因为协议现在必须精确决定加密交易被允许解密的时间和方式。
在这篇文章中,我们将讨论加密内存池的安全考量:它们需要哪些属性,如何与共识和执行交互,以及如果在错误的时间或错误的上下文中进行解密,可能会出现什么问题。
在加密内存池中,用户本地加密交易并提交密文。验证者在不读取交易内容的情况下,对交易进行传播、打包和排序。一旦区块被最终确定且其排序不可逆,加密的交易就可以被解密。验证者协作解密区块,然后立即执行。
实现这一点的常见方法是门限加密。验证者集合共同控制解密密钥。没有一个单独的验证者能够独自解密待处理的交易。只有足够多的验证者贡献其份额后,才能重建区块的完整解密密钥。这通常需要分布式密钥生成(DKG)协议。验证者需要共同生成密钥材料,使得没有任何单个验证者知道完整密钥,并且当协议允许时,达到门限数量的验证者可以解密。
显然,底层的加密原语必须是安全的。但这还不够。它们还需要安全地集成到区块链管道的其他部分。加密内存池触及系统的许多部分:内存池准入、共识提议、验证者密钥份额、周期变更、交易认证和执行。即使加密方案本身是安全的,如果这些部分未能保持预期的解密时间点,系统仍然可能泄露交易意图。
因此,下面我们将不仅关注加密方案,还关注那些决定加密内存池能否真正提供其承诺隐私的集成细节。
为了保护用户免受 MEV 的侵害,加密内存池应遵循一个核心规则:交易在顺序被最终确定之前不应被解密,而一旦解密,协议应准备好执行它。
这涉及两个部分。首先,交易在未被包含在区块中或其排序仍可能改变时,必须保持隐藏。其次,交易变为明文后,不应在没有最终结果的情况下被悄然丢弃或暴露。如果发生这种情况,用户的意图就会公开,而他们预期的执行结果却没有得到。
系统需要正确处理好以下几件事。
加密必须是安全的。 门限加密方案、DKG 和密钥派生过程是基础。验证者不应能够在达到门限前解密,密钥份额应正确生成,加密方案应能够抵御密文篡改。
密文必须绑定到其上下文。 加密交易仅对其创建时所针对的发送者、链、周期、认证材料和交易格式有效。否则,攻击者可能能够复制、重放或曲解他人的加密交易。在普通内存池中,复制交易通常会产生一个简单的重复。在加密内存池中,这可能成为泄露他人意图的一种方式。
解密必须在正确的时间发生。 即使加密方案安全,如果解密份额过早释放、旧的密钥材料被接受、或者某些代码路径允许验证者在最终确定之前解密,也是无济于事的。如果交易尚未最终确定,它就不应被解密。
解密不能成为活性瓶颈。 验证者需要可靠地生成并聚合解密份额。恶意验证者不应能够阻止重建、注入无效份额或导致网络停滞。由于解密直接处于执行之前,解密路径上的失败可能导致整个区块管道的失败。
加密内存池的规则说起来简单:保持交易加密直到最终确定,然后解密执行。实现才是微妙所在。加密内存池跨越系统的许多部分,因此微小的集成错误也可能导致隐私泄露。
密文必须难以被篡改。 加密方案应具有选择密文攻击(CCA)安全性。此处仅选择明文攻击(CPA)安全性是不够的:如果攻击者可以获取有效密文并制作出相关的密文,该密文解密为修改后的明文,他们可能能够在不知道原始明文的情况下,用篡改后的交易抢先于用户。CCA 安全性正是通过拒绝非诚实生成的密文来防止这种情况。
但 CCA 安全性仅保护密文本身。它不能阻止某人复制完整的密文并在错误的上下文中提交。例如,攻击者可以复制其他用户的加密交易,将其包装到自己的交易中,并用他们自己的密钥签名。即使执行阶段稍后拒绝了该交易,复制的密文仍可能被解密,从而泄露原始用户的意图。
因此,密文需要与发送者上下文进行认证:发送者身份、签名密钥或认证材料、链 ID、周期,以及任何定义交易有效位置的其他公开字段。
解密必须与最终确定绑定。 验证者不应仅仅因为他们看到了区块提议就释放解密份额。提议并不是最终的。如果交易可以在提议阶段被解密,恶意提议者可以尝试多个区块,从中获取交易的内容,而不对其中任何一个作出承诺。
释放解密份额的触发条件应该是协议的最终确认条件。在此之前,验证者可以进行无害的预计算,但他们不应释放任何使得明文恢复成为可能的信息。
解密应当意味着执行。 一旦交易被解密,用户的意图就公开了。协议不应随后沉默地丢弃它。
这种情况可能在看似正常的边界情况下发生。许多区块链有每区块的资源限制,例如 Gas 限制或状态更新限制。如果区块容量耗尽,靠近末尾的交易即使已经被包含,也可能被跳过。恶意提议者可以通过用高消耗交易填充区块,并将目标加密交易放在末尾附近来利用这一点。目标交易被解密但未被执行。之后,该加密交易仍可能被包含在未来的区块中,使得其他人可以像处理明文交易一样利用它。
周期边界可能会造成类似问题。某些协议在周期变更事件后停止执行正常交易,放置在该事件之后的加密交易可能会被解密,然后被跳过。同样,明文被泄露,而用户未能得到预期的执行结果。
一个好的加密内存池设计应避免这类行为。如果一笔有效的加密交易被解密,它应该要么执行,要么以一种明确的方式最终失败。
小心当前无效但后续有效的交易。 有些交易仅仅因为当前状态而失败。例如,假设用户提交了两笔 nonce 分别为 N 和 N + 1 的交易。第二笔交易在第一笔执行之前是无效的。
提议者可以先包含 N + 1 交易。该交易成功解密,然后 nonce 检查失败。此时提议者就知道了它的内容。稍后,一旦交易 N 上链,N + 1 交易可能变得有效,提议者就可以利用已泄露的明文抢先交易它。
教训是:网络应在解密前进行彻底检查,并尽早拒绝交易。这将减少当前无效交易被解密的情况。此外,如果一笔被解密的交易在解密后失败,它通常应成为链上的最终结果,而不是仍然可以重试。否则,系统就为攻击者提供了这样一种机会:现在泄露交易,以后再利用它们。
密钥重建必须容忍恶意验证者。 解密依赖于从验证者处收集足够的密钥份额。一些验证者可能离线、缓慢或恶意。他们可能扣留份额或提交无效的份额。
门限秘密共享在这里能够发挥作用:系统不需要每个验证者都参与。足够大的子集应当足以重建密钥。但聚合逻辑也需要健壮。无效份额应被检测并排除,一个坏的份额不应破坏重建的密钥,也不应使诚实验证者陷入无限重试的循环。
加密交易不应引入新的 DoS 风险。 由于有效载荷是加密的,验证者在解密前无法完全模拟交易。这使得资源计量比普通内存池更困难。
系统应尽早拒绝格式错误的密文。解密前应检查签名、费用、交易大小、支持的有效载荷类型以及密文的格式正确性。一个损坏的加密交易不应导致解密管道崩溃或阻塞区块执行。
解密失败也不应是无成本的。如果攻击者可以零成本提交无法解密的密文,加密交易就会变成一种轻松的方式,用于向验证者发送垃圾信息或探测解密逻辑中的边缘情况。
加密内存池减少 MEV,但并不能消除 MEV。 它们主要防范依赖于在排序前查看交易内容的 MEV,例如抢先交易和三明治攻击。它们无法防止审查、延迟攻击、元数据泄露或应用层泄露。
提议者仍然可以选择不包含加密交易。观察者仍然可能从发送者、时间、Gas 参数、交易大小或公开路由提示中获取有用信息。而且一旦交易被解密,验证者和其他观察者仍然会看到其内容。
因此,目标不是绝对完全的交易隐私。目标更窄,但仍然非常有用:在排序固定之前让交易意图保持隐藏。正因为如此,网络应清晰地说明加密内存池保护和不保护的内容。用户需要理解该功能的能力和局限性,以免将其视为完全的交易隐私,或以协议未设计保护的方式使用它。
加密内存池是减少交易排序 MEV 的一个有前景的方向,但它们的安全性并不仅仅在于选择正确的加密方案。困难之处在于在整个交易生命周期中维持预期的信息流。
当交易的顺序仍可更改时,交易应保持隐藏。一旦变为明文,协议应准备好将其作为最终事件处理:执行它、对失败收费,或者以不可被滥用的方式拒绝它。这需要客户端加密、内存池准入、共识、密钥重建、执行和失败处理之间的协调。这正是让加密内存池成为一个有趣设计空间的原因。
展望未来,加密内存池很有可能成为 MEV 缓解设计空间的重要组成部分。随着更多团队对这些设计进行尝试,仔细的安全审查将至关重要。我们已经审计了生产环境中的加密内存池实现,包括门限加密方案、DKG 集成以及解密到执行的边界,并很高兴能够继续保护这类新型协议的安全。
在 X 上分享 在 LinkedIn 上分享 通过电子邮件分享
zkSecurity 为密码系统提供审计、研究和开发服务,包括零知识证明、MPC、FHE、共识协议等。
- 原文链接: blog.zksecurity.xyz/post...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!
作者暂未设置收款二维码