← Hash, MD5, mots de passe et certificats TLS

Module 5 / 12 · 90 min

05. Vérification et migration après succès

Migrer sans transformer le hash historique en nouveau mot de passe.

Votre progression apparaîtra ici lorsque JavaScript est actif.

La progression et le meilleur score sont enregistrés uniquement dans ce navigateur. Aucun compte n’est nécessaire ; effacer les données du navigateur les supprime. Les durées de modules sont indicatives et incluent les exercices.

Comprendre le mécanisme

password_verify compare un secret présenté au format de hash attendu. Après une authentification réussie, password_needs_rehash permet de décider une mise à jour avec la politique courante. La transition doit résister aux accès concurrents et ne pas remplacer accidentellement un mot de passe changé entre-temps. Le secret en clair ne doit vivre que le temps strictement nécessaire au traitement.

Raisonner et vérifier

Pour un héritage MD5, identifiez le schéma par une métadonnée maîtrisée, pas seulement une supposition sur la longueur. Vérifiez l’ancien schéma dans un chemin limité et retirez-le dès migration ou réinitialisation. Hacher la chaîne MD5 comme si elle était le secret utilisateur n’équivaut pas à retrouver un stockage direct adapté du mot de passe. Une réinitialisation sûre est préférable lorsqu’une vérification héritée ne peut être maintenue correctement.

Succès préalable

Le rehash suit une vérification réussie. Un échec ne prouve pas un secret légitime. Vérifiez d’abord le secret présenté avec le schéma actuel identifié. Rehasher une valeur incorrecte avant cette étape permettrait de remplacer le credential légitime avec une donnée fournie par l’attaquant.

Erreur fréquente à comprendre

Un mauvais mot de passe doit remplacer le hash stocké.

Un échec ne prouve pas un secret légitime.

Politique cible

password_needs_rehash compare à une politique. La décision de mise à jour n’est pas une authentification. password_needs_rehash compare algorithme et paramètres du hash à ceux demandés. Il ne valide pas le mot de passe et ne réalise pas lui-même l’écriture de migration dans la base.

Erreur fréquente à comprendre

Cette fonction prouve à elle seule que le mot de passe est correct.

La décision de mise à jour n’est pas une authentification.

Version de schéma

Le schéma hérité doit être identifié explicitement. Des formats peuvent se ressembler et demander une métadonnée. Conservez une indication non ambiguë du format historique. Évitez de deviner plusieurs algorithmes successivement après chaque échec, ce qui rendrait la règle d’acceptation difficile à auditer et à retirer.

Erreur fréquente à comprendre

La seule longueur de chaîne prouve toujours l’algorithme.

Des formats peuvent se ressembler et demander une métadonnée.

Original absent

Hacher un ancien MD5 ne retrouve pas l’original. Les entrées sont différentes. Passer une chaîne MD5 à password_hash protège cette chaîne selon une nouvelle couche ; cela ne retrouve pas le mot de passe. Une migration normale réutilise le secret réellement présenté après vérification réussie.

Erreur fréquente à comprendre

password_hash du MD5 produit le même stockage que celui du secret original.

Les entrées sont différentes.

Reset concurrent

Une écriture conditionnelle peut protéger un reset concurrent. Une autre transition légitime peut avoir modifié le compte. Écrivez le nouveau hash seulement si l’ancien hash ou la version du credential correspond encore à la lecture initiale. Sinon, un reset intervenu entre-temps pourrait être écrasé par la migration tardive.

Erreur fréquente à comprendre

La migration doit écraser tout changement intervenu après lecture.

Une autre transition légitime peut avoir modifié le compte.

Retrait par compte

Le chemin hérité doit être retiré pour un compte migré. Le retrait fait partie de l’amélioration recherchée. Quand le format cible est enregistré, ne gardez pas un ancien hash alternatif pour ce compte. Vérifiez que le code de connexion n’accepte plus le chemin hérité après la transition.

Erreur fréquente à comprendre

Un compte migré doit accepter indéfiniment toutes ses anciennes preuves.

Le retrait fait partie de l’amélioration recherchée.

