有没有一种方式可以数字签名文件以证明它们在某个时间点存在?

27

我想知道是否有一种方法可以对文件(技术上的任何数据),例如合同或照片进行数字签名,以便在10年后可以证明它们是来自这个时间,而不是9年后伪造的。

例如,我可以写下一个未来的预测并用传统方式签名,然后进行时间戳签名,以便当它成为现实时,我可以证明我曾经预测过。

我想到的一种方法是可能会有一个时间戳认证机构。你把数据发送给他们,他们将数据和时间戳进行哈希并使用他们的私钥用RSA加密哈希值。因此生成了一份签名文档:数据,时间戳,加密的哈希值。

10年后,我将数据+假定的时间戳进行哈希,并使用认证机构的公共RSA密钥解密加密的哈希值来检查它是否与其匹配(我信任该密钥)。如果匹配,则我知道时间戳是有效的。

但我发现这种方法存在两个问题:

  • 需要外部认证机构
  • 认证机构的私钥需要保密,因为如果泄露了,所有使用它签名的文件都会变为无效。

你能否想到一种没有这些问题的解决方案?


看看任何已签名的Windows DLL。它们中的大部分都是由供应商签名并由时间戳授权机构进行反签名。这样,当供应商证书过期时,您仍然可以检查该证书在DLL签名时是否有效。 - President James K. Polk
这是一个使用比特币区块链的去中心化匿名时间戳服务:http://proofofexistence.com/ - 免责声明:我创建了该服务。 - Manuel Araoz
11个回答

12
这被称为时间戳。最广泛使用的机制在TSP规范(RFC 3161)和其他一些规范中定义。备选方法在MS Authenticode中使用,但未经记录并且不兼容TSP。
TSP作为辅助功能用于几种加密和数字签名标准,例如PDF、XAdES、CAdES、PAdES(AdES代表“高级加密标准”)。PDF、XAdES和PAdES标准适用于某些类型的数据。CAdES是通用格式(因为它可应用于任何通用数据)。 RFC 5544提供了一种将TSP应用于任何通用数据而不对此数据进行签名的方法。
TSP规范大量使用PKI和X.509证书。
时间戳服务由证书颁发机构作为附加服务提供。也存在独立的时间戳服务。
您可以运行自己的时间戳服务,但时间戳需要使用特殊证书(其密钥使用扩展需要以特定方式设置),因此常规SSL或代码签名证书无法使用。
谈到“时间戳机构”-您向他们发送哈希(在签名期间计算),他们使用他们的证书对此哈希进行签名。保护私钥是他们的业务,并且他们通常会收费。
第三方权威机构的概念是证明时间的准确性。如果您对数据进行签名,可以将任何时间放入签名中,无法检查其是否正确或者您是否伪造了它。只有可信赖的第三方权威机构才能证明时间戳的正确性。

他们使用需要保密的持久私钥的原因是什么?似乎最好每小时(或每分钟)使用一个新的私钥,仅将其保存在易失性内存中,并发布完整的公钥列表,但安全删除私钥。这样,不存储私钥将提供更强的签名时间证明。 - R.. GitHub STOP HELPING ICE
@R.. TSA的证书确实会过期,但问题在于一旦证书过期,时间戳也会变为“过期”。至于销毁私钥和创建新证书——也许有些TSA会这样做,谁知道呢。我不记得标准中有任何声明会阻止这种方法。 - Eugene Mayevski 'Callback
我不是在谈论证书过期的问题。我是在谈论使用一种证书,它不会过期,但私钥从未被存储,并且在使用期限结束后就不存在了。 - R.. GitHub STOP HELPING ICE
@R.. 过期是确保证书(和私钥)不再使用的唯一可靠方法,向外界保证。在您描述的方案中,无法保证私钥的销毁。这只能是密钥持有人的声明,无法证明。 - Eugene Mayevski 'Callback
1
过期并不保证它们不再被使用。例如,如果我拥有私钥的副本,我可以使用它生成一个在时间戳有效的伪造签名。如果您想基于过期密钥忽略/不信任这样的签名,那么您将使时间戳无用。 - R.. GitHub STOP HELPING ICE
显示剩余2条评论

7

3

是的,有商业服务可以安全地为文档或软件进行时间戳。

维基百科上有一篇文章解释了这个问题。谷歌很快就找到了一个这样的服务(我没有关联),我相信还有许多其他服务。以前也有一个免费的服务,但这完全取决于信任(即法院是否会相信“互联网上的某个人”而不是VeriSign)。


