2016-09-28 2 views
1

Je suis en train d'implémenter des clés et des certificats ECDSA dans .NET, et j'ai besoin de stocker les clés pour pouvoir les réutiliser avec une nouvelle signature. Avec RSA j'utilisais la classe RSACryptoServiceProvider, mais je ne vois rien de similaire avec ECDsa ni les classes ECDsaCng.Clés ECDSA stockant

J'ai seulement vu DSACryptoServiceProvider et un ancien ECDsaCryptoServiceProvider à Framework 4.3 (un peu vieux).

Est-ce que quelqu'un connaît un moyen de stocker les clés ECDSA comme dans RSA, s'il vous plaît?

Répondre

1

En supposant que vous voulez dire que vous voulez persister une clé dans la clé de stockage OS (RSACryptoServiceProvider en utilisant une clé nommée), avec CNG l'interface est un peu différent:

private static ECDsa CreateOrOpenECDsaKey(string keyName) 
{ 
    CngKey key; 

    if (CngKey.Exists(keyName)) 
    { 
     key = CngKey.Open(keyName); 
    } 
    else 
    { 
     // You can also specify options here, like if it should be exportable, in a 
     // different overload. 
     key = CngKey.Create(CngAlgorithm.ECDsaP521, keyName); 
    } 

    // The ECDsaCng constructor will duplicate the key reference, so we can close this one. 
    using (key) 
    { 
     return new ECDsaCng(key); 
    } 
} 

Si vous vouliez dire que vous voulez export/import comme RSAParameters, cette fonctionnalité est présente dans .NET Core, mais n'est pas encore présente dans .NET Framework.

+0

Merci pour la réponse, c'est vraiment utile. J'ai essayé mais au retour en tant que valeur ECDsaCng je reçois une exception: "Les clés utilisées avec l'algorithme ECDsaCng doivent avoir un groupe d'algorithme de ECDsa. \ R \ nParameter name: key". Ma clé a été générée avec la bibliothèque BouncyCastle et il semble qu'elle soit créée comme ECDH au lieu de ECDSA. Je dois découvrir de ce côté. – santiPipes

+0

@santiPipes C'est corrigé .NET Framework 4.6.2 (http://referencesource.microsoft.com/#System.Core/System/Security/Cryptography/ECDsaCng.cs,bab9826847a21b79) – bartonjs

+0

Je vois, merci beaucoup @bartonjs. Cela signifie que je dois installer un nouveau framework dans tous les ordinateurs sur lesquels ce logiciel va être exécuté, n'est-ce pas? Je suppose que ceci n'est pas résolu seulement en compilant avec Framework 4.6.2 (je sais, question idiote) – santiPipes