Réinitialisation

Une réinitialisation sûre peut remplacer une migration impossible. Une empreinte n’offre pas cette capacité générale. Si le format ou le secret ne peut être vérifié correctement, prévoyez une réinitialisation par un canal maîtrisé. Ne transformez pas une migration impossible en exception d’authentification permanente.

Erreur fréquente à comprendre

Toute base héritée permet de récupérer les mots de passe en clair.

Une empreinte n’offre pas cette capacité générale.

Vie du secret

Le secret présenté doit être conservé le moins longtemps possible. La preuve de migration peut rester expurgée. Gardez le mot de passe présenté seulement pendant la vérification et le rehash nécessaires. Ne l’insérez pas dans une queue de migration, une trace de requête ou un fichier temporaire.

Erreur fréquente à comprendre

Une migration exige de journaliser les mots de passe.

La preuve de migration peut rester expurgée.

Tests de transition

Les tests doivent couvrir mauvais secret et succès. Le chemin négatif demande une assertion spécifique. Couvrez mauvais secret, succès migré et reset concurrent. Vérifiez à la fois connexion autorisée, hash final et retrait du schéma ancien ; une simple réponse HTTP réussie ne prouve pas la transition.

Erreur fréquente à comprendre

Un seul succès démontre l’absence de modification sur échec.

Le chemin négatif demande une assertion spécifique.

Compatibilité effective

Le format cible doit être vérifiable dans l’environnement. La cible réelle doit supporter la politique choisie. Le runtime qui vérifie les futurs logins doit supporter le format produit. Vérifiez tous les nœuds lors d’une mise à jour progressive afin qu’un compte migré reste utilisable après changement de serveur.

Erreur fréquente à comprendre

Choisir un algorithme indisponible assure une migration opérationnelle.

La cible réelle doit supporter la politique choisie.

Atelier guidé : lire, expliquer et vérifier le code

<?php
declare(strict_types=1);
$hash = password_hash('lab', PASSWORD_BCRYPT, ['cost' => 4]);
var_dump(password_needs_rehash($hash, PASSWORD_BCRYPT, ['cost' => 5]));

Dans cet atelier, la politique demandée utilise un coût bcrypt différent de celui du hash stocké. needs_rehash indique donc une différence, sans authentifier le secret. Dans une connexion réelle, placez cette décision après password_verify et protégez l’écriture contre une modification concurrente du credential.

La politique demandée a un coût différent du format actuel. Les paramètres ne correspondent pas. La fonction retourne une décision, pas un secret. Le code ne réalise aucune écriture.

Travail pratique : Simulez connexion correcte, mauvais secret, changement de politique et reset concurrent sur un compte fictif.

Critères de correction : Seul le succès peut déclencher le rehash. L’écriture compare l’état attendu ou utilise une transaction adaptée. Le reset concurrent reste prioritaire et l’ancien chemin est retiré pour le compte migré.

Exemple commenté

Succès de vérification → politique de rehash → écriture conditionnelle du nouveau format
Échec → aucune migration ni session

Le contrôle de concurrence évite d’écraser un reset intervenu entre lecture et écriture.

Exercice de mise en pratique

Simulez connexion correcte, mauvais secret, changement de politique et reset concurrent sur un compte fictif.

Voir une proposition de correction

Seul le succès peut déclencher le rehash. L’écriture compare l’état attendu ou utilise une transaction adaptée. Le reset concurrent reste prioritaire et l’ancien chemin est retiré pour le compte migré.

Points de vérification

  • Rehash après succès.
  • Schéma versionné.
  • Concurrence et retrait traités.

Contrôle de connaissances

Cours associé : 05. Vérification et migration après succès ↗
Quand effectuer le rehash d’un secret présenté ?

Documentation de référence ↗

Validation du module

101 questions, objectif pédagogique de 75 %. Durée conseillée de 150 minutes, sans limite imposée. Les questions et les choix sont mélangés ; le corrigé apparaît après validation. Le contrôle rapide de la leçon et l’examen final du cours restent des exercices distincts.

Commencer ou reprendre les 101 questions →