决策回执与审计

6 分钟读完

S8
深入解析 · 智能体安全

一份决策回执——每次工具调用一份签名的动作信封,哈希链接进一份防篡改的日志——把一次智能体运行变成一份你能回放、能证明的记录,而这恰恰是 SR 26-2 与欧盟 AI 法案如今所要求的。

当一个智能体做了昂贵或错误的事,"去查日志"是不够的——日志可以被编辑,而且很少能让你回放那次确切的运行。决策回执是更强的原语:每次工具调用发出一份签名的动作信封,哈希链接进一份日志,任何篡改都会打断链条,同时捕获提示词、推理、工具的输入与输出、当时在生效的策略版本、以及精确的时间戳。那份记录支撑确定性回放与不可否认,而它已不再可选——SR 26-2(2026 年 4 月)与欧盟 AI 法案第 12 条(高风险义务将于 2026 年 8 月落地)都期望有自动的、防篡改的事件记录。这篇短文讲的是签名与哈希链接什么、按调用还是按会话、以及那个棘手的问题:若运行时本身被攻破,谁来持有密钥。

STEP 1

日志与回执。

日志是你为重构一个系统做过什么而写下的一串事件。它回答"14:07 发生了什么",而对这件事它恰恰是正确的工具。但日志有两个性质,会在审查者面前失效。第一,它是可编辑的:能写入日志存储的人,原则上就能在事后改动或删除一条记录,而普通日志里没有任何东西能证明这事没发生过。第二,它对回放而言是有损的——一条日志记下了某个工具被调用过,却很少记下完整的输入、模型的输出、以及重新运行那次确切决策并得到同样结果所需的周边状态。

决策回执正是为修好这两点而造的。它是一次智能体动作的自含记录,经密码学封存以致事后编辑可被察觉,且完整到那次动作可被确定性地回放。它与本组其余部分的关系是一道清爽的分工:策略即代码决定一个动作是否被允许并吐出那份结构化裁定,理由链解释那份裁定为何触发,而回执是那个签名并存储整件事的东西,好让它在与对手接触后依然存活。至于该保留什么的通用工程——模型/提示词/工具/数据的四线溯源模型——住在运营侧的 审计轨迹那些内容里;这一篇讲的是在其之上、针对智能体的签名与链接。

STEP 2

签名的动作信封。

单位是每次工具调用一份信封。它包裹起那份让动作可被重构的载荷——发起的提示词(若它庞大或敏感,则是它的一个哈希)、导向这次调用的推理链、工具名连同其确切输入、工具的输出、当时在生效的策略版本、任何人工覆写、以及精确的时间戳——然后它被签名。签名正是把一条日志记录升级为一份回执的东西:它把载荷绑定到一把密钥上,于是核验方既能确认这条记录未经改动,也能确认是哪个身份产出了它。那个身份,就是鉴证所确立的那把密钥绑定的身份——回执正是运行时鉴证不再是一次请求检查、而成为一份关于谁做了动作的、持久的、事后的声明之处。

捕获策略版本比它看起来更要紧。一次回放只有在你知道当时哪些规则在生效时才是忠实的;一份只记下"已拒绝"而不记策略版本的回执,无法针对实际运行过的那套部署重新评估,只能针对今天存在的任何策略。把版本连同决策一起签下来,你就能证明一次拒绝在当时管辖它的那套规则下是正确的——哪怕那些规则后来变了。

STEP 3

用哈希链实现防篡改。

给每份信封签名,能证明单条记录未被改动,但它拦不住有人删掉一条记录、给记录重排序、或截断尾部。哈希链接补上这个缺口:每份回执都含有上一份回执的哈希,于是这份日志是一个链表,其中每条记录都对它的全部历史作出承诺。改动或丢掉任何一份回执,其下游的每一个哈希都不再匹配——断裂被定位且可见。一个周期性的、对头部哈希签名的检查点守护着尾部,好让攻击者无法简单地删掉最近的几条记录、再从某个更早的点重新链接。

{
  "seq": 118,
  "prev_hash": "sha256:6b1e…c4",
  "agent_id": "did:agent:orders-svc#7a",
  "tool": "refund.issue",
  "args": { "order": "A-9931", "amount_cents": 4200 },
  "result": { "status": "ok", "txn": "rf_5521" },
  "policy_version": "v3",
  "decided_at": "2026-05-02T14:07:22.114Z",
  "entry_hash": "sha256:9f2a…d7",
  "sig": "ed25519:MEUCIQ…"
}
{ "seq": 119, "prev_hash": "sha256:9f2a…d7", "tool": "email.send", … }

有两个设计选择支配着成本。第一个是按调用还是按会话:每次工具调用一份回执给出最细的回放粒度,但体量最大;而一份对其各次调用的 Merkle 根作出承诺的按会话回执,让链保持短小,同时仍能按需证明其中任何单次调用。第二个是什么内联存储、什么按引用存储——庞大的工具输出住在内容寻址的存储里,而回执携带它们的哈希,于是链保持小巧,又不失去核验载荷的能力。

STEP 4

监管方的期望。

这已不再是一件内部的雅事。2026 年 4 月,美国的银行监管机构(OCC、美联储、FDIC)发布了 SR 26-2,取代了长期沿用的 SR 11-7 模型风险指引,其期望触及银行如今部署的那些自动化的、智能体式的决策。在欧盟,AI 法案第 12 条(法规 (EU) 2024/1689)要求高风险系统在其全生命周期内以支持可追溯的方式自动记录事件,其高风险义务将于 2026 年 8 月落地。二者都指向同一个原语:能在事后重建一个决策的、自动的、防篡改的事件记录。一份由签名回执构成的哈希链式日志,正是那项要求的一个直接实现——这也是为何这个模式值得在审计人员来要它之前、而非之后就建起来。

STEP 5

密钥托管问题。

这里是整套方案诚实的边界。一份回执的保证完全系于那把签名密钥,而那个令人不安的问题是:谁来持有它,而若运行时本身被攻破,签名又能证明什么?若智能体进程用一把它自己能读到的密钥给自己的回执签名,那么一个占有了该进程的攻击者就占有了那把密钥——并能为从未发生过的动作伪造出完美有效的回执,或给一份被篡改的历史重新签名。不可否认就悄悄退化成了"不可否认,前提是那个做签名的东西是诚实的",而这恰恰是一次事件会打破的那个前提。

存在一些部分的答案,没有一个是完整的。在硬件支撑的密钥库(TPM 或 HSM)里签名,意味着进程能请求签名却永远取不出密钥,于是一次攻破无法把它外泄——尽管一个正被实时攻破的进程在它还有访问权时,仍能让它给谎言签名。把头部哈希流式送往一个外部的、只追加的见证者(一个独立的信任域,或一份公开的透明日志),意味着一个被攻破的运行时能停止写入、却无法悄悄地重写见证者已经看到的东西。对高价值动作用一个独立的策略服务做联署,则分割了信任。每一样都抬高了门槛;没有一样能在面对一个被彻底攻破的运行时时交付无条件的不可否认。那道缺口,正是智能体可审计性尚未攻克的前沿——值得直白说出来,因为一套被当作"防篡改到攻不破"而非"篡改可察觉"来兜售的回执系统,是一个密码学并不兑现的承诺。