【发布时间】:2018-04-28 11:25:01
【问题描述】:
有没有办法使用 PKCS11 接口创建具有 ISO-9796 方案 2 的 RSA 签名?我知道定义中列出了适当的机制(或者至少我认为是这样): CKM_RSA_9796 0x00000002
但是根据ISO Descrption schema 2需要参数(即salt和trailer),这似乎与
6.1.11 ISO/IEC 9796 RSA ISO/IEC 9796 RSA 机制,表示为 CKM_RSA_9796,是一种用于单部分签名和 基于 RSA 的有和没有消息恢复的验证 公钥密码系统和 ISO/IEC 9796 中定义的块格式 及其附件A。
此机制没有参数。
我尝试使用 PKCS11Interop C# 类和 HSM 模拟器创建带有(抛出 PKCS11 异常)和不带参数(似乎无效)的此类签名。任何帮助将不胜感激。
编辑
我正在使用的代码:
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
谢谢。
【问题讨论】:
-
请发布例外情况。
-
嗨,为了更清楚,我将编辑我的帖子,但有例外和部分代码。
-
规范说机制没有参数。您的代码为机制提供参数。通过返回
CKR_MECHANISM_PARAM_INVALID你的 PKCS#11 库告诉你不应该提供参数。不带参数重试。 -
是什么让你认为
CKM_RSA_9796机制代表“数字签名方案2”而不是无参数的“数字签名方案1”? -
好吧 Cryptosense article 说
CKM_RSA_9796 just pads whatever input it is given front and rear by the ISO-9796 padding blocks, so potentially one could use any of the encoding schemes.但是我不确定如何正确准备这 3 个方案中的任何一个的输入数据。
标签: encryption cryptography rsa digital-signature pkcs#11