我对如何为PAdES签名内的时间戳创建VRI条目有疑问。
让我们假设有一个pdf文档有一个签名,这个签名有一个嵌入的时间戳。
的例子:
Sig
[...]
Contents <1234567890ABCDEF[...]>
[...]
Type DSS
VRI <<
Hash1 object1
Hash2 object2
>>
[...]
Hash1很容易计算:它是整个签名哈希,包括时间戳(1234567890ABCDEF[…])
但Hash2…我应该用什么来计算呢?在ETSI文档中,它是这样写的(PAdES LTV配置文件-第4部分- V1.1.2页12):
对于时间戳的签名,它是时间戳本身的字节数,因为时间戳令牌是一个签名的数据对象
但我必须说这没有多大帮助。它是timeStampToken吗?只有内容?什么是"时间戳本身"?
谁知道有什么文件能澄清这一点?参考实现
您引用的定义
对于时间戳的签名,它是时间戳本身的字节数,因为时间戳令牌是一个签名的数据对象
来自ETSI TS,它首先定义了页面的LTV结构。
此TS同时已被ETSI EN 319 142-1取代,其中定义被重新表述为:
因此,对于文档时间戳,只需像处理常规签名一样处理即可。对于文档签名或文档时间戳签名,散列的字节应为关联签名字典中包含关键字Contents的表项的完整十六进制字符串包含签名的der编码的二进制数据对象(例如pkcs# 7, CMS或CAdES对象)。
顺便说一下,同样的规范指定:
不应该使用VRI字典。是否包含VRI字典条目是可选的。所有验证在VRI表项中引用的材料也在DSS表项中引用
所以您可能根本不需要这些条目。
我刚意识到你以为
有一个带有签名的pdf文档,这个签名有一个嵌入的时间戳。
内嵌时间戳显然不受上面引号的约束。但实际上,时间戳令牌是一个包裹着SignedData
对象的ContentInfo
对象,就像一个常规的CMS签名容器一样。因此,时间戳令牌是要散列的对象。