2010-07-22 149 views
1

我正在使用PKCS#1 2.0(OAEP)标准(带附录的签名),但有一些问题我不清楚。RSA PKCS#1兼容签名

  1. 什么是beeing签名的物理对象?我知道它的散列函数值等(我知道这个算法我是做的),但是它是从文件的二进制表单计算出来的,不管内容是什么?

  2. 什么是签署的物理结果?包含签名散列的文件?这个文件应该放在指定的位置吗?这种东西的格式或扩展是什么?

  3. 如果我有几个要签名的文件,是否应该分别为每个文件执行此操作?还是应该将它们连接起来?再次 - 这种操作(文件?)的结果是什么?

+1

请注意,OAEP填充用于加密,但不用于签名。您应该使用旧的(但仍然流行)PKCS#1 v1.5填充或PSS填充。 – Accipitridae 2010-07-26 18:46:39

回答

2

PKCS#1有时被称为“原始RSA”,是一个低级别的加密基元:它不上的文件,且不会产生文件,它可以在原始数据:输入是一个数字小于公钥并且输出是公钥大小的数字(例如,对于RSA-1024,为1024位)。

如果你想有一个签名文件,你可能想使用PKCS#7/CMS format,因为这是既为安装和拆卸签名最常用的签名格式(即使是在PDF文件的签名,通常是PKCS#7封套实际上)。 PS:我对OAEP了解不多,但是从我读到的内容看来,它似乎是一个填充方案(在原始签名之前对数据执行的操作),所以我的参数应该仍然有效。

+0

我补充说,PKCS#7签名是一个比纯粹的PKCS#1签名复杂得多(且更大)的对象,并涉及到使用X.509证书等,因此它可能不是您要查找的内容,具体取决于情况。 OTOH是一种完整的格式,可以提供很多程序支持并可以正确验证,而如果使用裸PKCS#1,则它主要取决于您如何使用它。 – lapo 2010-07-23 15:21:24

+0

你的表述“输入是一个比公钥小的数字”是相当不清楚的。输入是一个几乎是任意长的字节数组,它首先被散列,然后被签名,或者它已经是直接签名的散列摘要。当然,哪一个取决于所使用的加密库的接口。 – Accipitridae 2010-07-24 10:50:11

+2

不是,PKCS#1包含填充以使输入“足够大”,但不包括散列或附加签名与分离签名之间的区别,这是PKCS#7中更高级别管理的功能。 – lapo 2010-07-26 07:46:38