web-dev-qa-db-fra.com

Cracker les mots de passe hachés avec PHP?

Est-ce la bonne façon de casser un mot de passe haché avec PHP?

  • J'ai utilisé le password_hash fonction pour hacher un mot de passe (PHP version 7.3).

  • Ensuite, j'ai créé une liste de mots en utilisant un script Python. Il fait environ 1 Go.

  • J'ai ensuite créé un script PHP pour lire cette liste de mots et vérifier le mot de passe à l'aide de password_hash.

  • Enfin, j'ai exécuté le script PHP en utilisant le terminal.

Cela fonctionne bien mais prend trop de temps pour déchiffrer le mot de passe. En tant qu'étudiant, j'aime écrire mes propres scripts et outils. Quelqu'un at-il une idée sur la façon de le faire avec de meilleures performances et efficacité?

J'ai également cherché à utiliser les clusters et le GPU pour le craquage de mot de passe, et je ne sais pas si cela pourrait aider.

6
Chamath Viranga

Aperçu

Méthodes de hachage modernes (qui password_hash utilisations) sont intentionnellement lentes pour empêcher de faire exactement ce que vous essayez de faire. La plupart sont même résistants à la parallélisation avec un GPU.

Donc, si votre objectif est d'accélérer l'exécution d'une liste de mots de passe de 1 Go par rapport à un algorithme de mot de passe moderne, il n'y a qu'une seule réponse: il n'y a aucun moyen de le faire sans exécuter le tout sur un gigantesque cluster informatique. Même dans ce cas, un mot de passe suffisamment long peut être littéralement non craquable.

Vous ne pouvez pas accomplir ce que vous essayez de faire.

Les nombres

"Vous ne pouvez pas faire cela" est le genre de déclaration qui pourrait utiliser des chiffres durs!

Taux de hachage

Pour déchiffrer un mot de passe, nous devons d'abord savoir à quelle vitesse nous pouvons tester les hachages. J'emprunte généreusement à un exemple réel quand quelqu'un a essayé de casser les mots de passe dans le Ashley Madison data dump en utilisant une plate-forme de craquage avec 4 GPU. Il s'agit d'un matériel bien meilleur que celui auquel un utilisateur à domicile typique aura accès. Dans ce cas, bcrypt a été configuré pour utiliser un facteur de coût 12 (alias 4069 tours de hachage), et la plate-forme 4 GPU ne pouvait gérer que 156 hachages par seconde. Pour un facteur de coût inférieur, le taux de hachage augmente rapidement. PHP utilise 10 par défaut, ce qui entraînerait naïvement un taux de hachage 4 fois plus élevé. Nous arrondirons pour le plaisir et prétendrons que nous parvenons à frapper 750 hachages/seconde.

Hashs

Ensuite, nous devons savoir combien de mots de passe nous essayons de déchiffrer. Prenons quelques exemples: tous les mots de passe possibles à 4 caractères (chiffres, lettres, 10 caractères spéciaux), tous les mots de passe possibles à 6 caractères, tous les mots de passe possibles à 8 caractères ou un fichier de 1 Go rempli de mots de passe. Voici le nombre de mots de passe dans chaque liste:

  1. Tous les mots de passe à 4 chiffres: 72^4 = ~27,000,000 combinaisons
  2. Tous les mots de passe à 6 chiffres: 72^6 = ~74,000,000,000 combinaisons
  3. Tous les mots de passe à 8 chiffres: 72^8 = ~700 trillion combinaisons
  4. Un fichier de 1 Go: ~ 100 000 000 de mots de passe (en supposant 10 octets par mot de passe en moyenne)

Temps de hachage

Nous savons combien de mots de passe nous voulons hacher et notre taux de hachage (750/s), alors maintenant des calculs simples nous disent combien de temps il faudra pour parcourir ces listes avec un algorithme de hachage haut de gamme:

  1. Tous les mots de passe à 4 chiffres: ~ 10 heures
  2. Tous les mots de passe à 6 chiffres: ~ 6 ans
  3. Tous les mots de passe à 8 chiffres: ~ 30 000 ans
  4. Un fichier de 1 Go: ~ 1,5 jours

Pour des chiffres plus réalistes, j'ai approximativement estimé le taux de hachage en utilisant l'un des processeurs de ma propre machine, gérant environ 10 hachages par seconde. En utilisant ce taux de hachage :

  1. Tous les mots de passe à 4 chiffres: ~ 30 jours
  2. Tous les mots de passe à 6 chiffres: ~ 450 ans
  3. Tous les mots de passe à 8 chiffres: ~ 2 millions d'années
  4. Un fichier de 1 Go: ~ 115 jours

Sommaire

Achetez-vous une demi-douzaine de GPU de haute qualité et, en supposant que vous utilisez le facteur de coût par défaut, vous pourrez casser tous les mots de passe à 4 chiffres possibles en une journée environ. Essayez de faire juste les mots de passe à 6 chiffres et cela vous prendra encore des années. Votre fichier de 1 Go rempli de mots de passe est plus difficile à deviner, mais en réalité, cela prendra quelques jours, même avec un tas de GPU pour vous aider.

9
Conor Mancone

J'aime vraiment la réponse de Conor Mancone. La seule chose que j'ajouterais est que vous pouvez améliorer l'efficacité en vérifiant d'abord les mots de passe les plus probables, peut-être en utilisant des listes de mots de passe qui ont déjà été divulgués ou des choses que vous savez sur la cible (par exemple, les équipes sportives locales).

2
Gethin LW