跳至正文

指南

如何给文档加时间戳,证明它在某日期已存在?

计算文件的密码学哈希,再将哈希发布到您无法控制的带日期记录中:公开区块链上的交易,或时间戳机构签署的凭据。日后持有相同文件的人可以重新计算哈希,与带日期的记录比对,证明该内容至迟在该日期已经存在,而无需公开内容。时间戳只证明某日期已存在,不证明谁写的、谁同意过,也不证明内容真实。

更新于2026年10月3日

什么是密码学哈希

密码学哈希是从文件计算出的定长指纹:相同输入总会产生相同输出,改动单个字符会产生完全不同的指纹。它是单向的,不能从哈希恢复原文;用当今计算机寻找哈希相同的两个不同文件,在实际中不可行。

最常见的是 SHA-256 和 Keccak-256。SHA-256 是 Bitcoin 和多数时间戳机构采用的常用标准。Keccak-256 广泛用于 Ethereum 及 Polygon 等兼容链,也是 TrustChain 锚定已签署协议时使用的哈希。两者均生成 64 位十六进制字符串,都适用于时间戳;只须记下用了哪一种。

  1. 每次输入同一文件,得到同一指纹
  2. 改动一个字符,整个指纹都会变化
  3. 无法由指纹反推出正文
  4. 无论文件是一行还是一吉字节,指纹长度相同

为什么公开哈希能证明某日期已存在

关键就在于发布哈希,而不是文档。哈希不透露内容,可以公开保存;而事后构造一个恰好匹配指定哈希的文档,在实际中不可行,因此带日期的公开哈希记录能表明该确切内容至迟在那天已存在。

证据的力度来自记录,而非哈希本身。在您自己的笔记本里写下哈希证明不了什么,因为笔记本和日期由您控制。Bitcoin 或 Polygon 区块中的哈希,或时间戳机构签署凭据中的哈希,则由您无法控制且许多人共同观察的系统确定日期。

逐字节保存原文件。只有日后能提供哈希等于已发布值的文件,证明才有效;重新保存的 PDF、重新输入的文本或带修订痕迹的文档会得到不同哈希。把确切文件保存在多处,并记下所用哈希算法及发布位置。

时间戳不能证明什么

时间戳证明特定字节在某日期或之前已存在。它不证明其他内容,甚至不证明文档写于当天:一月写好、三月锚定的文本,得到的是三月的时间戳。人们常从时间戳额外推断三件它无法证明的事;本指南每种方法都如此,包括 Polygon 锚定或机构签署凭据。

  1. 谁写的。任何人都能对任何文件计算哈希,包括从别人那里复制的文件。区块或凭据中的哈希既不识别作者,也不识别发布者,除非另有身份步骤把某人与该行为关联起来。
  2. 是否达成一致。带时间戳的合同草稿只说明草稿存在过,不说明另一方看过、接受或签署。达成协议需要双方同意同一文本的记录。
  3. 是否真实。发票、声明或主张的哈希,不能说明其中内容是否准确。它是字节的指纹,不是事实核查。

公开区块链锚定:Polygon 和 Bitcoin

区块链锚定把哈希放入公开链的交易,包含它的区块提供日期。在 Polygon 或 Ethereum 上,哈希写入交易数据或合约事件。在 Bitcoin 上,常用 OpenTimestamps:一个免费的开放协议,把许多哈希汇成一棵默克尔树,用一笔 Bitcoin 交易提交根值,并提供一份供您保留的小型证明文件。

优点是独立性和持久性。证明持续有效不需要某家公司继续营业,任何人都能在公开区块浏览器查找交易;区块确认并被后续区块覆盖后,记录改动可被发现:任何修改都会被运行网络的所有人看到。

弱点是精度和身份。区块时间戳由网络设置,是近似值而非精确值:Bitcoin 可能偏差一小时或更多,因此应视为日期证明而非分钟证明。OpenTimestamps 证明完全确认可能需要数小时,且交易 ID 或证明文件须自行保留。最重要的是,交易不识别任何人:它只显示某钱包在某时间发布了哈希,不说明谁写了或同意了文档。

