Havenlon|安全讲人话(十三):日志不是证据,执行过程才是证据
2026/7/18 13:42:26 网站建设 项目流程

事后记录不能替代事前约束。

先讲一个改变了整个互联网信任方式的真事。

2011 年,荷兰的证书颁发机构 DigiNotar 被攻破。攻击者拿下了它全部 8 台签发服务器,偷偷签发了至少 531 张伪造证书,其中包括一张*.google.com的通配符证书,被用来在伊朗大规模拦截 Gmail 流量。可怕的是——从技术流程上看,这些证书"完全合法":格式正确、签名有效、由一个受信任的权威签发。DigiNotar 的日志系统也许记录了这一切,但那又怎样?一个"被信任的权威在悄悄作恶",它自己写的日志,凭什么可信?

这件事催生了一整套沿用至今的机制——证书透明度(Certificate Transparency, CT)。它的核心思想,恰恰是本篇的主题:

仅仅"记录"是不够的。记录必须变成"任何人都能独立验证、且无法被偷偷篡改"的证据,而且要在被信任之前就成立。

很多企业相信,系统只要日志够完整,出了问题总能查出来:谁登录了、谁点击了、谁审批了、谁修改了、什么时候执行的。很多安全方案,也把"日志完整"当成一种安全能力。

但仔细想一层就会发现问题:

日志能证明一件事发生过,却不一定能证明它为什么发生,更不能证明它本来就应该发生。

真正的证据,不应该只是在事情结束后写下一段记录。真正的证据,应该存在于事情发生的整个过程里。


一、日志记录的是历史,不是约束

日志最大的作用是记录:昨天谁登录、今天谁审批、下午谁改了配置、晚上谁删了数据。这些信息很重要,没有日志企业几乎无法审计,很多安全事件也正是靠日志完成复盘。

但日志有一个天然限制:它只能记录已经发生的事情,它不能阻止事情发生。

一笔错误转账已经完成,日志能告诉你是谁操作的、什么时候、金额多少、用了哪个账号——但钱已经出去了,日志不会因为记录得够完整就把钱带回来。

所以定位很清楚:日志属于事后能力,它不是执行控制。这正是第三篇讲过的区别——日志提供的是不可否认性(non-repudiation),门闩提供的是可阻止性(preventability)。一个只有事后说明能力的系统,是监控摄像头,不是门闩。


二、很多日志,其实是系统自己写给自己看的

还有一件容易被忽略的事:绝大多数日志,都是系统自己生成的——应用写日志,数据库写日志,审批系统写日志,AI Agent 写日志,SaaS 写日志,执行程序写日志。

于是一个致命问题来了:如果这个系统已经被攻击者控制,谁来保证日志还可信?

攻击者可以删除日志、关闭日志、延迟上传、修改时间、补写日志,甚至让日志看起来比真实过程还完整。这不是理论——在攻防框架 MITRE ATT&CK 里,"清除/篡改日志"是一个标准战术,编号T1070(Indicator Removal,痕迹清除),几乎是每一次成熟入侵的规定动作。前面讲过的例子也都印证了它:Stuxnet 让 PLC 谎报"一切正常"(第十篇),Ubiquiti 的内鬼直接动了自己有权限的日志系统(第九篇)。

所以结论很硬:日志本身并不是证据,它只是"某个系统对历史的描述"。如果描述者本身已经不可信,那么它的描述,自然也需要重新审视。


三、真正危险的是:"日志没有说谎,但也没有说完整"

比篡改日志更常见的,是另一种情况——日志完全真实,却依然说明不了问题

14:01 AI 发起付款申请 14:03 审批通过 14:05 系统完成签名 14:05 交易广播成功

这几条日志全是真的。但它们回答不了真正重要的问题:

AI 为什么认为应该付款?审批人当时看到的是什么?签名前参数有没有变化?最终广播出去的数据,是不是审批时看到的那份数据?

日志没有撒谎,它只是没有回答关键问题。因为它记录的是一个个孤立的动作,而不是动作之间的关系。而几乎所有执行事故(回想第四篇 Bybit、第六篇地址投毒),恰恰就藏在"动作之间的关系"里——每一步单独看都合法,连起来却已经偏离。


