如何找到具有公钥的配对 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));

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

解决方法

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