跳至正文

文档与票据

可信时间戳与 SHA-256 哈希:如何证明文件未被修改

计算文件的 SHA-256 哈希值,验证 RFC 3161 时间戳,并了解可信时间戳在中国诉讼中的证据地位与限度。

发布于 · 14 分钟阅读

本页内容

SHA-256 哈希值标识一份文件的确切字节,可信时间戳证明这个哈希值在某个时间点已经存在;二者结合,可以说明文件自该时间点以来没有被修改。两者都不能证明内容属实、文件真实,也不能证明是谁制作的。

本文写给需要把文件作为证据留存的财务、理赔、法务和合规团队,内容包括:用系统自带命令完成 SHA-256 校验、读懂 RFC 3161 时间戳、中国法律和司法解释如何看待电子数据与时间戳认证,以及如何把二者放进复核流程。本文不构成法律意见。

SHA-256 哈希值能证明什么,不能证明什么

SHA-256 哈希值是根据文件的全部字节计算出的 256 位摘要,写成 64 个十六进制字符,算法见 NIST FIPS 180-4。与只能发现意外损坏的校验和不同,密码学哈希函数的设计目标是:想伪造另一份哈希值相同的文件,在计算上不可行。哈希值描述的是字节,而不是外观:

操作哈希值会变吗?
重命名、移动或复制文件不会
在资源管理器里修改“修改日期”不会:日期不属于文件内容
打开 PDF 后重新保存,页面上看不出变化通常会:应用会重写元数据和内部结构
修改元数据,或导出、转换为其他格式会
截屏,或用微信等会重新压缩图片的聊天工具发送图片会:得到的是另一个文件

所以,哈希值不同只说明字节不同,不一定是金额被改,更不一定是欺诈;哈希值相同说明字节相同,不说明内容真实:一张伪造的发票同样有稳定的哈希值。更要紧的是,能改文件的人也能重新计算哈希值,它只有记录在保管人无法悄悄改写的地方才有证明力,这正是时间戳的作用。

关于算法:NIST 计划在 2030 年 12 月 31 日前,在所有应用中停用 SHA-1(NIST);RFC 6151 认为,在需要抗碰撞性的场合(例如数字签名),MD5 已不可接受。作为证据留存时,请不要使用 MD5 和 SHA-1。另外,国内采用国密算法的系统可能使用 SM3(GB/T 32905-2016):它同样输出 256 位,但结果与 SHA-256 不同,不能互相比对,核对前请先确认对方用的是哪种算法。

SHA-256 校验:在 Windows、macOS 和 Linux 上计算并比对文件哈希值

要校验一份文件,请在自己的电脑上计算它的哈希值,再把完整结果与期望值比对。各系统都自带命令:

系统命令
Windows(PowerShell)Get-FileHash .\invoice.pdf -Algorithm SHA256
Windows(命令提示符)certutil -hashfile invoice.pdf SHA256
macOS(终端)shasum -a 256 invoice.pdf
Linux(命令行)sha256sum invoice.pdf
任何装有 OpenSSL 的系统openssl dgst -sha256 invoice.pdf

比对时请注意:

  1. 计算的是文件本身,而不是在某个应用里打开后又重新保存的副本。
  2. 比对全部 64 个字符。让开头几位相同的成本很低,只看开头和结尾什么也说明不了。大小写不影响结果(PowerShell 输出大写,sha256sum 输出小写)。
  3. 让机器来比对。在 PowerShell 中,(Get-FileHash .\invoice.pdf -Algorithm SHA256).Hash -eq "期望的哈希值" 返回 True 或 False。对于发布在 SHA256SUMS 文件中的清单,Linux 用 sha256sum -c SHA256SUMS,macOS 用 shasum -a 256 -c SHA256SUMS,每个文件会显示 OK 或 FAILED。

想确认工具本身没问题,可以对一个恰好只含 abc 三个字符的文件计算哈希值(macOS 和 Linux 用 printf abc > test.txt,PowerShell 用 Set-Content -Path test.txt -Value abc -NoNewline),结果应为 ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad。如果编辑器在末尾加了换行,结果会变成 edeaaff3f1774ad2888673770c6d64097e391bc362d7d6fb34982ddf0efd18cb。

