【问题标题】:RSA with ISO/IEC 9796-2 scheme 2 in PKCS11PKCS11 中具有 ISO/IEC 9796-2 方案 2 的 RSA
【发布时间】: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 articleCKM_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


【解决方案1】:

是的,所以我终于想通了,或者至少我是这么认为的。事实证明,CKM_RSA_9796 机制实现了旧的、不是很安全的 RSA_9796 签名机制,它要求消息的长度

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 作为输入)。希望这对将来的人有所帮助。

感谢所有评论我的问题的人。

【讨论】:

  • 嘿,很抱歉挖掘了这个线程,但是您是否有任何链接指向您使用 PKCS11 创建签名时所做的操作?
  • 嗨,实际上我正在使用 pkcs11Interop (pkcs11interop.net) 创建签名。
  • 谢谢!从那以后我找到了一个解决方案,但这仍然会有所帮助;)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多