我想知道使用带有时间戳的数字签名的实时应用程序。我特别想知道我们可以信任现在已过期的旧签名文档的应用程序。
带时间戳的长期数字签名的实时应用有哪些
数字签名“过期”是因为使用私钥执行签名并根据相应的公钥进行验证。公钥通过证书链接到一个身份(例如,法律定义的个人)。证书的常用标准 ( X.509 ) 指定证书过期。超过有效期,证书不再使用;因此,文档上的数字签名会过期:超过某个日期,它就不再可验证。由于用户证书通常在两三年后到期,这对于“现实”签名(例如商业合同)来说是一个问题。
为什么数字证书会过期?有几个答案。科学的答案是,证书“保证”了其指定所有者对私钥的排他控制权,任何认证机构都不想在没有时间限制的情况下做出这样的保证;此外,随着时间的推移,技术进步可能会使给定的密钥变得更弱,从而保证一定的使用寿命。愤世嫉俗的答案是由于彼得古特曼:
也许 Validity 可以简单地重命名为 RenewalFeeDueDate 以反映其实际使用情况。
无论哪种方式,签名都会过期。我们如何解决这个问题?用另一个签名!即,时间戳。时间戳是给定“文档”(位序列)在过去某个日期存在的证明;在内部,它是在一个结构上计算的签名,该结构包含发布时间戳的日期,以及时间戳文档的哈希值。时间戳管理局负责维护准确的时钟,并且绝不会签署错误日期的结构。
想法如下:在某个时间T,我们获取初始文档、签名和所有涉及的额外对象(所有证书、CRL 和其他元素),这些对象用于在时间T验证签名。我们假设在日期T,证书尚未过期。然后我们把所有的东西放在一个大袋子里(想象它是一个 Zip 档案),我们从一个足够的 TSA 那里获得一个时间戳。在稍后的日期T',我们可以验证时间戳是否有效,因此我们可以确保整个包及其内容在时间T已经存在:因此,我们可以想象自己投影回时间T,并且我们可以像当前日期为T一样验证签名——即使与此同时,一些证书已过期(即在日期T',没有时间戳,我们将无法再验证签名)。
由于时间戳本身就是一个签名(确实,看看RFC 3161 :时间戳是CMS签名的一个特例),它也可能会过期。所以我们必须递归:在日期T'',当时间戳仍然可以验证时,将时间戳和验证它所需的任何证书放入一个新包中,并为该包发布一个额外的时间戳。等等。这就像像埃菲尔铁塔这样的旧裸金属建筑:只要您注意定期用新油漆覆盖它们,它们就可以永远存在。
细节是神秘而复杂的。相关标准见:
- 证据记录语法:用于编码连续时间戳序列的格式。还包括从哈希函数的密码分析中断中恢复的规定,并使用带有哈希树的智能时间戳共享机制。
- CAdES:CMS 的扩展,用于嵌入时间戳的签名和时间戳层的规定。
- XAdES:类似于 CAdES,但用 XML 代替了 ASN.1(但证书仍然基于 ASN.1,所以 XAdES 就像Chimera ——唉,没有相应的Bellerophon可以杀死它)。
- PAdES:像 CAdES 一样,用于 PDF 文件(签名、证书、时间戳...插入PDF文件本身;这是 Adobe Reader 支持的)。
总结:时间戳是一种时间旅行装置,但旅行者只是一个用于签名的虚拟验证者。
在 Adobe 的 acrobat 中易于使用、直观且对企业和法院友好的数字证书和数字签名时间戳实施。您可以使用任何数字证书,并且可以轻松地将其配置为使用 RFC 3161 时间戳颁发机构。数字签名和时间戳存储在元数据中,并且在创建签名和盖章的签名后内置了版本或编辑功能。
我从以前的研究中知道,很难找到具有安全时间戳的数字签名领域的信息,所以这里有一些入门链接:
- http://learn.adobe.com/wiki/display/security/Digital+Signatures+101#DigitalSignatures101-Timestamping
- http://usefullinksandinfo.blogspot.com/2011/06/timestamp-server-for-adobe-acrobat.html
- http://opentsa.org/
- http://www.digistamp.com/support/frequently-asked-questions/adobe-acrobat
- http://www.globaltrustfinder.com/TSADefault.aspx
- http://timestampclient.sourceforge.net/