Sécurité assurée par CspProvider

Signaler
Messages postés
91
Date d'inscription
dimanche 16 avril 2006
Statut
Membre
Dernière intervention
17 avril 2008
-
Messages postés
91
Date d'inscription
dimanche 16 avril 2006
Statut
Membre
Dernière intervention
17 avril 2008
-
Bonjour,

Je développe présentement une application possédant des données sensibles cryptées via AES, et elle fonctionne bien.

Notre client nous a informés qu'il voudrait avoir une case "Se rappeler du mot de passe" dans le formulaire de connexion qui apparaît présentement à chaque démarrage du programme. Il faut donc que je crypte un mot de passe, en puissant le décrypter, de manière sécuritaire.

D'après ce que j'ai vu sur MSDN, ils recommandent d'utiliser l'algorithme RSA avec un conteneur de clé. Mais ils ne spécifient rien sur la sécurité du conteneur de clé et sur son accès.

J'ai le code suivant pour enregistrer et récupérer une clé (notez que la classe HexEncoding ne fait que convertir un byte[] en la chaîne en hexadécimal le représentant (cette chaîne est ensuite enregistrée dans les settings de l'application)). Il semble fonctionner (les tests unitaires passent).
///

<summary>

/// Transforme une cl‚ en le cryptant via RSA.

///</summary>

///La cl‚ … prot‚ger

///<returns>Le Hex-string repr‚sentant les donn‚es crypt‚es.</returns>

public
static
string TransformKey(
string key){

CspParameters csp =
new
CspParameters();csp.KeyContainerName =

"MyContainer2003";

byte[] bytes =
Encoding.UTF8.GetBytes(key);

MemoryStream source =
new
MemoryStream(bytes);

RSACryptoServiceProvider rcsp =
new
RSACryptoServiceProvider(csp);

string hexstring =
HexEncoding.ToString(rcsp.Encrypt(bytes,
false));

return hexstring;}

///<summary>

/// D‚crypte le contenu crypt‚ en RSA sous le format HEX-string en la cl‚ de base.

///</summary>

///Le HEX-string contenant les donn‚es crypt‚es.

///<returns>La cl‚ une fois d‚crypt‚e.</returns>

public
static
string GetKeyBack(
string hexstring){

CspParameters csp =
new
CspParameters();csp.KeyContainerName =

"MyContainer2003";

RSACryptoServiceProvider rcsp =
new
RSACryptoServiceProvider(csp);

byte[] bytes = rcsp.Decrypt(
HexEncoding.GetBytes(hexstring),
false);

return
Encoding.UTF8.GetString(bytes);}

Notez que le nom du containeur a été modifié.

J'aimerais savoir qui peut avoir accès au conteneur de clé. Est-ce seulement mon application ou toute application connaissant son nom?

Si cela a une influence, mon programme .NET est signé.

<hr width="100%" size="2" />
«L'erreur est humaine mais un véritable désastre nécessite un ordinateur.»
«Selon les derniers chiffres, 43 % des statistiques sont fausses»

2 réponses

Messages postés
4936
Date d'inscription
lundi 17 février 2003
Statut
Modérateur
Dernière intervention
14 février 2014
37
si ton assembly (dll ou exe) n'est pas obfuscé (brouillé) toute personne peut lire ton code source et donc lire ton container.

Sébastien FERRAND (blog)
Consultant Sénior
[Microsoft Visual C# MVP]
Messages postés
91
Date d'inscription
dimanche 16 avril 2006
Statut
Membre
Dernière intervention
17 avril 2008
1
Cela veut donc dire que le nom du conteneur de clé est important car tout le monde peut avoir accès à la clé?

Quant à l'obfuscation, je vais utiliser dotfuscator, mais cela va protégé mon application en cryptant le nom de mon container?

Merci d'avance.

P.S si quelqu'un a de la documentation sur les conteneurs de clé ou sur une méthode plus sécuritaire je suis preneur . MSDN semble très vague et donne peu d'informations à ce sujet.

<hr width="100%" size="2" />
«L'erreur est humaine mais un véritable désastre nécessite un ordinateur.»
«Selon les derniers chiffres, 43 % des statistiques sont fausses»