Maison  >  Article  >  développement back-end  >  Comment les mots de passe doivent-ils être stockés en toute sécurité ?

Comment les mots de passe doivent-ils être stockés en toute sécurité ?

零下一度
零下一度original
2017-06-23 14:45:042085parcourir

1 : Connaissances de base : Hachage avec Salt

Nous savons déjà que les attaquants malveillants utilisent des tables de recherche et des tables arc-en-ciel pour déchiffrer les hachages ordinaires. La rapidité du cryptage. 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.

table>

Une valeur salt unique doit être utilisée 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.

Plateforme 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++ (API Windows) CryptGenRandom
Tout langage sur GNU/Linux ou Unix Lire depuis /dev/random ou /dev/urandom

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

Ne réutilisez jamais une valeur de sel. La valeur salt doit également être suffisamment longue pour que suffisamment de valeurs salt puissent être utilisées pour le cryptage de hachage. En règle générale, la valeur salt

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.
É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