我目前使用pyPkcs11来签署文件。使用pkcs#11 api签名sha256 hash with RSA?
以下调用适用于签署与RSA和SHA256共同文件,
session.sign(privKey, toSign, Mechanism(CKM_SHA256_RSA_PKCS, None)
但我的一些文件已经散列(SHA256),并且签名需要给将由被赋予相同的输出这个OpenSSL的命令:
openssl pkeyutl -sign -pkeyopt digest:sha256 -in <inFilePath> -inkey <keyPath> -out <outFilePath>
我曾尝试下面的调用,不产生签名之前的文件的哈希,
session.sign(privKey, toSign, Mechanism(CKM_RSA_PKCS, None)
但结果不是一个我所料,并且根据该交CKM_RSA_PKCS vs CKM_RSA_X_509 mechanisms in PKCS#11的第一个答案,在另一方面
CKM_RSA_PKCS还执行如在PKCS#1标准中定义的填充。该填充在EMSA-PKCS1-v1_5的步骤3,4和5中定义。这意味着此机制只应接受比模数大小短11个字节的消息。要创建有效的RSASSA-PKCS1-v1_5签名,您需要自行执行EMSA-PKCS1-v1_5的第1步和第2步。
经过一番研究,看来我的文件中包含了RFC 3447描述签名的第一步,因此丢失的部分是第二个,其中产生的ASN.1值。
我可以用pkcs11强制执行此操作吗?
PKCS#11 documentation似乎没有包含任何有关它的信息。
谢谢,我会尽快做到这一点。 对于注意,因为文件和签名机制不是实习生的选择,但决定我的客户,我没有控制他们 –