J'ai pu déchiffrer des mots de passe, compte tenu de leurs sels et de leurs hachages, en utilisant la force brute.
En premier lieu, la longueur des mots de passe était de 3 et la longueur du sel 2:
par exemple , hachage: rrVo/xC.s5/hQ
, sel: rr
=> mot de passe: thr
(temps: ~ 0m4.579s)
Maintenant, pour les mots de passe de longueur 4 et de longueur 2:
par exemple , hachage: ss1C5xfz6Nggg
, sel: ss
=> mot de passe: four
(temps: ~ 7m19.531s)
Comme je l'ai dit, ces mots de passe ont été obtenus à l'aide d'un algorithme de force brute. Il est utile pour les courtes longueurs de mot de passe: à mesure que le nombre de caractères du mot de passe augmente, le temps nécessaire pour briser le mot de passe augmente de façon exponentielle.
Ce que je veux savoir, c'est une technique plus efficace pour réduire l'espace de recherche.
Information additionnelle:
Les mots de passe sont créés en utilisant: A-Z, a-z, 0-9 et les symboles: $, #, +, @, =, /, &
J'ai utilisé la commande openssl
pour générer les hachages et les ai comparés au hachage donné
$ openssl passwd -crypt -salt rr thr
dans un script bash.
Sans plus d'informations, vous ne pouvez pas réduire l'espace de recherche. Comme vous ne disposez d'aucune information préalable sur le mot de passe, vous ne pouvez pas exclure un mot de passe possible de l'espace de recherche.
Si votre fonction de hachage (que vous ne spécifiez pas) présente des vulnérabilités, vous pourrez peut-être apprendre quelque chose sur le mot de passe avant de lancer la tentative de force brute (commence par 'a', contient 'b' et ainsi de suite ...) . Réduisant ainsi l'espace de recherche.
Quelque chose d'autre qui peut répondre à votre besoin de craquage de mot de passe plus rapide est Rainbow Tables qui sont un pré-calcul que vous effectuez étant donné le sel, pour pouvoir trouver le mot de passe plus rapidement plus tard. Les tables arc-en-ciel sont utilisées comme table de recherche pour un hachage donné.
Disons que nous avons hash('four','ss') = ss1C5xfz6Nggg
, et nous connaissons le sel ss
. Nous effectuerons le précalcul suivant:
La table Rainbow réelle doit être triée en fonction des valeurs de hachage, pour permettre une recherche rapide. De cette façon, une fois le hachage du mot de passe donné, ss1C5xfz6Nggg
, il suffit de rechercher le hachage dans la table arc-en-ciel et notre mot de passe est stocké juste à côté. Rendant ainsi le processus de craquage beaucoup plus rapide (au prix d'un temps de précalcul, bien sûr).
Edit: Sjeord le commentaire est correct, donc je dois souligner que:
Les tables arc-en-ciel, malgré leur popularité récente en tant que sujet de billets de blog, n'ont pas vieilli avec élégance. Les implémentations CUDA/OpenCL de crackers de mots de passe peuvent exploiter la quantité massive de parallélisme disponible dans les GPU, atteignant un pic à des milliards de mots de passe candidats par seconde. Vous pouvez littéralement tester tous les mots de passe alphabétiques en minuscules qui sont ≤ 7 caractères en moins de 2 secondes. Et vous pouvez maintenant louer le matériel qui rend cela possible à moins de 3 $/heure. Pour environ 300 $/heure, vous pourriez casser environ 500 000 000 000 de mots de passe candidats par seconde.
Il n'y a aucun moyen de récupérer le mot de passe plus rapidement que la force brute, mais il y a beaucoup de choses que vous pouvez changer sur votre vitesse de force brute.
quatre (temps: ~ 7m19.531s)
Il faut beaucoup de temps pour forcer un mot de passe aussi brièvement. Vous obtiendriez une grande amélioration des performances en utilisant hashcat avec une carte graphique décente. Je pouvais le casser en moins de deux secondes avec la commande suivante:
/usr/src/cudaHashcat-2.01/cudaHashcat64.bin ss1C5xfz6Nggg -m 1500 -a 3
Le but du système salt + hash est qu'il ne devrait y avoir aucun moyen plus rapide qu'une attaque par force brute. Comme BgrWorker l'a déjà souligné, il existe en fait des faiblesses dans les anciens algorithmes de hachage qui réduisent l'espace de recherche (ou plus précisément: autorisent le calcul des collisions), mais en découvrir un est considéré comme une percée que vous trouverez dans un journal plus probable que dans une réponse stackoverflow. :-)
Il existe quelques astuces courantes que vous pouvez utiliser:
Les tables arc-en-ciel ont déjà été mentionnées et - en fonction de la taille du sel - même pour des longueurs de hachage et de mot de passe réalistes, elles fournissent une approche possible des 100 principaux mots de passe.
Utiliser des attaques de dictionnaire et des crackers au lieu d'une force brute stupide. Le mot de passe aaaaaaaa est beaucoup moins probable que le mot de passe "mot de passe" ou "12345678", donc les tester d'abord est intelligent.
Enfin, dans de nombreux scénarios du monde réel, la politique de mot de passe d'un site ou d'une entreprise réduit en fait votre espace de recherche, parfois de manière spectaculaire. Si le mot de passe peut non seulement, mais avoir contenir, disons, au moins un chiffre et un caractère spécial, votre espace de recherche sur 8 caractères vient de passer de 10 ^ 15 à 10 ^ 13.
Je crois que votre problème est que vous utilisez openssl dans un script bash. Cela signifie que chaque nouvelle tentative de mot de passe doit générer un autre processus. Pour le forçage brutal, envisagez d'utiliser un langage de programmation compilé efficace tel que C. Je suis sûr que vous constaterez que votre efficacité augmente de plus d'un ordre de grandeur.
Bien sûr, cela signifie que vous devrez réécrire l'intégralité de votre application de forçage brut.
Ce que vous recherchez est en opposition directe avec les objectifs fondamentaux des algorithmes de hachage de mot de passe en général. Vous ne devriez pas être surpris que ce que vous cherchez soit difficile - les gens ont passé des milliers d'heures à vous le rendre difficile.
Les gens ont mentionné Rainbow Tables et d'autres approches de hachage de mot de passe, ce qui serait une extension logique de ce que vous faites. L'autre alternative est de profiter du fait que les gens ne choisissent généralement pas des mots de passe parfaitement aléatoires. Des logiciels comme John the Ripper sont conçus pour exploiter cela, en utilisant des schémas de génération de mots de passe courants pour deviner d'abord les mots de passe les plus probables. Cela signifie que vous n'avez à recourir à une recherche par force brute que si le mot de passe a été bien choisi.