四、真正需要证明的是:"它还是同一件事"

假设一个用户说:"给 A 公司付款一万元。" AI 理解后生成付款请求,审批人批准,系统签名,最后广播。

真正重要的问题不是"这些步骤有没有发生",而是——

最后广播出去的那笔交易,是不是最开始那件事情?金额变了吗?地址变了吗?Token 变了吗?网络变了吗?时间变了吗?上下文变了吗?

如果中间任何一步发生了变化,那么前面的审批,还能不能继续有效?

这才是真正需要证明的内容。不是"事情发生了",而是"发生的,是不是原来的那件事情"。用一个词概括,这叫一致性(integrity)与来源可追溯性(provenance)——不仅要知道结果,还要能证明结果忠实地来自最初的意图。


五、真正的证据,是一条连续的、密码学锁死的链

现实世界里,为什么很多文件要骑缝盖章、要页码连续?因为它要证明第一页、第二页、最后一页属于同一份文件,中间没有被抽换。

执行安全也一样。真正的证据不是最后留一条日志,而是一条连续的、环环相扣的链

Intent ──► Policy ──► Approval ──► Payload ──► Execution ──► Evidence │hash │hash │hash │hash │hash │ └──────────┴───────────┴────────────┴────────────┴──────────────┘ 每一条都包含"上一条的哈希":任何一环被替换/重写,整条链的校验立刻崩掉

这不是比喻,而是一种成熟的密码学结构——哈希链(hash chain)/ 默克尔树(Merkle tree),也正是开篇证书透明度用来做到"append-only、防篡改"的底层机制。每一步都能证明:自己来自上一层,没有被替换,没有被重写,没有被偷偷换成另一件事。

真正需要保护的,不是最后那个结果,而是——整个执行过程没有断开。


六、为什么 Havenlon 一直强调 Intent

很多人第一次看 Havenlon 会问:为什么一直强调 Intent?直接看最终交易不就好了?

因为很多攻击根本不改最后一步,它改的是"最开始的意思"

  • 用户说:"付款给供应商。"

  • AI 理解成:"付款给最新地址。"

  • 审批看到:"正常供应商付款。"

  • 执行看到:"最新地址。"

  • 日志记录:"付款成功。"

如果没有把 Intent 纳入证据链,系统永远不知道"最开始用户真正想做什么"。所以真正的证据不是交易、不是签名、不是日志,而是——从 Intent 一直到 Execution,有没有始终保持一致。

这套思路在软件供应链安全里已经有成熟的工业实践,叫in-toto / SLSA 溯源证明(provenance attestation):先由 owner 签署一份"布局(layout,相当于 Intent + Policy)",然后每一步构建都生成密码学签名的证明(attestation),最后用布局去校验所有证明是否环环对得上。它证明的不是"构建成功了",而是"这个产物确实由那份源码、经那条被批准的流程产生,中途没有被掉包"。把它从"软件构建"平移到"AI 执行",就是 Havenlon 的证据链。


七、日志可以补写,执行过程不能补写

日志有一个特点:它可以后来再写、重新整理、重新排序、重新上传。

真正的执行过程,不能重新发生一次。付款已经完成,服务器已经重启,权限已经提升,数据已经导出——这些动作都已经进入现实。

所以真正有价值的证据,应该随着执行一起产生:不是"事情结束后再总结",而是每经过一道关键边界,就留下一个不可否认的状态。这样,后来任何人都不能重新编造一个新的历史。

技术上,这对应在执行现场生成、并当场签名的证据——比如由硬件边界(Enigma)用自己的密钥对"我此刻放行/拒绝了这个动作、参数是这些"做一次签名并锁进哈希链。这类似可信硬件里的远程证明(remote attestation):不是"我事后声称我做了什么",而是"我在做的当下,生成了一份你能独立验证的证明"。


八、真正的证据,不属于任何一个系统

企业还有一个误区:认为日志服务器就是证据中心。

如果业务系统写日志、审批系统写日志、AI Agent 写日志、SaaS 汇总日志——那么所有证据仍然来自软件自己。真正可信的证据,应该来自不同来源、不同信任域、不同角色

  • 业务知道:用户最初想做什么(Intent);

  • 审批知道:组织同意了什么(Approval);

  • SaaS 知道:策略是什么(Policy);

  • Enigma 知道:最后真正执行了什么(Execution)。

没有任何一个系统,能够单独定义全部历史。这才是真正的证据链——它的可信,恰恰来自"没有单一方能独自伪造它"(回想第九篇:掌握执行权的人不该同时掌握历史解释权;第十一篇:证据不能只由 SaaS 自己证明)。这也正是证书透明度的精髓:证书由 CA 签发,但必须记进独立的、公开可审计的日志,让作恶无处藏身。


九、Evidence,不是 Log

所以在 Havenlon 里,我们刻意不叫它 Log Center、Audit Log 或 History,而更愿意叫Evidence(证据)

Log 和 Evidence 最大的区别是什么?

Log 说的是:"我记录了一件事情。"Evidence 说的是:"我能够证明一件事情。"

这两个词根本不在一个层级。日志是一段文字,证据是一种可验证的关系;日志可以"存在",证据必须"成立"。一段可以被作者随意改写的文字,不构成证据;一条任何人都能独立验证、且改一个字节整条链就崩的密码学关系,才构成证据。


十、为什么 Evidence Store 不是日志服务器

很多人第一次看到 Havenlon 的 Evidence Store,会以为它就是个日志数据库。其实完全不是。

Evidence Store 保存的不是"今天执行成功",而是每一次执行为什么能够发生:Intent 是什么、Policy 是什么、Approval 来自哪里、最终 Payload 是什么、执行结果是什么、上一条证据是谁、下一条证据是谁。

每一条证据都能和前后关联,任何一步发生替换,整条链都会断掉。所以 Evidence Store 保存的不是"历史",而是——历史之间的连续关系。用第五节那张图来说,它存的是那一串hash,而不只是那几行事件。


十一、未来真正重要的,不是谁写了日志,而是谁能证明执行

AI 时代,日志只会越来越多——Agent 写、模型写、工具写、SaaS 写,系统每天可能产生几十亿条记录。

真正的问题,已经不是"有没有日志",而是"哪一条能够证明最终执行"。未来企业真正需要回答的,也许不再是"是谁点了确认?",而是:

"这一次执行,从 Intent 到最终结果,中间有没有发生任何不可解释的变化?"

如果能够证明"没有",这才是真正的执行证据。在 AI Agent 大量替人行动的世界里,这种"可证明的执行"会从一个合规选项,变成一个刚需——因为当动作是机器发起的,你唯一能追回信任的方式,就是能独立验证"它做的,就是它被授权做的"。


十二、日志不是证据,执行过程才是证据

日志当然重要,审计重要,复盘也重要。但它们都发生在事情已经结束之后

真正成熟的执行安全,不能把希望寄托在"出了事以后总能查出来",而应该把重点放在——"事情发生之前,就让整个执行过程始终保持可验证。"

这也是 Havenlon 一直强调 Evidence Chain、而不是 Audit Log 的原因:

日志记录的是历史,而证据保护的是"历史为什么能够成为历史"。

真正值得相信的,不是一段事后写下来的文字,而是从 Intent 到 Execution 的每一步,都能证明:

最终发生的,始终是最开始想发生的那件事。

DigiNotar 的日志或许一应俱全,但它证明不了那 531 张证书"本就不该存在"。证书透明度用一条谁都改不动的链回答了这个问题——而 AI 时代的每一次高风险执行,都需要同样一条链。


这是《Havenlon|安全讲人话》系列的第十三篇。下一篇我们谈一个更本质、也更反直觉的能力:在一个所有人都在比"更快开始"的时代,为什么"能停下来",才是最稀缺的能力。


参考来源(本文引用的真实事件与技术概念)

  • Certificate Transparency — Wikipedia

  • Beyond the Padlock: Why Certificate Transparency is Reshaping Internet Trust — InfoQ

  • in-toto and SLSA — slsa.dev

  • Indicator Removal (T1070) — MITRE ATT&CK

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询