时间戳机构与公证人

时间戳机构是一个服务器,将您的哈希与当前时间一起签署并返回凭据。常用标准是 RFC 3161,欧洲 eIDAS 框架还定义了由受监管服务商提供的合格版本。您提交的是哈希,而非文档,因此机构不会获知内容。

优点:精确时间、广泛认可的格式,以及许多文档和代码签署工具的内置支持。弱点:您须信任机构的时钟、密钥管理及持续存在,日后检查凭据还需要能理解该格式的软件。如果机构签名密钥泄露,其签发的每份凭据都会变得可疑。

公证人是人工替代方案。公证人核验身份、见证签名并在登记簿记下日期。这与哈希是不同类型的证据,也是本列表中唯一能说明谁在现场的方法。限制在于费用、预约,以及公证人通常见证纸质签署而非数字文件的字节:除非同时对文件计算哈希,否则经公证的纸件与编辑过的数字副本仍可能不同。

为什么发邮件给自己的证明力较弱

把文件发邮件给自己是常见土办法,但有三个弱点。邮箱由您控制,可以删除邮件,再以修改后的附件重建。邮件头日期是纯文本,收信过程中或导出后都可能被改。内容还完整保存在邮箱中,既不私密也不紧凑。

它唯一的优点是邮件服务商服务器上的接收时间戳,不由您控制。这比没有稍好,但服务商并未见证任何事,其日志也不是为证据设计的,几年后也不会帮您调取服务器记录。如果想同样简单却能实际证明日期,可以计算文件哈希,再用 OpenTimestamps 标记:只需一条命令,公开时间记录服务免费。

TrustChain 的定位

单纯时间戳只回答一个问题:这些字节至迟在这天是否已存在。TrustChain 面向另一个问题:经核验的双方是否同意这份确切文本,以及何时同意。双方通过 Sumsub 用带照片的身份证件和自拍完成一次身份核验,签署同一份最终文本;双方都有账户后还可进行端到端加密聊天。未经核验的账户不能签名。

签署时,TrustChain 为每个身份已核验账户的签名写入带时间戳的审计条目。浏览器和应用无法编辑,这是单靠哈希无法提供的部分。锚定是可选的:它计算已签署记录的 Keccak-256 指纹,并写入 Polygon 主网交易,公开确定日期。Free 方案($0,无需银行卡,每月 1 份协议和 3 次 AI Advisor 请求)中,额外协议或 Polygon 锚定每次各一次性收取 $1,锚定还需身份已核验。Pro 每月 $19,含 20 份协议和 20 次锚定;Elite 每月 $49,两项各 100。方案按月,可随时取消。

若锚定,写入链上的是指纹、内部记录 ID 和两个空钱包栏位,绝不包含正文、姓名或邮箱。协议正文保存在 TrustChain 服务器,以便计算指纹及提供记录、证书和 PDF,所有方案下都免费。聊天端到端加密,TrustChain 无法读取消息。公开链接无需账户,显示记录状态及已锚定时的指纹,绝不显示双方身份;只有 Elite 方案创建的协议才显示标题。已锚定时,任何区块浏览器都可独立于 TrustChain 核查 Polygon 交易。TrustChain 在 Polygon 主网上的智能合约是 0x649Bc303d15E173D95B4d379e163868b03cf5Fec。

这些都不改变时间戳的本质。锚定指纹及其日期可在任何地方核查;协议能否执行取决于双方所在地和约定内容,TrustChain 对此不作声称。

手动操作

选择一种哈希函数并记录下来。以下步骤用于您自行计算哈希的文件;TrustChain 指纹还涵盖内部记录和账户 ID,因此不会与单纯正文的哈希匹配。各主流操作系统都自带 SHA-256 工具。Keccak-256 是 TrustChain 及 Ethereum 兼容链使用的函数,需要一段简短脚本,因为 OpenSSL 等命令行工具的 sha3-256 选项属于 NIST SHA-3,填充方式不同,结果也不同于 Keccak-256。