期望值要来自独立的来源。与文件放在一起发布的哈希值只能防止下载损坏,防不住能同时改动二者的人;用作证据时,请取自自己的收件登记、出具方的平台或时间戳,不要采用争议文件发送方提供的哈希值。

对在线哈希计算工具要保持警惕:不少工具需要上传文件,等于把全部内容交给第三方,也很难判断页面是在浏览器里计算还是在服务器上计算。发票、合同、理赔材料等请用上面的本地命令,结果相同,文件也不会离开您的电脑。

可信时间戳多证明了什么:RFC 3161 的工作方式

时间戳把一组数据与一个特定时刻绑定,证明这些数据在那一刻已经存在。文件自带的日期不具备这种作用:修改日期、PDF 的创建日期、照片的拍摄日期,都是您无法控制的设备上的软件写入的,也都可以修改。可信的时间戳来自第三方,其时钟和签名密钥与您无关。RFC 3161 规定了这一协议:

  1. 您计算文件的 SHA-256 哈希值。
  2. 您把哈希值(不是文件)连同一个随机数(用于防重放)发给时间戳机构(TSA)。
  3. TSA 签发一份时间戳令牌,把您的哈希值与签发时的 UTC 时间、序列号和策略绑定在一起。
  4. TSA 返回令牌,您把它和文件放在一起保存。

TSA 从不接触文件本身,所以保密材料也可以加盖时间戳。验证时,重新计算哈希值,确认它与令牌中的哈希值一致,再检查 TSA 的签名,以及它的证书是专用于时间戳、且能链到受信任的根。OpenSSL 可以完成全部步骤(文档):

任务命令
生成请求openssl ts -query -data invoice.pdf -sha256 -cert -out invoice.tsq
查看响应openssl ts -reply -in invoice.tsr -text
用响应校验文件openssl ts -verify -data invoice.pdf -in invoice.tsr -CAfile chain.pem

请求以 HTTP POST 发送(内容类型为 application/timestamp-query),地址由服务机构提供。-text 会显示哈希值(“Message data”字段)、序列号和 GMT 时间。校验成功时输出 Verification: OK;文件与当时加盖时间戳的文件不一致时,输出 Verification: FAILED 和“message imprint mismatch”错误。chain.pem 是 TSA 的根证书。OpenSSL 不会告诉您该服务机构是否具备资质,不加 -crl_check 也不检查吊销状态。

TSA 的证书会过期。令牌在证书有效期内签发的,之后仍然可以使用,但多年后直接校验可能失败,此时可用 -attime 把校验时间设为令牌的签发时间(Unix 时间戳)。需要长期保存时,请同时保存校验所需的信息,并用新的时间戳续期。

PDF 也可以把令牌嵌在文件里,称为文档时间戳,格式由 PDF 签名标准 PAdES 定义(ETSI EN 319 142-1)。它覆盖加盖时刻之前的全部字节,不覆盖之后的修改。Acrobat 在“签名”面板中列出它,并显示时间、签发者和验证状态。

国内的时间戳服务也有国家标准可循:GB/T 20520-2025《网络安全技术 公钥基础设施 时间戳规范》自 2026 年 2 月 1 日起实施,原 2006 年版已废止(国家标准全文公开系统);此外还有 GB/T 36631-2018《信息安全技术 时间戳策略和时间戳业务操作规则》。

可信时间戳在中国的法律分量

本节摘要法律和司法解释的条文,不构成法律意见;条文以官方现行有效文本为准。

《电子签名法》

2019 年修正的《电子签名法》(文本)有几条与此相关:第五条规定,既能够有效地表现所载内容并可供随时调取查用,又能够可靠地保证自最终形成时起内容保持完整、未被更改的数据电文,视为满足法律、法规规定的原件形式要求;第七条规定,数据电文不得仅因其是以电子、光学、磁或者类似手段生成、发送、接收或者储存的而被拒绝作为证据使用;第八条要求审查数据电文作为证据的真实性时,考虑生成、储存或者传递数据电文方法的可靠性,保持内容完整性方法的可靠性,鉴别发件人方法的可靠性,以及其他相关因素。

第十三条和第十四条则针对“可靠的电子签名”:签署后对数据电文内容和形式的任何改动能够被发现,是其条件之一,可靠的电子签名与手写签名或者盖章具有同等的法律效力。哈希值和时间戳本身不是电子签名,不会当然产生第十四条的效力;它们的价值,在于帮助说明第五条、第八条所关注的“保持内容完整性的方法是否可靠”。

