web-dev-qa-db-fra.com

Comment faire une double hachage cryptée

J'ai créé un hachage qui est crypté comme ceci: $What_i_made=BCrypt(MD5(Plain Text Password)) et je me demande si cela peut être fissuré. Actuellement, j'ai pensé à deux manières:

  1. Brute Force $What_i_made Pour obtenir le hash MD5, faites une attaque de dictionnaire sur le hachage MD5. Cependant, cela prendra des âges comme BCRYPT est si lent et un MD5 est de 32 caractères.
  2. $result=Bcrypt(MD5(random combination)) et comparez $result sur $What_i_made jusqu'à ce qu'ils correspondent. Ce sera beaucoup plus rapide, mais je ne suis pas vraiment sûr de quoi faire cela. J'ai essayé John et Hashcat mais je ne suis pas vraiment sûr de la façon dont vous pouvez le faire avec eux, alors je me tourne vers la communauté pour obtenir de l'aide. Merci. :)

BTW, tout autre outil qui fonctionnera également et je préférerais une méthode qui permet d'essayer toutes les combinaisons à la place des Attaks de dictionnaire.

4
SmartOinker

Ce hachage composite n'a aucun avantage sur la plaine BCRYPT. Cela pourrait être légèrement plus faible dû aux collisions MD5, mais je ne pense pas qu'on puisse réellement l'exploiter pour que cette attaque soit plus rapide. Quoi qu'il en soit, il n'y a aucune raison pour les mots de passe pré-hachaux avec MD5. Maintenant, à la réponse réelle.


Vous approchez # 2 ne fonctionnera pas car BCRYPT utilise des sels aléatoires intégrés. Hashing La même entrée produira deux fois deux hachages différents, car différents sels seront générés.

Le résultat de BCRYPT est en fait une structure de données contenant le hachage et le sel réel. Pour vérifier si un mot de passe est correct, vous devez extraire le sel d'origine à partir de la structure de hachage d'origine et l'utiliser sur HASH le mot de passe à vérifier. Si le hachage résultant correspond à l'original, le mot de passe est valide. Cette fonctionnalité est généralement fournie par des implémentations BCRYPT.


Si vous allez effectuer une attaque de dictionnaire, utilisez simplement toutes les entrées de votre dictionnaire avec MD5, puis exécutez une attaque de dictionnaire BCRYPT avec le dictionnaire de MD5S. Retour MD5S pour les mots de passe fissurés avec succès sera très facile et je le quitte pour que vous puissiez comprendre.

Une attaque de base de la force brute où toutes les combinaisons sont testées est irréalisable contre BCRYPT et MD5 n'est pas pertinente.

6
gronostaj