
一张打字纸留下机械压痕,一份数字记录留下哈希。它们都能成为证据的一部分,但都不能独自回答“这句话最初是不是事实”。我想把打字机与区块日志放在同一幅概念图里,讨论的是这个容易被技术修辞跳过的边界,而不是描述一次未经记录的个人实验。
先区分改动检测与事实核实
哈希链可以把一条记录绑定到它之前的历史。若有人只修改中间一条而不更新后继链接,检查会失败。但如果攻击者能改写全部记录和最后的锚点,内部自洽的链也可能完全出自伪造。因此锚点由谁保存、怎样独立获得,和哈希函数本身一样重要。

下面用三个普通字符串演示这个区别。它是本地文件完整性模型,不是区块链共识协议,也没有数字签名。
from hashlib import sha256
def head(records):
h = bytes(32)
for record in records:
data = record.encode("utf-8")
h = sha256(h + len(data).to_bytes(8,"big") + data).digest()
return h
records = ["request received", "policy accepted", "receipt pending"]
anchor = head(records)
assert head(list(records)) == anchor
changed = records[:]
changed[1] = "policy rejected"
assert head(changed) != anchor
# A false statement can still have a perfectly well-defined hash.
false_records = ["the moon is made of cheese"]
assert len(head(false_records)) == 32
print("3 integrity cases checked; factual truth is not checked")
保存为 hash_log.py,运行 python3 hash_log.py。长度前缀让记录边界明确,旧锚点用于检测改动;它没有阻止攻击者重新计算另一条链。最后一个断言只说明一个字符串也能产生哈希,不为字符串的内容作任何背书。
AI 生成的报告也需要这两条路径
给模型输出计算一个摘要,能帮助确认后续看到的是同一份文件;要判断其中的漏洞、新闻或性能数字是否成立,还得看目标代码、原始来源和实际执行结果。以太坊基金会关于 Agent 审计的经验,正是把候选描述与能够独立重跑的发现分开。审计方法
10 月 1 日公布的 zkAPI 则提供一个有边界的密码学应用例子:它分开了支付身份与请求路径,同时明确说明网络元数据和请求内容仍可能泄露关联。一个系统承认这些边界,比宣称“一次加密就获得完整隐私”更值得信任。zkAPI 说明
让记录保留解释空间
一份有用的技术日志应该能区分观察、推断和决定。观察是读到了什么;推断是某个规则如何解释它;决定是哪个主体授权了下一步。把三者混在一句“系统确认成功”里,事后即使文件一字未改,也很难知道真正发生过什么。
这个例子已检查本地完整性关系,未测试分布式存储、可信时间、签名或共识。代码可以帮助我们保存历史,但值得保存的历史,还需要来源、上下文和能够提出异议的人。


