把文件封起来,没人能跟你争辩

2026年9月1日1 次浏览来源:Dev.to阅读原文

关于一个数字文件的争论 几乎不会因为文件上说的话而失去 前面已经失去了一个问题: 我们怎么知道这是你收到的文件 而不是你昨晚编辑的文件?

如果答案是"相信我" 你已经输了 随便你说什么 这个问题不仅限于法庭。

接收原木堆的审计员有 记录事故的团队 或任何保留合同副本的人 通过电子邮件签名。

在每一种情况下,需要都是一样的:能够证明一组字节自某一时刻起就没有改变——并且得到不属于你的人的证明。

因此我写了"通约":一个只读取材料的Rust工具, 计算指纹,并签下任何人都可以验证的记录。

为什么是树而不是花草 显而易见的方法是把所有东西都融为一体,并采用SHA-256。

有用,实际上也没用。

当有人对一个文件——四千个中的特定电子邮件——产生争议时,一个单一的散列会留给你两个选项:交出完整的集,以便可以重算,或者要求被相信.

第一种是揭露没有商业价值的材料;第二种不是证据。

一棵梅克勒树就解决了 每个文件为一叶子,每对节点向上结合,并留有根.

为了证明一个叶子属于那个根,你只需要展示那片叶子和花序到顶部的路径:几千字节.

其余的片段从未被触及.

非可选树的两个细节: 没有第一种,可以呈现出一种叶状散列状,仿佛是树的节点.

没有第二回,你得到树的经典模糊度,叶子的奇数:两组不同的可以产生同根.

它是一个被熟知的老虫子,它不断出现在新的执行中.

指纹覆盖状态 不只是内容 叶子不是文件的散列:它是完整元素的散列——路径,大小,时间戳,状态和内容散列.

差别相起.

如果指纹只覆盖内容,将一个文件移动到另一个文件夹,重新命名,或者取而代之以指向相同内容的链接,将使根完好无损.

这三种动作改变了设定的含义:文件是被记录的事实的一部分,而不是演示细节。

十年后该唱片由奎普的三合一签名签名: Ed25519 + ML-DSA-87 (FIPS 204) + SLH-DSA-SHA2-256s (FIPS 205) ——所有这三种必须验证.

这不是算法收集。

其使用寿命不以月为单位计量:一个案件档案需要数年才能解决,签名最终仍需要验证.

三个棋子由于不同的原因都失败了—— Ed25519 对抗量子计算机; ML-DSA 因为是近代并基于花纹; SLH-DSA 只有在散列函数中断时——所有三个都同时需要,才能被封印所持有.

一次摔倒并不能降低记录 成本为诚实:签名重约34KB.

要封存一组文件,这就是噪音。

验证签名是不够的 这是最容易发生的错误, 签名涵盖了记录的完整JSON,包括完整性根.

如果在检查签名时停止核查, 您接受了一个无人重算的根 : 持有密钥的人可以签署一个记录, 其根与它列出的元素不符, 并且会通过 。

因此,核查总是对树进行再计算,然后才查看签名。

对这一确切案例有一个专门的检验:在谎言根上作正版签名必须失败。

当一个事实不见了, 发出声音 掩盖自身失败的诚信工具比没有诚信工具更糟糕,因为它在没有支持的情况下产生信心。

三个决定: 一个无法读取的文件停止了封印.

它不是默默地跳过。

如果真的无法读取,则必须明确要求,然后记录记录为错误:

分享