Mag*_*gda 4 pdf cryptoapi digital-signature trusted-timestamp
美好的一天,
我正在尝试将时间戳信息嵌入到pdf签名中,以便adobe会向我报告签名是时间戳.目前,我所获得的只是Adobe报告"签名包含嵌入式时间戳,但无法验证",当您查看日期/时间属性时,它表示"时间戳授权"不可用和"显示证书"是灰色的.
显然,我在构建PKCS#7消息时做错了.但我现在不知道.有人可以通过描述我需要采取的步骤来帮助我,以便我的签名有时间戳吗?或者建议一个可以帮我找到问题的工具?
我正在使用Crypto API.我目前遵循的步骤如下:
如何检查数据是否正确,以便adobe可以告诉我签名已被加上时间戳?
此致,玛格达
简而言之:您有时间标记错误的数据,请参阅答案的底部.
您的签名与Adobe签名之间的主要区别:
Adobe的签名包含签名的撤销信息属性; 此属性不包含任何实际的吊销信息.
由于此属性是可选的,因此在此处不应该相关.
您的签名包含签名的签名时间属性.
由于您还嵌入了时间戳,因此不需要签名时间,但也不禁止签名.
您的签名的signatureAlgorithm值为1.2.840.113549.1.1.1,即RSA加密,而Adobe为1.2.840.113549.1.1.11,即sha256WithRSAEncryption
Adobe的选择肯定是更好的选择,但Adobe Reader似乎忽略了签名中的缺陷:毕竟,它说文档自签名以来没有被更改过.
在您的签名中,时间戳标记PDF文档的哈希值,即与签名的签名messageDigest属性中的相同,而在Adobe签名中,时间戳标记不同的时间戳.
砰.这就是问题.诚然,你在原来的问题中说过,但它没有引起我的注意:
使用CryptHashMessage函数(SHA256)创建pdf数据的摘要.
使用CryptRetrieveTimeStamp函数将此摘要发送到TSA.我已设置*TIMESTAMP_DONT_HASH_DATA*标志,以便不再对哈希值进行哈希处理.
这是错的!根据规范,时间戳被添加为无符号属性:
时间戳信息作为无符号属性(PDF 1.6):时间戳令牌应符合RFC 3161,并应计算并嵌入到PKCS#7对象中,如RFC 3161的附录A中所述.
(ISO 32000-1的第12.8.3.3.1节)
RFC 3161规定:
TimeStampToken中messageImprint字段的值应为SignerInfo中签名字段值的哈希值,以便对带有时间戳的signedData进行处理.
(RFC 3161的附录A )
因此,你有时间标记错误的哈希!Adobe正确地希望您为签名添加时间戳.因此,您应首先创建常规签名,然后查找其签名值,哈希值和时间戳值,然后将该时间戳添加到签名容器签名者信息中作为无符号时间戳属性.
不幸的是,我不知道Windows Crypto API是否足以解释如何做到这一点; 我在Java加密api中更像是在家里.
归档时间: |
|
查看次数: |
5454 次 |
最近记录: |