互联网法院规定第十一条

《最高人民法院关于互联网法院审理案件若干问题的规定》(法释〔2018〕16 号,2018 年 9 月 7 日起施行)第十一条第二款写道:“当事人提交的电子数据,通过电子签名、可信时间戳、哈希值校验、区块链等证据收集、固定和防篡改的技术手段或者通过电子取证存证平台认证,能够证明其真实性的,互联网法院应当确认。”(条文)这一规定的适用范围是互联网法院审理的案件。同条第一款要求在对方提出异议时,着重审查软硬件环境是否安全可靠、提取和固定的方式是否可靠且过程可以重现、内容有无增删修改,以及能否通过特定形式得到验证。

民事诉讼中的电子数据

《民事诉讼法》第六十六条把电子数据列为法定证据种类,并要求证据必须查证属实(文本)。《最高人民法院关于民事诉讼证据的若干规定》(法释〔2019〕19 号,2020 年 5 月 1 日起施行)进一步规定(文本):

  • 第十四条把电子邮件、即时通信、文档、图片等列入电子数据;第十五条要求提供原件,并规定电子数据的制作者制作的与原件一致的副本,或者直接来源于电子数据的打印件或其他可以显示、识别的输出介质,视为原件。
  • 第九十三条列出法院判断真实性的因素,包括软硬件环境是否完整可靠,电子数据是否被完整地保存、传输、提取,以及方法和主体是否适当。
  • 第九十四条规定,由记录和保存电子数据的中立第三方平台提供或者确认的电子数据,法院可以确认其真实性,但有足以反驳的相反证据的除外;经公证机关公证的,法院应当确认其真实性,但有相反证据足以推翻的除外。

因此,可信时间戳和哈希值校验是证明真实性的手段之一,而不是自动采信的凭证。是否采信,由法院结合个案审查。

时间来源与服务机构

中国科学院国家授时中心承担国家标准时间(北京时间)的产生、保持和发播(中心简介)。法律并未要求时间戳必须出自某一家机构,但在选择服务时,可以请机构说明其时间来源、遵循的标准以及公开的验证方式,并保存好令牌和验证材料。涉及重大争议时,还可以考虑第九十四条第二款提到的公证。

把哈希值和时间戳用进文件复核流程

哈希值和时间戳只有在恰当的时刻获取、并与文件分开保管,才真正有用:

  1. 收到文件时立即计算哈希值,在任何人打开、重命名、批注或重新保存之前。请在副本上工作。
  2. 把哈希值连同文件名、发送方、渠道和收件时间登记在案,并保留原始邮件(含邮件头)。
  3. 原件设为只读,存放在修改有日志可查的位置。
  4. 给“清单”加盖时间戳:清单是一个文本文件,逐行列出文件名及其哈希值,一个令牌即可为清单上的所有文件定时。争议可能进入诉讼的,请选择能说明时间来源的服务机构。
  5. 每次收到重新发来的文件都要比对。哈希值不同,就是一个需要从头复核的新版本,无论文件名是否相同。
  6. 整理一套验证材料(文件、哈希值、令牌、证书链和命令),让另一个人多年以后也能重做校验。

哈希值只说明手里的文件是不是您登记过的那份。要查看文件内部改了什么,见如何判断 PDF 或 OFD 文件有没有被修改;数电发票是否真实,以查验平台的结果为准,并与合同、验收记录和付款记录核对,见对公付款前如何核验发票和收款账户。内容凭证(C2PA)与水印也依赖内容哈希,并可以嵌入 RFC 3161 时间戳(C2PA 规范 2.2),但它记录的是内容如何生成,而不只是字节。

Fileverity 报告怎样记录哈希值和时间戳

每份 Fileverity 报告都记录被检文件的 SHA-256 哈希值,日后的复核人员可据此确认检测结论对应的是哪一个文件。报告签发时,包含该哈希值的报告数据由 DigiCert 的 RFC 3161 时间戳机构加盖时间戳。PDF 报告还带有 PAdES 文档时间戳,其证书链可追溯到 Adobe Approved Trust List 中的根。

