【问题标题】:Export EC private key from BouncyCastle and import into CngKey or ECDsaCng?从 BouncyCastle 导出 EC 私钥并导入 CngKey 或 ECDsaCng?
【发布时间】:2012-03-13 22:07:25
【问题描述】:

我使用 BouncyCastle 为椭圆曲线 DSA 签名创建了密钥对,并设法使用符合 RFC4050 的 XMLString 将公钥导入 ECDsaCng。现在我也想移动私钥并且没有设法找到解决方案。我得到的最接近的是使用 CngKey.Import。

CngKey.Import 支持 PKCS#8 格式,因此如果您可以将密钥转换为有效的 pkcs8,那么它应该可以工作。不幸的是,下面的代码并不能很好地工作。

var privatekey = (ECPrivateKeyParameters) keyPair.Private;

var pkinfo = PrivateKeyInfoFactory.CreatePrivateKeyInfo(privatekey);

byte[] pkcs8Blob = pkinfo.GetDerEncoded(); 

var importedKey = CngKey.Import(pkcs8Blob, CngKeyBlobFormat.Pkcs8PrivateBlob);

这会引发异常:

System.Security.Cryptography.CryptographicException: ASN1 bad tag value met.

据我所知,GetDerEncoded 应该返回一个有效的 Pkcs8 blob。

如何在 ECDsaCng 对象中使用通过 BouncyCastle 创建的私钥?

【问题讨论】:

    标签: .net cryptography bouncycastle elliptic-curve


    【解决方案1】:

    在费尽心思、阅读 RFC 并研究 BouncyCastle 和 CngKey.Export 生成的字节数组之后,我找到了答案。

    问题在于 BouncyCastle 如何将 EC 密钥编码为 DER/Pkcs8 格式。与此特定问题相关的两个 RFC 是 RFC5915(不是标准,而是共识文件)和 RFC5480。他们声明必须使用 RFC5480 中引用的命名曲线来指定曲线参数。当您使用错误的生成器参数创建 AsymmetricCipherKeyPair 时,PKCS8/DER 导出的 BouncyCastle 实现将导出不符合这两个规范的整个曲线规范(隐式曲线)。您必须使用指定命名曲线的 ECKeyGenerationParameters。

    在 BouncyCastle 中创建可互操作的键时,必须使用以下内容(据我所知):

    string namedCurve = "prime256v1";
    ECKeyPairGenerator pGen = new ECKeyPairGenerator();
    ECKeyGenerationParameters genParam = new ECKeyGenerationParameters(
      X962NamedCurves.GetOid(namedCurve)   
      new SecureRandom());
    pGen.Init(genParam);
    
    AsymmetricCipherKeyPair keyPair = pGen.GenerateKeyPair();
    

    可以通过使用 Der 编码字节导入密钥来创建 CngKey:

    var bcKeyInfo = PrivateKeyInfoFactory.CreatePrivateKeyInfo(keyPair.Private);
    var pkcs8Blob = bcKeyInfo.GetDerEncoded();
    var importedKey = CngKey.Import(pkcs8Blob, CngKeyBlobFormat.Pkcs8PrivateBlob);
    

    【讨论】:

      猜你喜欢
      • 2017-12-15
      • 1970-01-01
      • 1970-01-01
      • 2014-08-06
      • 2019-06-24
      • 2016-02-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多