Position actuelle: Accueil> Derniers articles> Comment empêcher les risques de sécurité apportés par la réutilisation du sel lors de l'utilisation des fonctions de crypte?

Comment empêcher les risques de sécurité apportés par la réutilisation du sel lors de l'utilisation des fonctions de crypte?

M66 2025-07-28

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.

Qu'est-ce que le sel? Pourquoi est-ce important?

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

Risques de réutilisation du sel

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

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

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

Comment éviter la réutilisation du sel?

1. Utilisez un sel aléatoire et unique

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);
}

2. Utilisez un algorithme de hachage avec mécanisme de sel intégré

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);

3. Évitez le sel fixe entrant manuel

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.

4. Si la crypte est nécessaire, générez du sel dynamique

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);

5. Conserver et gérer le sel

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.

Exemple: utilisation sûre des fonctions de crypte

 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;

Conclusion

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.