在线哈希计算器方便,但有两点要注意。粘贴或上传的任何内容都会离开您的电脑,切勿用于不愿公开的文件;完全在浏览器内运行的工具更好,粗略检查办法是在计算前断网,看它是否仍能运行。陌生网站也可能把算法标错,因此依赖结果前,至少用本地命令交叉核对一次。

得到哈希后,将其发布到带日期且您无法控制的地方:OpenTimestamps 证明、时间戳机构凭据,或公开链交易。随后保存确切原文件,并记下算法、哈希和发布位置。

日后检查时,对同一文件运行相同命令,比对两个 64 位字符串;0x 前缀和字母大小写无关,其余字符必须全部一致。若不同,说明文件变了,或使用了不同算法或编码;常见原因是重新保存 PDF、转换换行符或末尾新增换行。若哈希已链上锚定,在区块浏览器打开交易,在数据中找到哈希,再用同样方式比对。

  1. macOS 上的 SHA-256:shasum -a 256 agreement.pdf
  2. Linux 上的 SHA-256:sha256sum agreement.pdf
  3. Windows(PowerShell)上的 SHA-256:Get-FileHash agreement.pdf -Algorithm SHA256
  4. 使用 Python 的 Keccak-256(先运行 pip install pycryptodome):python3 -c "from Crypto.Hash import keccak; print(keccak.new(digest_bits=256, data=open('agreement.txt','rb').read()).hexdigest())"
  5. 使用 Node.js 的 Keccak-256(先运行 npm install ethers):node -e "const {ethers}=require('ethers'); console.log(ethers.keccak256(require('fs').readFileSync('agreement.txt')))"

接下来常问的问题

时间戳能证明文档作者吗?

不证明。哈希识别的是字节,不是人;任何人都能对不是自己写的文件计算哈希。TrustChain 回答相邻的问题:谁签署了。双方签署前须用带照片的身份证件和自拍核验身份,未经核验的账户不能签名,因此记录中的签名来自已核验身份。但这仍不能说明最初是谁写下文本。

使用 TrustChain 将协议锚定到 Polygon 要多少钱?

Free 方案($0,无需银行卡)每月包含 1 份协议;额外 Polygon 锚定每次一次性收取 $1,且需身份已核验。Pro 每月 $19,包含 20 份协议和 20 次锚定;Elite 每月 $49,两项各 100。方案按月,可随时取消。锚定是可选的:每份已签署协议都有浏览器和应用不能编辑的带时间戳审计条目,锚定才增加 Keccak-256 指纹;您自己的记录、证书和 PDF 在所有方案下都免费。

协议正文存储在区块链上吗?

不存。若选择锚定,写入链上的是 Keccak-256 指纹、内部记录 ID 和两个空钱包栏位,绝不包含正文、姓名或邮箱。协议正文存储在 TrustChain 服务器上,以便计算指纹及向双方提供记录、证书和 PDF。协商聊天采用端到端加密,TrustChain 无法读取消息。指纹还涵盖内部记录和账户 ID,因此无法单凭正文重新计算。

没有账户能核验 TrustChain 时间戳吗?

能。公开链接无需账户即可打开,显示记录状态,以及已锚定时的指纹,绝不显示双方身份;标题仅在 Elite 方案下创建的协议上显示。若记录已锚定,Polygon 交易可在任何区块浏览器独立于 TrustChain 核查。TrustChain 在 Polygon 主网上的智能合约是 0x649Bc303d15E173D95B4d379e163868b03cf5Fec。

时间戳能让协议在法律上更有力吗?

TrustChain 不作这项声称。时间戳表明文本至迟在某日期存在;TrustChain 记录再说明哪些已核验账户在何时签署,仅此而已。锚定指纹及其日期可在任何地方核查;协议能否执行取决于双方所在地和约定内容,TrustChain 对此不作声称。如果这对您重要,应咨询在您所在地执业的律师。

新的身份核验目前暂停。以前已通过核验者仍可签署;未通过者须等核验恢复。起草、阅读、分享链接和查找记录均可正常使用。

Free 方案每月包含 1 份协议:双方各经 Sumsub 身份核验、带日期的签名记录和公开链接。无需银行卡。

继续阅读