3
这里有一个时间戳服务,自1995年以来一直在持续运营。您可以通过电子邮件发送您的数据(或数据哈希),并获得包含数据签名、时间戳和序列号的返回结果。这些独立的签名(但不包括数据本身)将被公开发布,任何人都可以为自己存档,以便如果站点运营者试图篡改时间戳记录,人们就能知道。因此,原则上您不必对服务本身放心。请访问http://www.itconsult.co.uk/stamper/stampinf.htm

1
过去,我会说“查找PublicTimeStamp.org”,但它的历史有点坎坷。它似乎仍在运行,但网站只能勉强工作。如果你访问http://PublicTimeStamp.org/ptb,你会发现最近的值(今天)。但系统的其他部分是不可见的。

1

RFC3161并不是安全时间戳的唯一方式。

当前研究的一个领域是开发方案,使您在对第三方机构发出时间戳时需要更少的信任。使用基于RFC3161的时间戳,您几乎完全需要信任该机构。本演示文稿概述了替代方案,大多数基于链接方案。这个想法非常有吸引力,因为时间戳将受到公众审查,并且没有涉及可能泄露的秘密密钥,因此提供比今天的标准RFC 3161时间戳更好的安全性。


1

请查看easytimestamping.com。基于RFC3161的时间戳由欧盟认证的合格认证机构颁发,因此在大多数欧盟国家,时间戳具有保证的法律有效性。

该机构的私钥需要被严格保密,因为如果泄露,所有使用它签名的文件都将无效。

合格CA已获得认证,至少符合标准ETSI TS 102 023,该标准强制实施各种物理和软件安全措施,以确保私钥的保护。

附注:我与easytimestamping.com有关联


我并不是说你的网站有问题,但是在你的网站和securo.it上都很难找到你使用的“欧盟认可的合格认证机构”是哪一个。为什么呢? - Bart van Heukelom
我们并不是因为这没关系才这么说的。至少在意大利,只要CA在认可CA的受信任列表中,发行的时间戳就具有相同的法律效力。为了促进互操作性,其他欧盟国家应该也是如此,正如数字签名指令(1999/93/EC)所要求的那样。无论如何,我们没有隐瞒任何东西,只需应用时间戳并找到它! - mrucci
好的,如果你有疑问,其他人也会有。所以我在这里添加了我们当前合格的CA提供商的名称(http://easytimestamping.com/en/#features)。感谢您的反馈 :) - mrucci

0

我想这取决于你的控制。外部机构可以起到作用,但从技术上讲,这与内部认证是一样的。这只是取决于你信任谁。你是想防止用户虚假认证文件,还是你的开发人员?


我只是好奇,没有实际的用例。 - Bart van Heukelom

0

早些年,人们会保留通过认证邮件发送的未打开文件,并称之为“穷人版版权”。我想你可以在任何主要的、受人尊敬的电子邮件网站上做同样的事情。通过Gmail或Hotmail或其他方式向自己发送文件副本,并将其保存在您的帐户中——电子邮件上的日期/时间戳应该来自服务提供商(而不是您的计算机),因此这将是相当可靠的证据。


“将邮件发送给自己”的技巧让我想到了这个问题 :)” - Bart van Heukelom
我想到一个问题,如果你试图通过预测赢得JREF百万美元挑战赛,他们可能会指出你可以做出一百万个预测,只向他们展示那些正确的预测。不确定是否有任何解决方法。 - Andrew Furdell
-1 这种方法以前行不通,而你的电子邮件方法今天也行不通(除非你愿意让别人登录你的电子邮件)。两者都很容易被伪造。 - Quora Feans
@QuoraFeans 我不能代表实体邮件,但电子邮件应该带有DKIM和SPF头,显示其真实性。您可以稍后向人们发送电子邮件的原始副本,包括身份验证标头,而不让他们访问您的电子邮件帐户。 - Brian Drake

0

可以使用符合RFC 3161的时间戳服务,它是一个标准,必须提供足够的证据表明特定文档在某个时间存在。更好的想法是将文档更改为PDF格式,然后进行数字签名和时间戳,在PDF中,任何人都可以清楚地看到签名或时间戳的时间戳和其他属性。请查看tecxoft tsa,您还可以在此处测试PDF数字签名。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接