mardi 29 avril 2008

Cracker le format MD5 par brute force en utilisant le CPU et le GPU

Un informaticien français met en place un logiciel qui permet de cracker un mot de passe au format MD5 en couplant CPU et GPU.

Benjamin Vernoux (Titan), vient de réaliser un petit outil permettant de « casser » un mot de passe au format MD5. "J'ai mis trois jours pour le réaliser, confie l'auteur, Environ une journée pour créer une maquette sans interface graphique, puis portage sous MFC et optimisations environ 2 jours." Pourquoi un tel projet ? "Je dirais tout simplement pour le challenge et la recherche de l’optimisation ultime du couple CPU/GPU, explique le créateur à la rédaction de zataz.com, Ca me rappel la bonne vieille époque de la programmation sur Amiga avec le Copper/Blitter… ou la programmation était optimisée et les programmes/jeux étaient rapides et très réactif à l’image de l’AmigaOS qui est pour moi toujours un référence au niveau réactivité pour un OS."

La première bêta tournait à environ 20 Millions de hash MD5/sec, sans aucune optimisation particulière, seul l'algorithme MD5 a été porté sur CUDA 1.1 (GPU) pour tourner de manière parallèle. Le fonctionnement est assez novateur. Côté CPU, l'outil calcul un brute force (36 possibilités a-z et 0-9) et prépare le MD5 avec un résultat de 64 octets par mot de passe "Ce calcul et fait par block de 2 millions de mot de passe (soit 128MB)" explique Benjamin. L'outil copie des mots de passe type MD5 vers la mémoire GPU (Graphics Processing Unit), la carte graohique. Le GPU calcul le MD5 de chaque mot de passe et vérifie si le HASH correspond au hash à trouver "Si le hash est trouvé on met un flag à 1 et le hash trouvé en mémoire GPU que le CPU vérifiera".

Après diverses optimisations du générateur de brute force côté CPU avec une "réécriture complète de l'algorithme de brute force en fonction des tailles de mot de passe", côté GPU l'auteur de cet outil est passé à 30 Millions de hash MD5/sec. La version proposée sur le site Internet de Benjamin Vernoux, la Version 0.1, a eu une optimisation de la bande passante. "Les mots de passe calculés côté CPU sont stockés sur 16 octets à la place de 64octets plus utilisation de la mémoire CPU CUDA en mode - pinned -. 20% plus rapide, mode normal environ 2.1GB/sec, mode pinned 2.5GB/s". La v1.0 a eu aussi une optimisation de l'algorithme MD5 côté GPU "utilisation des vecteurs pour charger les mots de passe par block de 128bits avec suppression des conflits". La prochaine étape du travail de cet informaticien va consister à déplacer une grande partie du brute force dans le GPU qui au passage à une bande passante de plus de 47GBytes/sec sur une GeForce 8800GT "Alors que la bande passante mémoire CPU n’est que d’environ 2.5GBytes/sec". Voilà une belle étude informatique qui devrait intéresser les passionnés de codage et de chiffrement. La version actuelle fait un brute force sur 36 caractères (les lettres a à z avec les chiffres de 0 à 9).

Aucun commentaire: