Le vérificateur est une donnée qui permet de tester si un mdp est correct.
J'aurais dû écrire
un vérificateur est une fonction de l'ensemble de mdp autorisés vers les booléens indiquant si un pp (password potentiel) est correct.
Je ne vois pas le "vérificateur de mot de passe" transiter en clair dans les échanges :
- Le serveur envoie "sid" aléatoire
- Le client retourne hash = SHA-1(SHA-1(lower (login) || password) || sid)
- Le serveur récalcule hash = SHA-1(hpw || sid), et compare le résultat
En capturant la connexion on peut récupérer :
- login
- sid
- hash = SHA-1(SHA-1(lower (login) || password) || sid)
hash seul n'est pas un vérificateur. Le triplet (login, sid, hash) définit un vérificateur.
La connaissance d'un vérificateur est donc suffisante pour effectuer une attaque par dictionnaire. (Le serveur doit stocker au moins les vérificateurs et pourrait tenter une attaque par dictionnaire.)
En connaissant login et sid, je peux calculer SHA-1(SHA-1(lower (login) || pp) || sid) pour tout pp (password potentiel).
Le vérificateur en fait est la fonction
pp -> ( SHA-1(SHA-1(lower (login) || pp) || sid) == hash )
Ce qui permet de faire une attaque de type dictionnaire ou force brute.