← 返回信息流
AI 资讯Hacker News·2 小时前

AI在OpenVM的ZkVM中发现密码学新洞察

原标题:AI Meets Cryptography 2: What AI Found in OpenVM's ZkVM

速览

AI通过分析OpenVM的ZkVM架构,发现了一种新的密码学优化路径。该发现可能提升零知识证明的效率,降低计算开销。这标志着AI与密码学交叉领域的重要进展,有望推动区块链和隐私计算应用。

AI 深度解读

背景

这是「AI 遇上密码学」系列的第二篇文章。如果你还没有读过第一篇关于 Cloudflare CIRCL 的文章,那篇文章提供了更多关于我们为什么进行这些实验以及管道如何搭建的背景。在本文中,我们将 AI 审计工具 zkao 指向了 OpenVM 的 zkVM,它在其 guest 库 openvm-pairing 中发现了一个严重的声音性(soundness)漏洞,允许恶意证明者伪造任意配对等式。

需要说明的是,这不是 zkVM 证明系统本身的声音性漏洞;它只影响使用该漏洞库的代码。该漏洞被分配了 CVE-2026-46669,并在 OpenVM 1.6.0 中修复。据我们所知,所有基于 OpenVM 构建的合作伙伴都已升级到该版本。

澄清(与第一篇文章相同):AI 产出了一个候选发现,而非最终报告。我们团队的人类随后验证了该问题,确认了可利用性,理解了完整影响和受影响的项目,并处理了披露。在这个案例中,由于 zkao 自己生成了详细报告和最小 PoC,一次非常快速的 manual triage 就足以决定值得与 OpenVM 团队分享。

核心内容

漏洞发现过程

四个月前,作为我们 AI 实验的一部分,我们扫描了 OpenVM。扫描方式与所有项目开始时相同:先用一个简单提示词的 LLM,再用我们专家维护的技能(skills)提示的 LLM。我们使用 Opus 4.6 和 Codex 5.3 运行。当 Opus 4.7 和 Codex 5.4 发布后,我们再次运行。候选发现都是有效的观察,模型自信地将其中几个标记为 Critical 或 High,但没有任何一个实际可利用。

我们的假设是:对于一个 naive 的 LLM 设置来说,zkVM 过于复杂,即便有 300K token 甚至 1M token 的上下文也难以处理。模块之间的依赖远比典型库密集。一个密码学库通常可以并行审计:只需将每个子 agent 分配到一个映射到单一密码学原语的文件夹。每个子 agent 读取少量代码行,仅应用相关技能,将发现写入 markdown 文件,然后主 agent 将这些文件拼接起来。这一切都可以通过流行的 agentic 编码工具(如 Claude Code 和 Codex)开箱即用,几乎不需要人工引导。

但这种方法无法迁移到更复杂的代码库,比如 OpenVM。在那里,除了一些低级果实外,子 agent 的有用输出不是漏洞列表。你可以有一个可证明安全的模块 A 和一个可证明安全的模块 B,但它们的组合仍然可能不安全。因此,在这种“隔离”模式下寻找漏洞无法捕捉到有意义的 bug。相反,子 agent 的输出应该是关于模块的知识:它假设了什么,它委托给调用者什么,以及它默默依赖的不变量(invariant)。然而,很好地表示这种输出是困难的部分。太短就会跳过 bug 实际依赖的实现细节;太长则会在与其他输出结合之前溢出主 agent 的上下文。从我们所见,至少在撰写本文时,上述 agentic 编码工具并未有效解决这个问题。

基于这个假设,我们决定在 OpenVM 上运行 zkao,尽管我们这些实验的原始规则是仅在 plain LLM 已经找到真实漏洞之后才运行 zkao。我们在 zkao 的上下文工程上投入了大量时间,并将我们自己的专家的工作方法编码为可复用的流程,用于寻找漏洞。因此,它对这种情况来说似乎是正确的工具。经过超过九半小时的扫描,它返回了许多发现。与之前的实验类似,我们没有时间深入检查每一个发现。快速浏览后,有一个立即引起了注意:guest 库中配对检查(pairing check)的一个严重声音性漏洞。我们的假设成立,数月努力终于有了回报!

虽然只有一个漏洞可以分享,但为了与第一篇文章保持一致,以下是漏洞概览。

漏洞概览:openvm-pairing

配对检查缺少对 scaling factor 的 proper subfield check

背景 配对是 Groth16、带 KZG 的 PLONK 以及 BLS 签名背后的引擎。在所有这些协议中,验证者通常不是询问一个配对值,而是询问配对乘积是否为 1:

$$ \prod_i e(P_i, Q_i) = 1. $$

从这个 yes/no 答案,验证者推断出 SNARK 证明有效、KZG 打开正确、或签名验证通过。因此,如果证明者可以使得一个虚假的配对乘积看起来是 1,那么建立在其上的一切都将不再可靠。

配对是一个双线性映射:

$$ e : G_1 \times G_2 \to G_T, $$

其中 $G_1, G_2, G_T$ 是阿贝尔群。在我们的情况下,$G_1$ 和 $G_2$ 是椭圆曲线群,$G_T$ 是 $\mathbb{F}_{p^{12}}^{*}$ 的一个乘法子群。

配对最重要的性质是双线性:

$$ e([a]P, [b]Q) = e(P, Q)^{ab}. $$

这就是配对有用的原因,但理解这个漏洞实际上不需要这个性质,你可以忽略它。

计算一个配对 $e(P, Q)$ 有两个主要步骤(除了 Weil 配对)。

第一步是 Miller 循环。它计算一个 Miller 函数 $f_{r, Q}(P)$,为简单起见我们可以将其视为黑盒。这个阶段输出一个 $\mathbb{F}{p^{12}}^{*}$ 中的元素。对于配对乘积,电路可以运行所有 Miller 循环并将它们的输出相乘。我们称这个组合输出为 $f$,即 $f = \prod_i f{r, Q_i}(P_i)$。

关键点在于 $f$ 还不是配对乘积。它只是等价类 $\mathbb{F}{p^{12}}^{*} / (\mathbb{F}{p^{12}}^{*})^r$ 中的一个代表。这是 Novakovic 和 Eagen 论文的主要观察之一:Miller 循环输出在乘以一个 $r$ 次幂之前是唯一的。换句话说,每当存在一个非零 $c$ 使得 $f_1 = f_2 \cdot c^r$ 时,$f_1$ 和 $f_2$ 代表相同的配对。这个未确定的因子 $c$ 使得直接相等性检查变得棘手。

这就是

查看原文 →blog.zksecurity.xyz