Maison >développement back-end >tutoriel php >Comment stocker les mots de passe des utilisateurs en toute sécurité
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 saltPlatform | 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.
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.
Stockez ensemble la valeur de sel et la valeur de hachage correspondante dans la base de données utilisateur.
Récupérer la valeur de sel de l'utilisateur à partir de la base de données et la valeur de hachage correspondante.
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.
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!