Maison >développement back-end >tutoriel php >Comment stocker les mots de passe des utilisateurs en toute sécurité

Comment stocker les mots de passe des utilisateurs en toute sécurité

炎欲天舞
炎欲天舞original
2017-08-04 17:55:091612parcourir

1 : Connaissances de base : Hachage avec Salt

Nous savons déjà à quel point il est facile pour les attaquants malveillants d'utiliser des tables de recherche et des tables arc-en-ciel pour déchiffrer rapidement le cryptage de hachage ordinaire. Nous avons également

appris que l'utilisation de hachages salés de manière aléatoire peut résoudre ce problème. Mais quel type de sel utilisons-nous et comment le mélanger dans un mot de passe ?

La valeur salt doit être générée à l'aide d'un générateur de nombres pseudo-aléatoires cryptographiquement sécurisé

, CSPRNG. CSPRNG est très différent des générateurs de nombres pseudo-aléatoires ordinaires,

comme la fonction rand() du langage "C". Comme son nom l'indique, CSPRNG est conçu pour être cryptographiquement sécurisé, ce qui signifie qu'il peut fournir des nombres aléatoires hautement aléatoires et complètement imprévisibles. Nous ne voulons pas que la valeur du sel soit prévisible, c'est pourquoi CSPRNG doit être utilisé.

Le tableau suivant répertorie les méthodes CSPRNG de certaines plateformes de programmation grand public actuelles.

Utilisez une valeur de sel unique pour chaque mot de passe de chaque utilisateur. Chaque fois qu'un utilisateur crée un compte ou modifie son mot de passe, le mot de passe doit avoir une nouvelle valeur de sel aléatoire.

Ne réutilisez jamais une valeur de sel. La valeur salt doit également être suffisamment longue pour qu'il y ait suffisamment de valeur salt à utiliser pour le cryptage de hachage. En règle générale, la valeur salt
Platform CSPRNG
PHP mcrypt_create_iv, openssl_random_pseudo_bytes
Java java.security.SecureRandom
Dot NET (C#, VB) System.Security.Cryptography.RNGCryptoServiceProvider
Ruby SecureRandom
Python os.urandom
Perl Math::Random::Secure
C/C++ (Windows API) CryptGenRandom
Any language on GNU/Linux or Unix Read from /dev/random or /dev/urandom

doit être au moins aussi longue que la sortie de la fonction de hachage. Ce sel doit être stocké dans la table des comptes d'utilisateurs avec le hachage du mot de passe.

Étapes pour stocker le mot de passe :

Utilisez CSPRNG pour générer une valeur de sel aléatoire suffisamment longue.

  1. Mélangez le sel dans le mot de passe et cryptez-le à l'aide d'une fonction de hachage de mot de passe standard telle que Argon2, bcrypt, scrypt ou PBKDF2.

  2. Stockez ensemble la valeur de sel et la valeur de hachage correspondante dans la base de données utilisateur.

  3. Étapes pour vérifier le mot de passe :

Récupérer la valeur de sel de l'utilisateur à partir de la base de données et la valeur de hachage correspondante.

  1. Mélange la valeur salt dans le mot de passe saisi par l'utilisateur et le crypte à l'aide d'une fonction de hachage commune.

  2. Comparez le résultat de l'étape précédente pour voir s'il est identique à la valeur de hachage stockée dans la base de données. S'ils sont identiques, le mot de passe est correct ; sinon, le mot de passe est erroné.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn