Importando certificado baseado em ECC do Windows Certificate Store para o CngKey

Como posso obter as chaves públicas / privadas de um sistema baseado em ECCX509Certificate2está emCngKeypara uso comECDsaCng eECDiffieHellmanCng?

Atualmente, estou usando pares de chaves RSA de 2048 bits para assinar / criptografar coisas. Estou fazendo isso puxando os certificados doX509Store onde eles são armazenados com segurança com chaves privadas marcadas como não exportáveis. Gostaria de converter a implementação atual para usar ECDSA e ECDH, para que eu possa usar tamanhos de chave menores para segurança equivalente.

Eu consegui gerar ECC certs usando openssl:

openssl ecparam -out private.pem -name prime256v1 -genkeyopenssl req -new -key private.pem -x509 -nodes -days 365 -out public.ceropenssl pkcs12 -export -in public.cer -inkey private.pem -out export.pfx

Instalei com êxito os certificados gerados acima na loja de certificados. Posso recuperá-los por impressão digital, mas os provedores de criptografia para as chaves pública e privada lançam exceções "Algoritmo não suportado". Em vez disso, entendo que devo usarECDsaCng eECDiffieHellmanCng para assinar / criptografar. Mas esses acordos emCngKey's.

O Bouncy Castle não é uma opção, pois exige que as chaves privadas sejam exportáveis.

Segurança CLR vai me devolver umCngKey parear viaGetCngPrivateKey mas não pode ser usado com ECDsa porque a chave retornada por CLRSecurity é uma chave ECDH. Além disso, o CLR Security não me fornece uma maneira de obter apenas a chave pública de umX509Certificate2 para verificação da assinatura (onde eu nem tenho ou preciso da chave privada do assinante).

Alguma ideia? Estou no meu juízo final ... Qualquer ajuda seriaMuito de estimado.

questionAnswers(1)

yourAnswerToTheQuestion