只有验证成功,才会标明时间戳或 PDF 签章。服务或验证材料不可用时,报告仍会交付,并明确标注缺少这项证明。Fileverity 报告中的时间戳是 RFC 3161 第三方时间戳,不是欧盟 eIDAS 意义上的合格电子时间戳(qualified electronic time stamp),Fileverity 也不是国内意义上提供可信时间戳服务的机构。需要国内可信时间戳的,请另行委托时间戳服务机构对证据材料加盖。信任中心说明了报告如何封存和验证,核验页面显示签发时记录的结果,并在您的设备上比对图片或报告数据文件。

时间戳证明的是数据在某个时刻已经存在,不证明文件中的事实或检测结论正确。原件不作为长期档案保留,请自行保存一份,报告中记录的哈希值可以把它与报告对应起来。文档检测处理哈希值说明不了的内容:文本、文件结构、保存版本和受支持的 PDF 签名。

案例:同一张发票,为什么哈希值不一样

以下为虚构案例,哈希值只写前几位。7 月 6 日,应付会计收到供应商邮件发来的发票 PDF,价税合计 ¥48,000.00。会计在打开之前把文件原样保存,计算 SHA-256 哈希值,开头为 3fa9c1;登记哈希值、发件人、邮件编号和收件时间,再给一份一行的清单加盖时间戳,保存令牌。发票经与合同、入库单核对并在查验平台查验后,进入付款审批。

9 月 19 日,供应商称发票金额应为 ¥54,000.00,并重新发来“同一份”PDF,它的哈希值开头为 b04e52。应付会计这样处理:

  1. 两个不同的哈希值说明是两个不同的文件,但没有说明差在哪里、是谁改的。
  2. 执行 openssl ts -verify -data manifest.txt -in receipt.tsr -CAfile chain.pem,并在清单里找到保存的原件的哈希值 3fa9c1…。令牌上的时间是 7 月 6 日。
  3. 比对两份 PDF,调出原始邮件和邮件头,并通过供应商准入时备案的联系人,请对方提供开票系统里的版本。

这些材料只支持一个有限的结论:收到的那份文件在 7 月 6 日已经存在且未被改动,供应商现在发来的 PDF 是另一个文件。谁改了哪一份并未查明,对方当时发了什么要看保存的邮件,而不是时间戳。应付金额以合同、验收记录和税务系统中的发票信息为准;原发票确有错误的,应冲红后重新开具。争议发生之后才去加盖的时间戳,证明不了 7 月 6 日的任何事情:令牌只标明它签发的时刻。

常见问题

SHA-256 还安全吗?

安全,可用于完整性校验和证据留存。NIST 的政策允许在所有需要安全哈希算法的应用中使用包括 SHA-256 在内的 SHA-2(NIST 政策)。应避免的是 MD5 和 SHA-1。需要保存很多年的材料,请计划重新加盖时间戳。

两个不同的文件会有相同的 SHA-256 哈希值吗?

从数学上说可能,因为可能的文件数量远多于 256 位的取值。SHA-256 的设计使得找到这样的一对文件在当前算力下不可行,所以哈希值相同是字节相同的强有力迹象,而不是数学证明。

重命名或复制文件会改变哈希值吗?

不会。哈希值只取决于文件内容,重命名、移动、复制都得到相同的结果。在应用里重新保存通常会改变哈希值,即使屏幕上看不出区别。

可信时间戳在诉讼中有效吗?

可能被采信,但没有自动的效力。互联网法院规定第十一条把可信时间戳、哈希值校验列为证明电子数据真实性的技术手段,能够证明真实性的,互联网法院应当确认;其他民事案件则按《最高人民法院关于民事诉讼证据的若干规定》第九十三条、第九十四条,由法院结合个案审查。它只证明数据在某一时刻已经存在,不证明内容真实或制作者是谁。

可信时间戳能证明文件是谁制作的吗?

不能。时间戳只把哈希值和时刻绑在一起,不识别作者,也不排除文件在加盖时间戳前几秒才被制作出来。作者身份需要其他证据,例如电子签名或发送方的记录。

作者 Yang Zheng · 审核 Bill Liu

相关指南

全部指南

决策之前,先检测文档。

检查收到的理赔材料、付款凭证或书面说明,查看文本、文件记录和适用字段中的疑点。先检测一份文档,也可联系我们评估批量审核与系统接入。