Comment afficher en toute sécurité un mot de passe généré de manière aléatoire dans WPF


octet de souris

Par "en toute sécurité", je veux dire de telle manière que GC ne le déplace pas en mémoire, que la copie soit réduite au minimum et qu'elle soit supprimée de la mémoire dès qu'elle n'est plus nécessaire.

J'ai le code pour générer un mot de passe aléatoire, mais je dois l'afficher et je préfère ne pas utiliser un stringpour le faire. Le mot de passe est actuellement généré dans un SecureStringfichier que je peux mettre dans un tampon fixe/épinglé avec lequel travailler. Quel est le moyen le plus sûr de le rendre à l'utilisateur ?

Keith Stein

Je ne connais aucun moyen d'afficher un SecureStringsans le convertir en une chaîne normale. En tout état de cause, Microsoft lui-même ne recommande même SecureStringplus la sécurité . Ceci est lié à la page de documentation officielle de msdn :

DE0001 : SecureString ne doit pas être utilisé

Motivation

  • Le but de SecureStringest d'éviter d'avoir des secrets stockés dans la mémoire de processus sous forme de texte brut.
  • Cependant, même sous Windows, SecureStringn'existe pas en tant que concept de système d'exploitation.
    • Cela rend simplement la fenêtre plus courte ; cela ne l'empêche pas complètement car .NET doit toujours convertir la chaîne en une représentation en texte brut.
    • L'avantage est que la représentation en texte brut ne traîne pas en tant qu'instance de System.String-- la durée de vie du tampon natif est plus courte.
  • Le contenu du tableau n'est pas chiffré, sauf sur .NET Framework.
    • Dans .NET Framework, le contenu du tableau de caractères interne est chiffré. .NET ne prend pas en charge le chiffrement dans tous les environnements, en raison d'API manquantes ou de problèmes de gestion des clés.

Recommandation

Ne pas utiliser SecureStringpour le nouveau code. Lors du portage de code vers .NET Core, tenez compte du fait que le contenu du tableau n'est pas chiffré en mémoire.

L'approche générale du traitement des informations d'identification consiste à les éviter et à s'appuyer à la place sur d'autres moyens d'authentification, tels que les certificats ou l'authentification Windows.

SecureString n'est pas une protection vraiment efficace pour les informations sensibles, il limite juste un peu la fenêtre d'attaque et obscurcit les choses.

Mon opinion personnelle est que si vous voulez quand même le montrer à l'utilisateur, vous devriez vraiment vous soucier de son accessibilité dans l'application. Et, en général, la sécurité de la mémoire d'une application est de la responsabilité de l'OS et la sécurité physique du matériel. Si vous devez vous soucier des accès non autorisés à la mémoire de l'application, vous avez déjà un problème de sécurité beaucoup plus important.

Articles connexes


Comment générer un mot de passe aléatoire?

Bonjour le monde J'ai besoin de générer un mot de passe aléatoire qui sera utilisé dans OpenPGP.js pour crypter quelque chose de manière symétrique. L'utilisateur ne devrait jamais avoir à toucher ou voir le mot de passe (tout se passe dans les coulisses). Ain

Comment générer un mot de passe aléatoire en python

Vinay Kumar Shukla Je veux utiliser python3pour générer un mot de passe aléatoire pour crypter mes fichiers, le mot de passe aléatoire créé doit avoir la restriction suivante La longueur minimale doit être de 12 Doit contenir une lettre majuscule. Doit conteni