web-dev-qa-db-fra.com

Les mots de passe sont-ils stockés en mémoire?

Je viens de réaliser que, dans n'importe quelle langue, lorsque vous enregistrez un mot de passe dans une variable, il est stocké en texte brut dans la mémoire.

Je pense que le système d'exploitation fait son travail et interdit aux processus d'accéder à la mémoire allouée les uns aux autres. Mais je pense aussi que c'est en quelque sorte contournable. Je me demande donc si c'est vraiment sûr et s'il existe un moyen plus sûr de stocker les mots de passe pour s'assurer que les processus étrangers ne peuvent pas y accéder.

Je n'ai pas précisé l'OS ou la langue car ma question est assez générale. Il s'agit plutôt d'une question d'alphabétisation informatique que d'un objectif spécifique.

452
Antoine Pinsard

Étant donné que cela pourrait s'appliquer à un certain nombre de systèmes d'exploitation avec différents niveaux de protection, quelques points à garder à l'esprit:

  1. Quoi qu'il en soit, vous ne pouvez pas empêcher un mot de passe d'être en mémoire à un moment donné. Si quelqu'un a un accès en direct à la mémoire de votre application, vous ne pouvez pas l'empêcher de la voir.

  2. Les mots de passe ont généralement plus de valeur que ce qu'ils protègent - les utilisateurs réutilisent les mots de passe et en acceptant la connexion par mot de passe, vous assumez une certaine responsabilité pour garder leur mot de passe secret, même si les données qu'il protège sont compromises. Vous pouvez atténuer quelque peu les dommages d'une attaque sur la mémoire froide (azote liquide ou hibernation) en hachant le mot de passe de votre utilisateur avec une fonction de hachage lente (PBKDF, scrypt, bcrypt) et en utilisant le hachage pour l'authentification.

  3. La suppression de votre mot de passe utilisateur de la mémoire est une bonne pratique. Il y a de nombreux écueils à faire correctement, alors assurez-vous d'utiliser une bibliothèque appropriée: WindowsExemple Linux

0
Charles Munger