我目前正在使用pyPkcs11来签署文件。
以下调用适用于使用RSA和sha256签署普通文件:
我尝试了以下调用,但在签名之前没有生成文件的哈希值。
但结果并不是我所期望的,根据这篇帖子的第一个答案 《PKCS#11中的CKM_RSA_PKCS与CKM_RSA_X_509机制》,
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)
但结果并不是我所期望的,根据这篇帖子的第一个答案 《PKCS#11中的CKM_RSA_PKCS与CKM_RSA_X_509机制》,
经过一些研究,我的文件似乎包含了由RFC 3447描述的签名的第一步,因此缺少的部分是第二步,即生成ASN.1值。 我可以强制使用pkcs11进行此操作吗?如何操作? 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步。