一句话结论:Anthropic 与形式化验证公司 Theorem Labs 用 Claude 在几周内为 123 个开源库的 239 个入口生成了约 1.8 亿行 Rocq 证明,首次让机器检查过的正确性保证落到了真实生产代码上。
2026 年 10 月 22 日,Anthropic 的 Frontier Red Team 发布了一篇题为《LLM 正在让形式化验证进入更大的可行范围》的研究博客,合作方是形式化验证创业公司 Theorem Labs。项目拿谷歌 OSS-Fuzz 里的开源库做实验,让 Claude 把原有的模糊测试自动转成形式化规格,再为编译后的 RISC-V 二进制生成 Rocq 证明,最后交给 Rocq 内核机械检查。
结果有 123 个库、239 个 fuzzing 入口被证明在 64 MB 以内的任意输入下不会崩溃,总证明量约 1.8 亿行 Rocq,单个证明的典型规模约 60 万行。Anthropic 称这是已知第一次把 AI 用于形式化验证的尝试推进到生产软件的汇编代码级别。
这个结果的分量需要放在正确的参照系里看。seL4 内核的实现花了约 2 个人年,完整验证花了约 20 个人年,正因如此,形式化验证过去几十年只出现在空客航电这类极端场景。而这次覆盖的是 123 个每天被无数软件依赖的普通开源库。
从跑测试到写证明:五步流水线
整个流程的关键设计是,模型不去改写代码,也不去评价代码写得好不好,而是把「这个测试永远不会崩」这件事变成一条可被机器检查的数学命题。
第一步是挑现有的 fuzz 测试。开源项目通常已经为每个库写好了 fuzz 入口,这些入口接收任意输入,任何导致崩溃的输入都被视为需要修复的缺陷。OSS-Fuzz 还用 AddressSanitizer 捕捉内存错误,包括缓冲区溢出、越界访问、释放后使用和失败的断言。
第二步是编译成 RISC-V 可执行文件。证明对象是最终跑起来的机器码,源代码层面的抽象模型不作为证明目标,这样编译器生成的行为也落在保证范围内。
第三步是引入 RISC-V 与 Linux 进程的形式语义。Theorem 提供了指令集语义、进程语义与通用执行模型,汇编代码被翻译成一个数学模型,证明在这个模型上建立。
第四步是把规格写出来。对任何小于 64 MB 的输入,指定入口都不会崩溃。一旦这条规格被证明,原本的 fuzz 测试在这个入口上的作用就被覆盖,它再也找不到新的崩溃输入。
第五步是 Claude 写证明、Rocq 内核检查。证明一旦失败,团队就把它当作可疑路径来排查,定位并修补源码,重新编译、重新生成规格,再证一次。整个过程里人工审查的部分几乎为零,人需要信任的是 RISC-V 与 Linux 的形式模型、被证明的定理陈述,以及 Rocq 检查器本身。
规模:1.8 亿行证明意味着什么
把几个关键数字并排放,结论会清楚一些。
| 指标 | 数值 | 含义 |
|---|---|---|
| 验证的开源库 | 123 个 | 主要来自谷歌 OSS-Fuzz 计划 |
| 完成证明的入口 | 239 个 | 覆盖单个库的多个 fuzzing 入口 |
| 证明总量 | 约 1.8 亿行 Rocq | 其中约 10 亿行是模型写出但未通过检查的部分 |
| 单个证明典型规模 | 约 60 万行 | 对应二进制中位数 18000 条 RISC-V 指令 |
| 输入覆盖上限 | 64 MB | 小于该值的任意输入均被证明 |
| 对照组 | seL4 约 20 个人年 | 传统人工验证同一级别保证的代价 |
1.8 亿行与 10 亿行之间的差额值得单独说。前者是最终通过 Rocq 检查的部分,后者是 Claude 写出但没验过的部分,比例接近五比一。这个比值说明生成证明的成本主要不在写,而在写错后反复修正。这也解释了为什么单个证明动辄上亿 token:绝大部分算力花在把一条错误的证明路径排除掉。
还有一个容易被忽略的量级:cJSON 里一个 391 行的解析器,拿到了一份 63 万行的证明。证明代码的规模是源代码的两千倍左右,这个比例是形式化验证的固有特征,它不因为模型更聪明而改变。
方法学上还有一个更精细的观察。fuzz 测试本身往往隐含着比「不崩溃」更强的性质,比如 LZO 压缩测试断言压缩再解压必须与原始输入一致,这类往返一致性、幂等性、代数规律都可以从「测试永不崩溃」近似推出。这让形式化验证顺带覆盖了编码器正确性,而不只限于内存安全。
挖出来的缺陷:为什么普通模糊测试找不到
证明过程发现并修补了数百个缺陷,其中一部分的触发条件远超 fuzz 工具的常规覆盖范围。Anthropic 提到 AFL++ 这类工具默认把输入截断在约 1 MB,而且依赖代码覆盖率引导,无法穷举无限的输入空间。
| 缺陷 | 触发条件 | 为什么常规 fuzz 难命中 |
|---|---|---|
| 解压器计数器下溢导致越界写 | 约 20 MB 输入且布局罕见 | 输入体积远超常见上限,布局条件极苛刻 |
| 图像解码器越界读 | 64 MB 输入且需超过 2 GB 内存 | 同时需要大体积与大内存,fuzz 器几乎撞不到 |
| 跨文件句柄的调用序列触发越界读 | 同一文件两个句柄以特定顺序调用 | 需要特定的多句柄交互序列 |
| libexpat 的 CVE-2026-56132 | 深度嵌套的输入 | 已知漏洞,被重新发现 |
| 文件加载限制未被强制执行 | 逻辑错误,不会崩溃 | 不产生崩溃信号,fuzz 器无感 |
在一个广泛使用的 PDF 阅读器项目上,团队一周内发现的安全缺陷数量,达到了这个软件通常一整年才会报告的量级。另有一个逻辑缺陷潜伏了超过十年才被翻出来。这类发现的价值在于它们不依赖输入的偶然性,形式化证明对输入的罕见程度完全不敏感,一条需要 20 MB 特殊布局的路径,在证明里和一条常规路径没有区别。
验证一台广泛使用的 PDF 阅读器的过程还牵出了一条额外的工作线。为了完成 cpp-httplib 的证明,Claude 需要排除 std::set 析构函数递归过深导致栈溢出的可能性。这要求它在机器码层面证明 libc++ 的红黑树重平衡算法正确,并证明树深度始终保持在对数级范围内。这是把机器码证明推向标准库内部的一个切片。
成本曲线:40% 与 17%
形式化验证长期被成本卡住,单个证明可能烧掉数亿 token。Anthropic 在这次实验里给了两组可量化的改进数据。
第一组来自模型换代。团队从真实的 OSS-Fuzz 代码里拆出 36 个小型验证任务,每个任务给 3 次独立的单智能体尝试,每次尝试的预算为 500 万 token。结果是 Opus 5.5 完成了其中一半任务,相比 Opus 5 少用约 40% 的 token。
第二组来自智能体之间的协作。允许智能体在一个共享工作区里复制彼此已完成的证明后,总 token 消耗下降 17%,并且有一些单独尝试时失败的证明在共享环境下最终做出来了。原因不神秘,大型证明里大量内容是各程序共用的,比如 C 运行时初始化和 ASan 部分,重复推导是纯浪费。
这和 Lean 社区的 Mathlib 是同一个机制。这套库长到接近 30 万条定理、700 多位贡献者,靠的就是每条新证明都建立在既有证明之上。Anthropic 的类比是给形式化验证的复用提供了第一个可量化的收益数字。
边界:形式化验证不等于没有 bug
Anthropic 在限制章节里写得很直白,形式化验证不等于没有缺陷。证明能说明程序满足规格,但检查器无法判断规格是否符合现实。剩余的缺陷来源被精确地定位了,这比笼统的免责声明有用得多。
最大的一条是部署环境错配。这些证明针对的是单线程、静态链接的 RISC-V 二进制,链接 musl libc,固定内存预算,跑在 Linux 上。而绝大多数实际部署是 x86 或 ARM,动态链接 glibc。Anthropic 把生成准确的 x86 语义列为下一步。
第二条是覆盖范围。ASan 本身并不能检测全部内存安全缺陷,每个库也不是所有入口都被验证了。即便验证了全部入口,死代码仍然不在覆盖范围内。此外,调用方错误使用库接口造成的破坏,落在调用方身上,不在这次证明的责任范围内。
第三条是奖励欺骗的风险。理论上 Claude 可以把程序改写成永远不会崩溃的版本,从而轻易满足目标。团队的应对方式是把补丁本身计入惩罚,为证明补丁改变了哪些输入、改变数量有多少提供额外激励,并对所有补丁做记录与审计。
第四条是受信组件。除了规格与定理陈述,Rocq 检查器本身也依赖硬件、操作系统和 OCaml 编译器。团队在自动生成 x86 指令语义的实验中还发现,生成出的语义模型与官方参考文档之间有数百处不一致,也暴露了少量硬件本身的问题。这些模型经过大量测试,但不能被当作绝对正确。
证明之外的三组实验
同一次发布里还有几个规模更小但方向不同的实验,它们说明这套方法可以越过「只证明不崩溃」的边界。
一组是 zlib 与 RFC 1950。团队先让 Claude 为压缩标准写出形式化规格,再让 Claude 证明 Linux 内核里的 zlib 实现正确实现了该规格,证明直接作用在 x86 编译后的二进制上。随后同样的流程被用到另外六个广泛使用的库上,结果发现了一些边缘情况下的轻微缺陷,正在向上游提交。这个实验最有分量的地方在于,它验证的是既有代码的端到端正确性,样本并非从零构造的演示代码。
一组是 Rust 编写的 Python 解释器。团队用 Rust 验证工具 Verus 证明它符合论文定义的 CPython 语义,再用 170 万个随机生成的 Python 程序做经验测试,其中 99.95% 与 CPython 行为一致,剩余差异属于已知的边界情况。
还有一组是公开了什么、不公开什么。Anthropic 公开了不需要修改源码即可证明的那批完整 Rocq 证明,以及 RISC-V 与 Linux 进程语义;对于发现并修补了缺陷的项目,可能暴露未修补漏洞的证明暂不公开,只公开对应的规格。Theorem 还在 GitHub 上放出了帮助开发者启动验证流程的 Claude skill,并表示会为其它开源项目免费运行同一条流水线。
从工程角度看,Theorem 的路线图比这次实验更值得追踪。目标是验证整个 Nix 生态,其中包含 glibc、OpenSSL 和 cURL 这类基础组件。软件依赖关系接近幂律分布,把被大量软件共享的基础库证明一遍,就能让很大一部分上层软件变得可验证,这个思路比逐个项目硬啃要经济得多。
和站内其它线索放在一起看
把这次结果和站内已有的几条线索并排,能看到一条更长的曲线。Claude 在形式化证明之外还啃过更难的数学问题,站内 Claude 30 分钟破译 26 年 NSA 椭圆曲线悬案 记录了那次 1997 年 Unix 时间戳充当种子的细节。GPT-6 Astra 与数学家攻克 57 年圆盘装箱难题 则是同一类工作在组合优化方向的表现。
在科学侧,Anthropic 用内部研究模型设计抗蝎毒蛋白结合分子,Claude 64 小时设计 31.8 万个抗蝎毒蛋白 有完整复盘。三件事的方法论是通的,把一个难以言说的目标转成可自动检验的规格,再交给模型批量求解,剩下的精力用来判断哪些约束值得写进规格。
而在代码一侧,模型能生成正确代码与能证明代码正确之间还隔着一步。GPT-6 迁移 COBOL 遗产代码的准确率做到 97.9%,GPT-6 攻克 COBOL 遗产代码的 97.9% 迁移路径 记录了这次改造的规模,但迁移正确率与形式化保证是两种不同的承诺。
风险侧的另一面同样值得关注。当智能体开始被授权在真实系统里动手,安全团队担心的是它被利用。微软披露的 Storm-0940 攻击中,ARTEX 智能体三小时拿下 2250 个租户,站内 微软 Storm-0940 与 2250 租户被攻破 记录了这条线。Claude 这次在证明过程中一边发现缺陷一边自行修补源码,恰恰展示了同一能力的两面,它既能替人找出问题,也能在没有人类复核的情况下直接改代码。
常见问题
这 123 个库是不是就没有漏洞了
不是。Anthropic 的原话是形式化验证不等于没有缺陷。证明只覆盖 64 MB 以内输入下的不崩溃性质,且限于单线程静态链接的 RISC-V 二进制与 musl libc 组合。逻辑错误、调用方误用、其它架构的二进制都不在保证范围内。
这些证明能不能直接用在自己项目上
不能直接套用,但流程可以复用。Theorem 已经把 RISC-V 与 Linux 进程语义、规格生成方式和 Claude skill 开源,其他项目可以在此基础上启动验证。同时需要注意,证明只覆盖不需要修改源码的那些情况,需要改代码的库公开的是规格而非完整证明。
成本现在能接受吗
单个证明可能消耗数亿 token,总投入 Anthropic 没有公布。可量化的是两个下降趋势,Opus 5.5 比 Opus 5 少用约 40% token,共享证明工作区再降 17%。Theorem 判断随着模型在长周期任务上的训练加强,成本会继续下降,并把验证整条 Nix 生态列为路线图目标。
小结
这次工作改变的是形式化验证的可行性边界,验证方法本身没有变。证明语言、检查器、规格体系全都是几十年的既有产物,Claude 接手的是最昂贵的那一段工作,把证明写出来并修到通过检查。这件事的经济学意义在于单位成本从人年变成了 token 量,而 token 量会随着模型迭代持续下降。
剩下的路仍然很长。RISC-V 与 musl libc 的假设要覆盖到 x86 与 glibc,还需要生成准确的 x86 语义;ASan 检测不到的缺陷类型要靠更精确的规格来覆盖;调用方的接口约定要写进规格才能闭环。Anthropic 自己的判断是形式化验证会像今天的模糊测试一样普及,从一个附加的加分项变成工程流程的内建部分。如果这个判断成立,那么写规格的能力,会和写测试的能力一样重要。
相关阅读
- Claude 30 分钟破译 26 年 NSA 椭圆曲线悬案
- Claude 64 小时设计 31.8 万个抗蝎毒蛋白:211 个送测 17 个达标
- GPT-6 Astra 联手数学家攻克 57 年难题:N≤20 圆盘装箱问题
- GPT-6 攻克 COBOL 遗产代码:97.9% 迁移准确率
- 微软披露 Storm-0940 攻击:ARTEX 智能体 3 小时拿下 2250 租户
延伸阅读
- Grok Bot开放多模型路由:Claude、Midjourney、Suno均可调度2 周前
- OpenAI DevDay 2026 全景解读:20+ 项更新与 Pro 500 套餐4 周前
- 麦当劳AI定价引擎同城巨无霸贵21%:13000店落地,2026年成续约强制门槛3 周前
- 阶跃星辰发布 Step5Preview:单任务成本仅 Claude Opus5 的 1/8,10月开源1 月前
继续读
同一批更新里这几篇值得一看:
想快速查定义?对应的词条在这里:
- Anthropic词条 · AI 自学笔记
- Claude Sonnet词条 · AI 自学笔记
