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 ECCX509Certificate2
está emCngKey
para 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 -genkey
openssl req -new -key private.pem -x509 -nodes -days 365 -out public.cer
openssl 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.