如何验证 Git 提交时间戳
Git 提交时间戳出奇地容易被伪造。你可以设置 GIT_AUTHOR_DATE、GIT_COMMITTER_DATE,对分支进行变基,或者干脆在推送前编辑提交元数据。在法律纠纷或合规审计中,普通的 Git 日志往往证明不了什么。
这就是为什么验证比锚定本身更重要。锚定是将提交哈希写入比特币区块链。验证则是让你、审计员或法院能够确认某个特定提交哈希确实在特定时间被包含在特定比特币区块中的步骤。本文重点介绍使用 Timestamp GIT 的验证工作流程——Timestamp GIT 是一个托管的 GitHub App,可以自动化整个流程,并提供基于浏览器的工具、徽章和公共 API。
为什么 Git 提交时间戳的验证很重要
标准的 Git 历史存放在你无法完全控制的服务器上。仓库托管平台、管理面板和本地仓库都可能被修改。即使没有人恶意操作,时间戳也可能在合并、压缩或数据迁移过程中被意外改动。
密码学锚定改变了游戏规则。当 Timestamp GIT 处理一个仓库时,它不依赖 Git 提交时间戳。它获取提交哈希——精确仓库状态的密码学安全指纹——并将该哈希纳入每日清单中。清单哈希被提交到 Merkle 树中,Merkle 根则通过 OpenTimestamps 协议锚定到比特币区块中。
验证随后回答三个问题:
- 这个提交哈希是否存在于每日清单中?
- Merkle 证明是否将该清单哈希连接到已锚定的 Merkle 根?
- 该 Merkle 根是否包含在已确认的比特币区块中?
如果三项检查全部通过,你就拥有了该提交在该日期之前已存在的数学证据。如果你想更深入地了解为什么这对软件知识产权很重要,请参阅什么是密码学现有技术,为什么它对软件很重要?。
Timestamp GIT 隐藏了底层的 OpenTimestamps 工作流程。你不需要安装 CLI、运行手动盖章命令或构建比特币交易。GitHub App 会检测提交,每晚批量处理,并将标准化的证明文件写回你的仓库。
Timestamp GIT 证明是什么样的
Timestamp GIT 证明不是单个文件。它是一小组构件,共同支持独立验证。
核心组件包括:
- 提交哈希:标识一个特定提交的 SHA-1 或 SHA-256 哈希。
- 每日清单文件:一个纯文本文件,包含某个仓库在当天所有待处理的提交哈希。
- Merkle 树:由各仓库的每日清单哈希构建的原生 Merkle 树。
- OpenTimestamps 回执:一个
.ots文件,以密码学方式将清单哈希链接到比特币区块。 - 比特币区块信息:锚定的区块高度、交易数据和确认状态。
根据你的配置,证明会写入专用的 timestamps 分支或影子仓库。某一天的典型证明目录可能如下所示:
timestamps/
2026-09-20/
manifest.txt
receipt.ots
.ots 回执是自包含的,任何人都可以在日后仅使用 SHA-256 数学运算和比特币区块数据来验证它。没有专有技术,也没有锁定。即使 Timestamp GIT 明天消失,证明文件仍然存在,并且仍然可以对照比特币区块链进行验证。
由于只有提交哈希被锚定,证明中不包含你的源代码。验证流程操作的是哈希,而不是仓库内容。
使用 Timestamp GIT 工具进行逐步验证
Timestamp GIT 提供了多种验证途径。你可以使用可视化仪表板进行快速检查,下载报告用于合规,或查询 API 进行自动化。
第 1 步:打开仓库状态页面
每个已连接的仓库都有一个公开或需要认证的状态页面,地址为:
https://timestampgit.dev/status/{user}/{repo}
该页面显示最早的锚定日期、证明持久性、每日规律性、比特币区块和交易数据,以及日历热力图。在同一页面上,你可以下载审计 CSV 或 PDF 证书。
对于快速状态检查,这通常是最快的起点。如果仓库是私有的,URL 会包含加密的 HMAC,只有授权查看者才能访问。
第 2 步:在 README 中使用验证徽章
连接仓库后,Timestamp GIT 可以生成一个可嵌入的验证徽章。徽章直接在 README 中显示最新的验证状态,点击它会跳转到验证页面或状态仪表板。
徽章标记会在仓库连接页面或通过徽章 API 为你生成。你不应该手写 shield URL;相反,应复制 Timestamp GIT 生成的 Markdown 片段。这样可以避免 HMAC 签名的私有仓库 URL 出错。
第 3 步:在浏览器中检查 Merkle 链
对于特定日期,打开:
https://timestampgit.dev/verification/{user}/{repo}/{date}
该页面会逐步展示多层 Merkle 链验证。它显示提交哈希、每日清单哈希、中间 Merkle 节点和比特币区块锚定。
所有计算都在浏览器本地进行。Timestamp GIT 不会看到你正在验证哪个哈希,你也不会将源代码发送到任何地方。该页面确认提交哈希是否属于清单,以及清单是否连接到已锚定的根。
第 4 步:下载 PDF 证书或审计 CSV
对于合规记录、法律审计或内部文档,Timestamp GIT 提供两种可下载的构件:
- PDF 证书:单日证书,显示锚定日期和验证状态。
- 审计 CSV:仓库所有已锚定提交和日期的完整台账。
当你需要将证据附在申报文件中、向客户发送证明或存储离线记录时,这些非常有用。
第 5 步:使用公共 API 进行程序化验证
Timestamp GIT 公开了用于自动化的公共 API 端点。对于公共仓库,你可以直接使用 curl 查询状态信息。
检查最后锚定的比特币区块:
curl https://timestampgit.dev/api/statusLast/your-org/your-repo
检查已提交和已盖章的提交总数:
curl https://timestampgit.dev/api/statusCount/your-org/your-repo
获取综合状态摘要,该摘要也用于 Shields.io 徽章:
curl https://timestampgit.dev/api/statusSummary/your-org/your-repo
获取特定日期的完整 Merkle 链数据:
curl https://timestampgit.dev/api/verify/your-org/your-repo/2026-09-20
对于私有仓库,端点需要在 URL 中包含加密的 HMAC。HMAC 是按服务器实例生成的,只有授权用户才能访问这些仓库的状态。
解读验证结果和边界情况
验证成功意味着以下链条完好无损:
- 提交哈希存在于清单中。
- 清单哈希被正确包含在 Merkle 树中。
- Merkle 根通过 OpenTimestamps 锚定在比特币区块中。
- 该比特币区块已在区块链中得到确认。
一旦这些条件成立,提交时间戳就得到了比特币不可篡改性的支持。
有几个时间和访问方面的边界情况需要了解。
每日批量截止时间。 提交每晚收集并锚定。在某天截止时间之后做出的提交会出现在第二天的锚定中。如果你没有在预期的日期看到某个提交,请检查第二天的验证页面。
比特币确认延迟。 锚定每天进行一次,但在比特币中确认锚定通常需要大约 3 小时。证明文件在确认后写回,因此验证在每晚批量处理后的几个小时内可用。
私有仓库。 私有仓库的状态和验证 URL 使用 HMAC 签名路径。如果同事无法打开状态页面,他们可能需要访问加密链接或通过 GitHub App 访问仓库。
零知识验证。 验证永远不会泄露源代码。它证明某个哈希在特定时间存在,而不是代码包含什么内容。这是有意为之:证明关乎存在性,而非披露。
如果验证失败怎么办? 验证失败可能意味着提交未被包含在每日批量中、证明文件不完整,或者数据被篡改。首先检查仓库状态页面上的正确日期。如果锚定缺失或损坏,请联系 Timestamp GIT 支持。
常见问题
如何使用 Timestamp GIT 验证 Git 提交时间戳?
你可以通过访问 Timestamp GIT 上的仓库状态页面、点击 README 中的验证徽章或使用公共 API 端点来验证提交时间戳。验证页面显示 Merkle 链,并允许在浏览器中进行本地验证。
我可以在不泄露源代码的情况下验证提交时间戳吗?
可以。Timestamp GIT 只使用提交哈希,不使用源代码。验证是针对哈希和比特币区块链进行的,因此你的代码保持私密。
提交时间戳需要多长时间才能验证?
时间戳每晚锚定,比特币确认通常需要大约 3 小时。之后,证明即可用且可验证。
如果验证失败怎么办?
如果验证失败,可能表明提交未被包含在每日批量中,或者证明已损坏。请查看仓库状态页面了解详情,或联系 Timestamp GIT 支持。
结论:信任但要验证你的 Git 历史
锚定在比特币中的提交哈希只有在你日后能够验证它时才有用。仅凭 Git 时间戳是薄弱的证据。密码学证明是强有力的——但前提是验证路径清晰、可重复且独立。
Timestamp GIT 将这条验证路径变成了一个实用的工作流程。安装一次 GitHub App,连接一个仓库,每个提交就会每晚自动锚定。当你需要证明时,可以打开状态仪表板、点击徽章、在浏览器中检查 Merkle 链、下载 PDF 证书或调用 API 端点。
对于开发者、初创公司、代理机构和合规团队来说,这消除了手动工作,同时又不牺牲比特币锚定的数学保证。如果你的下一步是保护自己的提交历史,请安装 GitHub App 或查看定价页面。