首页 > 解决方案 > 如何找到具有公钥的配对 ECDSA 私钥 PKCS11

问题描述

我有一个应用程序可以与上面有 RSA 证书的智能卡一起使用由于某种原因,制造商没有在它们上填写 CKA_LABEL,所以我为 RSA 设置了私钥对象,如下所示:

RsaKeyParameters rsaPubKeyParams = (RsaKeyParameters)pubKeyParams;
                    privKeySearchTemplate.Add(session.Factories.ObjectAttributeFactory.Create(CKA.CKA_KEY_TYPE, CKK.CKK_RSA));
                    privKeySearchTemplate.Add(session.Factories.ObjectAttributeFactory.Create(CKA.CKA_MODULUS, rsaPubKeyParams.Modulus.ToByteArrayUnsigned()));
                    privKeySearchTemplate.Add(session.Factories.ObjectAttributeFactory.Create(CKA.CKA_PUBLIC_EXPONENT, rsaPubKeyParams.Exponent.ToByteArrayUnsigned()));

现在我必须支持具有 ECDSA 证书的智能卡,也没有 CKA_LABEL 所以问题是我如何找到像 RSA 这样的私钥?

注意:所有智能卡都有 2 个随机顺序的证书(身份验证、签名),所以我不能只取第一个或最后一个找到的对象:

ECPublicKeyParameters ecdsaPubKeyParams = (ECPublicKeyParameters)pubKeyParams;
                    privKeySearchTemplate.Add(session.Factories.ObjectAttributeFactory.Create(CKA.CKA_KEY_TYPE, CKK.CKK_ECDSA));

-----需要更多参数来识别所需的私钥

标签: c#rsabouncycastleecdsapkcs11interop

解决方案


如果是同一条曲线,则不能。一种解决方法是测试签名/验证,然后如果匹配,则分配 CLA_LABEL 以进行下次优化。


推荐阅读