Dans PHP, les fonctions Crypt sont souvent utilisées pour le cryptage des mots de passe. Il augmente la résistance au chiffrement par un "sel" (sel), de sorte que les mêmes résultats de cryptage de mot de passe sont différents, empêchant ainsi les attaques de table arc-en-ciel. Cependant, si le sel est réutilisé lors de l'utilisation des fonctions de crypte , elle sapera sérieusement la sécurité du mot de passe et augmentera le risque d'être craqué. Cet article explorera en profondeur les risques de sécurité apportés par la réutilisation du sel et partagera comment générer et utiliser raisonnablement du sel en PHP pour améliorer le niveau de sécurité de la protection des mots de passe.
Le sel est des données aléatoires attachées au mot de passe lorsqu'elle est chiffrée. Il garantit que même si les deux utilisateurs ont le même mot de passe, les résultats de cryptage sont différents. Les fonctions principales de Salt sont:
Empêcher le même mot de passe de produire le même hachage.
Évitez les attaques de table arc-en-ciel.
Améliorez la sécurité du stockage du mot de passe.
Si le sel est réutilisé, en particulier entre les différents mots de passe, les attaquants peuvent l'utiliser pour casser les mots de passe par lots, ce qui réduit considérablement la sécurité.
Le même mot de passe produit le même hachage
Si le sel est le même, les résultats de cryptage du même mot de passe sont les mêmes et l'attaquant peut facilement identifier le compte avec le même mot de passe.
Accélérer la fissuration du mot de passe <br> En utilisant le même mot de passe en sel, un attaquant peut tenter de casser plusieurs hachages de mot de passe en même temps, ce qui permet de gagner du temps de craquage.
Réduire le seuil d'attaque <br> La réutilisation du sel permettra aux attaquants de construire plus facilement des tables de craquage pour le sel après la divulgation de la base de données de mot de passe, augmentant le taux de réussite de la fissuration du mot de passe.
Dans PHP, vous pouvez utiliser Random_Bytes ou OpenSSL_RANDOM_PSEUDO_BYTES pour générer des nombres aléatoires de haute intensité sous forme de sel:
function generateSalt($length = 22) {
$bytes = random_bytes($length);
// base64Remplacez-le parcryptJeu de caractères
return substr(str_replace(['+', '/', '='], ['.', '.', ''], base64_encode($bytes)), 0, $length);
}
Il est recommandé d'utiliser la fonction Password_Hash pour PHP 5.5 et supérieur, qui générera automatiquement un sel unique, simplifiera les opérations de développeur et sera plus sécurisée.
$password = 'your_password';
$hash = password_hash($password, PASSWORD_BCRYPT);
Certains développeurs aiment spécifier manuellement le sel eux-mêmes, par exemple:
$hash = crypt($password, '$2y$10$fixed_salt_value_here');
Cela entraînera que tous les mots de passe utilisent le même sel, ce qui est extrêmement dangereux. Cette pratique doit être évitée.
Utilisez du sel généré dynamiquement et le format répond aux exigences de l'algorithme. Par exemple, l'algorithme BCrypt nécessite que le sel soit de 22 longueur et ne contient que des caractères spécifiques:
$salt = '$2y$10$' . generateSalt(22);
$hash = crypt($password, $salt);
Si vous avez besoin de gérer le sel manuellement, assurez-vous de stocker le sel avec votre hachage de mot de passe pour vous assurer d'utiliser le bon sel lors de la vérification.
function generateSalt($length = 22) {
$bytes = random_bytes($length);
return substr(str_replace(['+', '/', '='], ['.', '.', ''], base64_encode($bytes)), 0, $length);
}
$password = 'user_password';
// BcryptFormatSalt,10pourcostvaleur
$salt = '$2y$10$' . generateSalt(22);
$hash = crypt($password, $salt);
echo "Hashed password: " . $hash;
La prévention de la réutilisation du sel est une partie importante de l'assurance de la sécurité des mots de passe. Il est recommandé d'utiliser la fonction Password_hash intégrée de PHP pour terminer le cryptage de mot de passe, qui est à la fois pratique et sûr. Si vous utilisez la fonction Crypt , assurez-vous de générer un sel unique et aléatoire pour éviter l'invalidation du cryptage de mot de passe en raison de l'utilisation répétée de sel. La gestion correcte du sel peut considérablement améliorer la sécurité du système et réduire les risques causés par la fuite de mot de passe.