16

およびで使用するために、ECC ベースX509Certificate2のから に公開/秘密鍵を取得するにはどうすればよいですか?CngKeyECDsaCngECDiffieHellmanCng

現在、署名/暗号化に RSA 2048 ビット キー ペアを使用しています。X509Storeこれを行うには、エクスポート不可としてマークされた秘密鍵を使用して、証明書が安全に保存されている場所から証明書を取得します。現在の実装を ECDSA と ECDH を使用するように変換して、同等のセキュリティのためにより小さいキー サイズを使用できるようにしたいと考えています。

openssl を使用して ECC 証明書を正常に生成しました。

  1. openssl ecparam -out private.pem -name prime256v1 -genkey
  2. openssl req -new -key private.pem -x509 -nodes -days 365 -out public.cer
  3. openssl pkcs12 -export -in public.cer -inkey private.pem -out export.pfx

上記で生成された証明書を証明書ストアに正常にインストールしました。拇印でそれらを取得できますが、秘密鍵と公開鍵の暗号化プロバイダーは「アルゴリズムがサポートされていません」という例外をスローします。代わりに、使用ECDsaCngECDiffieHellmanCngて署名/暗号化することになっていることを理解しています。しかし、これらは を扱いCngKeyます。

秘密鍵をエクスポート可能にする必要があるため、Bouncy Castle はオプションではありません。

CLR SecurityCngKeyはペアを返しますGetCngPrivateKeyが、CLRSecurity によって返されるキーは ECDH キーであるため、ECDsa では使用できません。X509Certificate2さらに、CLR セキュリティでは、署名の検証のために公開キーだけを取得する方法がありません (署名者の秘密キーを持っていないか、必要としない場合)。

何か案は?私は機知に富んでいます...どんな助けでも歓迎です。

4

1 に答える 1