如何用校验和与 OpenTimestamps 核对一份文件
已发布的文件可以事后修改,日期也可以随口宣称。两项检查让这两件事都无法伪造——而且都不需要您信任发布者。
检查一:校验和
校验和是文件的指纹:由每一个字节算出的定长数字。改动一个字节,指纹就会完全不同。SHA-256 是常用的算法,它的指纹是 64 个十六进制字符。
当发布者在文件旁列出校验和时,您可以计算所下载副本的指纹并加以比对。若两者相同,您的副本与发布的那一份逐字节一致。若不同,途中有东西变了——要么是文件,要么是那份列表。
在 macOS 上:打开终端,运行 shasum -a 256 加文件名。在 Linux 上:sha256sum 加文件名。在 Windows 的 PowerShell 中:Get-FileHash、文件名和 -Algorithm SHA256。每条命令都会打印指纹;逐字符与公布的比对,或把两者粘进文本编辑器用查找功能核对。
一点提醒:核对之前不要打开并重新保存文档。文字处理软件在保存时会重写文件,即使看不出任何变化,指纹也不会再对上。先核对,后阅读。
检查二:时间戳
校验和证明文件是什么,却不能证明它何时存在。这就要用到 OpenTimestamps:一个免费的开放标准,把指纹锚定在比特币区块链上,而区块所带的日期事后无人能改。
时间戳证明是一个扩展名为 .ots 的小文件,与文档并排发布。它不包含文档;它包含一条从文档指纹通往某个比特币区块的路径。核验它,就确立了带有这一确切指纹的文件不晚于该区块的日期即已存在。它不确立文件由谁制作,只确立它当时已经存在。
核验方法:安装 OpenTimestamps 客户端(在任何装有 Python 的系统上运行 pip install opentimestamps-client),把文档和它的 .ots 文件放进同一个文件夹,运行 ots verify 加 .ots 文件名。客户端读取证明,把指纹与文档核对,并报告区块和日期。刚打上的证明可能会显示「pending」约一天,直到比特币区块被挖出;随后发布者升级证明,核验即成定论。
这两项检查做不到什么
它们不会告诉您文档是否真实、合理或完整。它们告诉您:这个文件就是发布的那一份,而且它在那个日期已经存在。其余的靠阅读。
它们不需要发布者诚实。指纹是算术;区块在公开链上。发布者可以在文档内容上说谎,却无法让改动过的文件对上旧的指纹,也无法让新文件出现在旧的区块里。
我们为什么两者都发布
本站每一份文档旁边都有校验和与时间戳证明。理由就在上面:读者不该被迫相信我们所说的「这个版本就是那个版本」或「这个日期就是那个日期」。文档一旦变更,就会获得新的校验和、新的证明和表格中的新一行;旧的行保留。