Parallélisme

On souhaite vérifier que les mots de passe de ces comptes n'ont pas déjà été retrouvés dans des fuites de données connues. Pour cela, on va utiliser le service Have I been pwned? et notamment son API pour vérifier des mots de passe.

Le principe de cette API est simple : afin de ne pas transmettre le mot de passe à tester sur le réseau, on ne transmet que les 5 premiers caractères de la représentation hexadécimale du hash SHA-1 du mot de passe dans une URL. La réponse contient alors la liste des hashs des mots de passe (sans les 5 premiers caractères) ayant été publiés après des fuites de données ainsi que le nombre d'occurrences.

Par exemple, le SHA-1 du mot de passe password est 5BAA61E4C9B93F3F0682250B6CF8331B7EE68FD8. Dans la page https://api.pwnedpasswords.com/range/5BAA6 on trouve 1E4C9B93F3F0682250B6CF8331B7EE68FD8:3861493, ce qui signifie que le mot de passe "password" est associé à presque 4 millions de comptes qui ont fuité.

Le calcul du hash étant gourmand en puissance CPU, nous souhaitons répartir le calcul des hashs des mots de passe associés à nos comptes sur l'ensemble des cœurs de notre système. Les étapes seront :

  • Pour chaque compte, calculer le SHA-1 de son mot de passe.
  • Regrouper les comptes ayant les même 5 premiers caractères de SHA-1 (le préfixe).
  • Récupérer les pages contenant les compléments (suffixes) de SHA-1 pour chacun de ces préfixes.
  • Rechercher dans ces pages les suffixes de nos comptes.
  • Afficher les comptes vulnérables triés par nombre d'occurrences.