Comment enregistrer en toute sécurité nom d’utilisateur / mot de passe (local)?

Je crée une application Windows, dans laquelle vous devez vous connecter en premier.
Les détails du compte sont composés d’un nom d’utilisateur et d’un mot de passe et doivent être enregistrés localement.
C’est juste une question de sécurité, donc les autres utilisateurs du même ordinateur ne peuvent pas voir les données personnelles de chacun.
Quel est le moyen le meilleur / le plus sécurisé pour enregistrer ces données?

Je ne veux pas utiliser une firebase database, alors j’ai essayé certaines choses avec les fichiers de ressources.
Mais comme je suis un peu nouveau avec ça, je ne suis pas tout à fait sûr de ce que je fais et où je devrais chercher une solution.

Si vous ne faites que vérifier / valider le nom d’utilisateur et le mot de passe saisis , utilisez la classe Rfc2898DerivedBytes (également appelée fonction de dérivation de clé basée sur un mot de passe 2 ou PBKDF2). Ceci est plus sûr que l’utilisation du cryptage comme Triple DES ou AES car il n’y a pas de moyen pratique de passer du résultat de RFC2898DerivedBytes au mot de passe. Vous ne pouvez passer que d’un mot de passe au résultat. Voir Est-il correct d’utiliser le hachage SHA1 du mot de passe en tant que sel lors de la dérivation de la clé de chiffrement et IV de la chaîne de mot de passe? pour un exemple et une discussion pour .Net ou Ssortingng, crypter / décrypter avec le mot de passe c # Metro Style pour WinRT / Metro.

Si vous stockez le mot de passe pour le réutiliser, par exemple en le fournissant à un tiers, utilisez l’ API DPAPI (Windows Data Protection API) . Cela utilise les clés générées et protégées par le système d’exploitation et l’algorithme de cryptage Triple DES pour crypter et décrypter les informations. Cela signifie que votre application n’a pas à se soucier de générer et de protéger les clés de chiffrement, une préoccupation majeure lors de l’utilisation de la cryptographie.

En C #, utilisez la classe System.Security.Cryptography.ProtectedData . Par exemple, pour chiffrer une donnée, utilisez ProtectedData.Protect() :

 // Data to protect. Convert a ssortingng to a byte[] using Encoding.UTF8.GetBytes(). byte[] plaintext; // Generate additional entropy (will be used as the Initialization vector) byte[] entropy = new byte[20]; using(RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider()) { rng.GetBytes(entropy); } byte[] ciphertext = ProtectedData.Protect(plaintext, entropy, DataProtectionScope.CurrentUser); 

Stockez l’entropie et le texte chiffré de manière sécurisée, par exemple dans un fichier ou une clé de registre avec des permissions définies, afin que seul l’utilisateur actuel puisse le lire. Pour accéder aux données d’origine, utilisez ProtectedData.Unprotect() :

 byte[] plaintext= ProtectedData.Unprotect(ciphertext, entropy, DataProtectionScope.CurrentUser); 

Notez qu’il existe des considérations de sécurité supplémentaires. Par exemple, évitez de stocker des secrets tels que des mots de passe sous forme de ssortingng . Les chaînes sont immuables, étant donné qu’elles ne peuvent pas être notifiées en mémoire, une personne qui consulte la mémoire de l’application ou une image mémoire peut voir le mot de passe. Utilisez plutôt SecureSsortingng ou un octet [] et n’oubliez pas de les éliminer ou de les mettre à zéro dès que le mot de passe n’est plus nécessaire.

Je l’ai déjà utilisé auparavant et je pense que pour garantir que les informations d’identification persistent et de la manière la plus sûre possible,

  1. vous pouvez les écrire dans le fichier de configuration de l’application en utilisant la classe ConfigurationManager
  2. sécuriser le mot de passe en utilisant la classe SecureSsortingng
  3. puis le chiffrant à l’aide des outils de l’espace de noms Cryptography .

J’espère que ce lien sera d’une grande aide: Cliquez ici

DPAPI est juste pour cela. Utilisez DPAPI pour chiffrer le mot de passe lors de la première saisie de l’utilisateur, stockez-le dans un emplacement sécurisé (le registre de l’utilisateur, le répertoire de données de l’application de l’utilisateur sont des choix). Chaque fois que l’application est lancée, vérifiez l’emplacement pour voir si votre clé existe, si elle utilise DPAPI pour la décrypter et autoriser l’access, sinon refusez-la.

Cela ne fonctionne que sous Windows, donc si vous prévoyez d’utiliser la plateforme multi-plateforme, vous devrez chercher ailleurs. Voir https://github.com/dotnet/corefx/blob/master/Documentation/architecture/cross-platform-cryptography.md