返回知识库

Lanveris 的证明方法如何工作?

Lanveris 在本地计算文件 SHA-256,把多条记录组成 Merkle 树,再由第三方 TSA 对 32 字节批次根签发 RFC 3161 时间戳;公开算法和测试向量支持复算指纹与 Merkle 根。

Lanveris 产品与技术团队 · 发布于 2026-07-09

一句话定义

证明方法不是“相信 Lanveris 数据库里写了一个时间”,而是让文件指纹、批次包含关系和第三方可信时间戳彼此校验,任何持有原文件与凭证的人都能复核。

第一步:对精确文件字节计算 SHA-256

浏览器或 CLI 在本地读取文件字节并计算 SHA-256。登记和网页验真不上传原文件,平台接收的是 64 位十六进制指纹以及用户提供的登记元数据。

文件名、扩展名和普通元数据不是判断同一文件的依据。只要文件字节不变,重命名不会改变指纹;只要任一字节变化,指纹通常就会变化。

第二步:用 Merkle 树把记录纳入批次

待确权记录组成一棵 Merkle 树,每条记录都有从自身叶子到批次根的路径。平台无需为每份文件单独请求一次时间戳,也能让凭证证明该记录属于被盖章的批次。

叶子只锁定三个字段:描述 description、内容指纹 contentHash 和 agent 署名。三者按固定键序序列化为无空格 UTF-8 JSON:{"d":"<description>","h":"<contentHash>","a":"<agent>"},再计算 SHA-256。文件名、大小、类型、记录 ID 和账号归属不进入叶子。

父节点算法是 SHA-256(hexDecode(left) || hexDecode(right)),即先把左右两个 64 位十六进制哈希解码为原始 32 字节,再按左、右顺序拼接。某层节点为奇数时,末节点直接晋升,不复制末节点。

验证时按凭证中的 left/right 路径复算批次根;任何受保护字段、兄弟哈希或顺序被改动,结果都无法匹配时间戳。公开测试向量给出规范 JSON、叶子、父节点、奇数节点和证明路径的固定结果。

第三步:第三方 TSA 签发 RFC 3161 时间戳

Merkle 批次根本身已经是 32 字节 SHA-256 值。Lanveris 将这 32 字节直接作为 RFC 3161 请求的 SHA-256 messageImprint 提交给 DigiCert 等独立时间戳机构,不会再对根额外哈希一次。TSA 返回带签名时间、摘要和证书链信息的时间戳响应;原文件和批次明细不会交给 TSA。

时间含义是:TSA 最晚在签名时刻已经看到该摘要。它比平台自己写入 createdAt 更独立,但仍不等于版权机关确认作者或权利归属。

第四步:公开验真与离线验真

公开验真用本地计算出的文件指纹查询登记记录,适合确认平台当前公开的状态、署名标签和时间。下载的 .lanveris 凭证还包含 Merkle 路径、批次根与原始时间戳响应。

CLI 首次验章需要联网下载 Mozilla 信任根,缓存后才可离线核对文件指纹、Merkle 路径、TSA 签名和证书链。网页能在本地计算指纹与 Merkle 根,但完整 TSA 验章需要在线后端。样例页当前只复现文件 SHA-256;完整凭证样例会在生产服务生成真实记录后补充。

常见问题

平台能偷偷改登记时间吗?

平台字段本身可能被数据库管理员修改,但无法据此伪造一份更早的有效 RFC 3161 时间戳。离线验证以 TSA 签名中的时间和摘要为准。

为什么一批记录只盖一个时间戳也能证明每条记录?

Merkle 路径能证明某条叶子属于被签名的批次根。只要叶子或路径被改动,重算出的根就无法匹配 TSA 签名的摘要。

这套方法证明了内容真实吗?

没有。它证明精确文件字节在可信时间前已经存在并保持完整,不证明内容是否原创、真实拍摄、未侵权或由某个特定人创作。

资料来源

相关阅读