有没有办法使用PKCS11接口使用ISO-9796方案2创建RSA签名?我知道定义中列出了适当的机制(或者至少我认为是这样): CKM_RSA_9796 0x00000002
但根据ISO Descrption模式2需要参数(即盐和预告片),这似乎与
冲突6.1.11 ISO / IEC 9796 RSA ISO / IEC 9796 RSA机制,表示为CKM_RSA_9796,是单部分签名和 基于RSA的有和没有消息恢复的验证 公钥密码系统和ISO / IEC 9796中定义的块格式 及其附件A.
此机制没有参数。
我尝试使用PKCS11Interop C#类和HSM模拟器创建这样的签名(抛出PKCS11异常)并且没有参数(似乎没有效果)。任何帮助将不胜感激。
修改
代码I使用:
using (Session session = slot[slotIndex].OpenSession(SessionType.ReadOnly))
{
session.Login(CKU.CKU_USER, callback.GetPassword());
List<ObjectAttribute> objectAttributes = new List<ObjectAttribute>();
objectAttributes.Add(new ObjectAttribute(CKA.CKA_CLASS, CKO.CKO_PRIVATE_KEY));
var prm = new Net.Pkcs11Interop.HighLevelAPI.MechanismParams.CkRsaPkcsPssParams(Convert.ToUInt32(CKM.CKM_SHA256), Convert.ToUInt32(CKG.CKG_MGF1_SHA256),Convert.ToUInt32(20));
Mechanism mchanism = new Mechanism(CKM.CKM_RSA_9796,prm);
List<ObjectHandle> foundObjects = session.FindAllObjects(objectAttributes);
if (foundObjects != null && foundObjects.Count > 0)
{
signature = session.SignRecover(mchanism, foundObjects[0], result);
}
else
{
throw new DSException("There was a problem with reading private key from token");
}
session.Logout();
}
我收到的例外:
方法C_SignRecoverInit返回CKR_MECHANISM_PARAM_INVALID
感谢。
答案 0 :(得分:1)
https://crypto.stackexchange.com/questions/24294/how-do-signrecover-and-verifyrecover-work
根本没有在PKCS11中实施ISO / IEC 9796-2方案2 。通过将此过程分解为2个子过程,我能够创建签名。第一个创建MessageRepresentative(如http://www.sarm.am/docs/ISO_IEC_9796-2_2002(E)-Character_PDF_document.pdf中所示)和第二个 - 在PKCS#11实现中使用CKM.CKM_RSA_X_509创建签名(使用MessageRepresentative作为输入)。希望这将有助于将来。
感谢所有评论我问题的人。