Maison > développement back-end > tutoriel php > Comprendre les fonctions de hachage et garder les mots de passe en sécurité

Comprendre les fonctions de hachage et garder les mots de passe en sécurité

Christopher Nolan
Libérer: 2025-02-26 11:41:10
original
455 Les gens l'ont consulté

Understanding Hash Functions and Keeping Passwords Safe

La protection des mots de passe utilisateur est crucial, en particulier compte tenu du risque de violations de serveur et de base de données. Cet article explore les principes fondamentaux du hachage et son rôle dans la sécurisation des mots de passe dans les applications Web. Pour ceux qui recherchent une solution PHP rapide, la fonction md5() est une option commune, mais pas la plus sécurisée. md5() produit systématiquement des hachages de longueur fixe, quelle que soit la longueur d'entrée, mettant en évidence sa nature unidirectionnelle.

$data = "Hello World";
$hash = md5($data);
echo $hash; // b10a8db164e0754105b7a99be72e3fe5
Copier après la connexion
Copier après la connexion

Utilisation du hachage pour le stockage de mot de passe

Les processus typiques d'enregistrement et de connexion de l'utilisateur utilisant le hachage sont les suivants:

Enregistrement:

  1. Les utilisateurs fournissent des détails d'enregistrement, y compris leur mot de passe.
  2. Le script Web stocke ces données dans une base de données.
  3. Surtout, le mot de passe est haché Avant Stockage.
  4. Le mot de passe d'origine est jeté; Seul le hachage est conservé.

Connexion:

  1. Les utilisateurs saisissent leur nom d'utilisateur / e-mail et mot de passe.
  2. Le script hache le mot de passe entré.
  3. Le script récupère le mot de passe haché stocké à partir de la base de données.
  4. Une comparaison est faite; L'accès n'est accordé que si les hachages correspondent.

Le mot de passe d'origine n'est jamais stocké, empêchant apparemment un compromis en cas de violation de la base de données. Cependant, il s'agit d'une simplification excessive. Examinons les vulnérabilités potentielles.

Défis de sécurité

1. Collisions de hachage: Une collision se produit lorsque différentes entrées produisent le même hachage. La probabilité dépend de l'algorithme de hachage. Les scripts plus anciens utilisant crc32() (un hachage 32 bits) sont particulièrement vulnérables car le nombre limité de sorties possibles rend la recherche de collisions faisable. Un script de force brute peut générer des mots de passe alternatifs produisant le même hachage crc32() comme un hachage volé.

2. Tables arc-en-ciel: Même avec des algorithmes résistants aux collisions, les tables arc-en-ciel pré-rémunérées contenant des hachages de mots de passe communs et de variations représentent une menace significative. Ces tableaux peuvent rapidement révéler des mots de passe correspondant aux hachages volés.

3. Atténuation du sel: Ajouter un "sel" (une chaîne aléatoire) au mot de passe avant le hachage aide à prévenir les attaques de table arc-en-ciel. Cependant, si le sel est cohérent entre les utilisateurs et volé, une nouvelle table arc-en-ciel peut être générée, annulant cette protection.

4. Salts uniques: en utilisant un SEL Unique unique pour chaque utilisateur (par exemple, l'ID utilisateur ou une chaîne générée de manière aléatoire stockée avec les données de l'utilisateur) renforce considérablement la sécurité, ce qui rend peu pratique de créer des tables arc-en-ciel efficaces.

5. Vitesse de hachage: Les algorithmes de hachage rapides sont sensibles aux attaques par force brute, où les attaquants essaient de nombreuses combinaisons de mots de passe. Même les mots de passe à 8 caractères peuvent être fissurés relativement rapidement avec un matériel puissant.

atténuation des vulnérabilités de vitesse de hachage:

L'utilisation d'algorithmes de hachage plus lents ou ceux avec des "paramètres de coût" réglables (comme Blowfish) augmente considérablement le temps requis pour les attaques de force brute. La fonction crypt() dans PHP prend en charge Blowfish, vous permettant de contrôler le nombre d'itérations.

$data = "Hello World";
$hash = md5($data);
echo $hash; // b10a8db164e0754105b7a99be72e3fe5
Copier après la connexion
Copier après la connexion

La partie '2A $ 10 $' spécifie l'algorithme de Blowfish et un paramètre de coût de 10 (2 ^ 10 itérations).

Une classe de hachage de mot de passe sécurisé

Cette classe intègre les meilleures pratiques discutées:

function myhash($password, $unique_salt) {
    return crypt($password, 'a$' . $unique_salt);
}
Copier après la connexion

en utilisant password_hash() (php 5.5)

La fonction

PHP intégrée password_hash() simplifie le hachage de mot de passe sécurisé. Il génère automatiquement des mises à niveau d'algorithme de sels et de gère les mises à niveau.

class PassHash {
    private static $algo = 'a';
    private static $cost = '';

    public static function unique_salt() {
        return substr(sha1(mt_rand()), 0, 22);
    }

    public static function hash($password) {
        return crypt($password, self::$algo . self::$cost . '$' . self::unique_salt());
    }

    public static function check_password($hash, $password) {
        $full_salt = substr($hash, 0, 29);
        $new_hash = crypt($password, $full_salt);
        return ($hash == $new_hash);
    }
}
Copier après la connexion

Conclusion

La combinaison de techniques de hachage robustes avec des politiques de mot de passe solides (longueur minimale, variété de caractères) fournit une approche complète de la sécurité du mot de passe dans les applications Web. N'oubliez pas de toujours hiérarchiser la protection des données des utilisateurs.

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 de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal