如果我有证书,我们如何将PKCS#1转换为PKCS#7?

Saj*_*mma 1 pdf rsa digital-signature pkcs#7

我正在开发一个PDF签名工具.为此,我将获得PKCS#1格式的PDF签名sha256数据和设备的证书,我需要使用这两个数据嵌入PDF中.大多数PDF阅读器仅支持PKCS#7签名.

有没有办法将PKCS#1签名转换为PKCS#7签名(使用证书文件)?

我知道PKCS#7 =证书+可选原始数据+ PKCS#1格式的签名

mkl*_*mkl 6

你的问题有点过分简化了这种情况.

关于PKCS#7 < - > PKCS#1:

是的,PKCS#7签名容器包含SignerInfo对象,它们分别基本上包含PKCS#1样式签名和一些属性.但是这个PKCS#1样式签名通常不仅仅是签署文档数据,而是签署所谓的"签名属性"的结构.其中一个是文档哈希,其他可以是签名时间,签名者证书的链接和其他信息; 许多用例都需要这些额外的信息.只有最原始构建的SignerInfo结构才能直接签署文档数据.

因此,一般情况下,如果您只是获取某些数据的PKCS#1签名并将其包装在PKCS#7容器中,则不会接受该签名容器.

有关详细信息,请参阅RFC 3852.

关于集成的PDF签名:

您对实施的描述有些模糊.您似乎认为要签名的文档哈希是原始PDF的哈希值.如果是集成的PDF签名,这是错误的:为了创建集成的PDF签名,首先要通过一些数据扩展PDF,这些数据包含PKCS#7签名容器(由规范推荐)或PKCS#1签名的占位符集成.然后,除了占位符之外,您需要散列此扩展PDF.(根据当前的PDF规范,您可以使用小于此值的哈希值,但当前的Adobe Acrobat/Reader不会接受这一点,并且任何认真的验证者都不应该接受这一点.

有关详细信息,请参阅Adobe发布的ISO 32000-1:2008

根据法律要求,您可能还必须考虑ETSI规定的PDF高级电子签名(PAdES),参见 符合欧盟标准的电子签名的ETSI标准.这些将成为ISO 32000-2的一部分,即PDF 2.0.

那么,您是否仍然确定您的用例允许您考虑的那些非常简单的PKCS#7签名,并且是为正确的文档创建的PKCS#1源签名?在这种情况下,通过查看RFC 3852可以轻松地构建这些容器.

无论如何,你应该看看Bruno Lowagie(iText软件)的PDF白皮书数字签名.