自选
我的自选
查看全部
市值 价格 24h%
  • 全部
  • 产业
  • Web 3.0
  • DAO
  • DeFi
  • 符文
  • 空投再质押
  • 以太坊
  • Meme
  • 比特币L2
  • 以太坊L2
  • 研报
  • 头条
  • 投资

免责声明:内容不构成买卖依据,投资有风险,入市需谨慎!

形式化验证与审计:为何“代码已核”不再足够

2026-05-14 19:51:02
收藏

我曾能在审计后安然入睡。如今却再也不能。

审计悖论

第一次目睹一个协议因审计员未能发现的状态交互而损失3000万美元时,我告诉自己这只是个例。第二次,我归咎于审计范围。第三次——大约是在那周读到的第五份事故分析报告时——我意识到问题不在审计员,而在方法论本身。

审计是人读代码、写测试的过程。人会疏忽,测试会遗漏路径。对于处理真实资金的智能合约,“我们可能覆盖了所有情况”并非安全模型,只是一厢情愿。

审计的实际作用(与局限)

需要明确智能合约审计能提供什么,因为行业常对此轻描淡写。

审计是安全团队阅读代码、运行静态分析工具、编写定制测试用例并记录发现的过程。优秀团队能发现重入漏洞、整数溢出、访问控制问题、逻辑错误和危险的经济边界情况。他们的报告详尽且有价值。

但审计受限于人力和预设场景。没有审计能穷尽合约所有执行路径。复杂智能合约的状态空间——所有可能的输入、存储状态、调用者上下文和执行序列组合——庞大到任何人工或模糊测试都无法全面覆盖。

模糊测试通过随机输入生成能发现约80%的问题。剩余20%隐藏在随机输入难以触及的数学边界情况中。测试首存款场景的审计员可能永远无法构建出totalSupply为1且totalAssets为type(uint256).max的状态,从而错过通胀攻击。

审计回答:“我们找到漏洞了吗?”
它不能也永远无法回答:“不存在漏洞。”

这不是批评审计员,而是方法的数学局限。

形式化验证的实际能力

形式化验证是根本不同的保障方式。

它不依赖人工读代码找问题,而是将智能合约转化为数学规约,用自动证明器穷尽搜索违反规约的执行路径。

证明器不会疲劳。不会因时间不足遗漏边界情况。不会因概率低而忽略场景。它系统化探索规约定义的所有状态空间。

若证明器发现违规——即代码允许但规约禁止的状态转换——验证即失败。团队修复后重新验证。

若未发现违规,则产生数学证明。不是概率,不是置信度,而是证明在特定规约下代码行为完全确定。

关键在于:在既定规约范围内。形式化验证证明你指定的内容。若规约错误或不完整,证明便不覆盖该部分。因此编写精确规约(不变量、状态转换规则、访问控制属性)与运行证明器同等重要。

形式化验证的实际发现

形式化验证最有力的论据不是理论,而是那些经过多位专家审核的已部署代码中存在的具体漏洞。

MakerDAO的DAI——DeFi中受审查最严的代码库之一——从2019年11月上线至2022年5月间,始终存在违反其核心不变量的错误。这是协议基础会计的数学错误,团队称之为“DAI基本方程”。它通过了所有审计和复查,Maker团队甚至自己给出了错误数学证明。只有Certora证明器识别出这一违规。

Certora在SushiSwap的Trident中发现可耗空资金池的漏洞——该不变性漏洞可能让攻击者清空流动性池,在利用前已被修复。

PRBMath的signed mulDiv()函数中存在舍入错误——特定计算中错误的舍入方向可能导致流动性提供者资金损失。

这些漏洞都存在于经过审核的已部署代码中。它们不是被更聪明的审计员发现,而是通过根本不同的方法:规定禁止发生的情况,让证明器检查所有路径。

实践中的区别

举例说明:假设有个取款函数。审计会检查重入漏洞、访问控制正确性、零值处理和事件触发。优秀审计员还会构思复杂攻击组合。

形式化验证对同一函数可能规定:“后置条件是调用者余额精确减少提款金额,总供应量同步减少,其他余额不变。”证明器则检查是否存在任何输入和先前状态组合可能违反该属性。若发现则验证失败;若未发现,则获得证明。

审计给出:“我们未发现问题。”
形式化验证给出:“该不变量在所有可能输入和状态下均成立。”

对大多数应用,审计已足够。风险状况不需要穷尽的数学保证。但对自主金融基础设施——机器7×24小时无人值守执行交易,资本隔离机制是贷方本金与风险的最后防线——标准则完全不同。

为何代理信用改变局势

传统DeFi漏洞主要涉及人工贷方、用户和开发者在数小时或数天内响应。事故分析虽痛苦但可修正,资金部分返还,协议升级,生态学习改进。

代理经济改变了一切。当资本通过自主系统以每天数千笔交易流动且无人监督时,干预窗口已关闭。安全模型必须在部署前就正确,而非事后补救。

凌晨3点调用信贷额度结算供应链发票的AI代理不会阅读Discord公告。不会因多重签名休眠而暂停。它以机器速度严格按照编码与协议交互,要求基础设施行为确定。

因此,为自主代理管理信贷额度的协议需要更高标准。实现代理信用的双边逐任务托管模型,也使得安全属性更易于形式化规定。你能明确每项托管应做和不应做的事,精确描述并加以证明。

Base链上的AI代理信用协议Kojiru是这种基础设施先行方法的案例。部署在Base主网的8个合约全部通过Certora形式化验证——8项规约规则全部通过。强制执行违约代理托管渐进清算的WithdrawalGuard安全熔断机制,必须在每个边界情况下都正确运行。不是“可能正确”,而是可证明正确。逐任务托管隔离、速率限制逻辑、升级阶梯——每项都有经证明器在所有可能状态下检查的既定不变量。

对评估是否通过协议向自主代理提供资金的贷方而言,这种区别至关重要。审计报告称“我们检查代码后未发现问题”。通过形式化验证的规则则宣告“我们数学化规定该属性并证明没有执行路径能破坏它。”前者是观点,后者是证明。

形式化验证无法替代的

将形式化验证视为完整解决方案是不诚实的,它并非万能。

Kelp DAO事件清晰表明:代码本身无漏洞,问题出在链下验证器基础设施——关于桥接配置的治理和运营决策,这是任何合约验证都无法捕捉的。形式化验证证明代码属性,但无法审计围绕代码的运营决策。

形式化验证仅证明你规定的内容。不完整的规约产生不完整的证明。若忘记规定关键不变量,证明器便无从检查。

最稳健的安全策略应结合形式化验证、传统审计、模糊测试、运营安全强化、漏洞赏金和治理保障。任何单层都不足够。但形式化验证提供了其他方法无法实现的:将安全属性从观点转化为证明的数学正确性基准。

即将到来的转变

Web3行业已习惯危险的简写。“经[公司名称]审计”成为“安全”的代名词。但这并不等同。

下一代金融基础设施需要的不仅是安全页面和审计徽章,尤其是在AI代理成为以机器速度自主运作的经济参与者时。当借款方是软件、交易7×24小时无人监督进行时,处理它们的协议需要被证明,而不仅是被审查。

审计仍是必要的。它们在发现广泛表面的逻辑错误、架构问题和实现失误方面很有价值。但它们应是基础要求,而非最高标准。

最高标准应是证明。

“我们检查了代码”对旧模式是合理标准。对以机器速度自主运行的基础设施则远远不够。评估任何托管你(或你构建的代理)资金的协议时,关键问题不是“经过审计了吗?”,而是:“你们证明了什么?”

展开阅读全文
更多新闻