Rsa data security, inc.: an md5 recovery tool based on brute force method and dictionnaries

Description

Décryptage des empreintes MD5 à 565 000 passes par seconde. Exercice d'algorithmie pure pour protéger ses informations personnelles dans le cadre privé, car c'est la seule utilisation utile de ce code source.

This software uses the «RSA Data Security, Inc. MD5 Message-Digest Algorithm»

==============================
1? Pourquoi ce programme ?

Initialement, je recherchais comment implémenter le hashage MD5 sous Delphi. Je suis d'abord tombé sur le RFC 1321 en C++. Ensuite, chez PhpCs.com, en commentant un code de hashage exotique, un membre a cité un code JavaScript du JdNet. Mais étant donné que la fonction est mondialement célèbre (elle en est à sa version 5 quand même et que c'est des gros balourds du cerveau qui assurent son incassabilité), elle doit bien exister déjà sous Delphi. Bien, DelphiPage donne 2 liens. Le premier DcpCrypt propose pleins de composants pour faire du hashage (MD4, MD5, RIPE, SHA, TIGER), mais vient ensuite le lien ultime de Fichtner. C'est celui-ci qu'on va utiliser... Et puis après j'ai cherché sur CS des trucs, mais sans plus.

"Offrir" simplement le MD5 n'est pas très original. J'ai donc eu l'idée de faire un Personal Recovery Tool, mais son utilisation est mathématiquement très limitée.

==============================
2? Et c'est quoi les liens ?

Dans l'ordre:

http://www.faqs.org/rfcs/rfc1321.html
http://developpeur.journaldunet.com/tutoriel/sec/010828sec_cryptohachage.shtml
http://delphipage.free.fr/cryptage.html
http://www.cityinthesky.co.uk/delphi.html
http://www.fichtner.net/delphi/md5.delphi.phtml
http://www.phpcs.com/code.aspx?id=19322
http://www.cppfrance.com/code.aspx?ID=25243
http://www.phpcs.com/code.aspx?ID=19405
http://pajhome.org.uk/site/legal.html
...et puis y'en a d'autres sur CS.

==============================
3? C'est quoi le MD5 ?

Acronyme de "Message Digest #5". L'algorithme (breveté puis rendu public) a été créé en 1991 par Ron Rivest et deux de ses camarades (Rivest-S-A) et permet de créer des signatures. Le hashage est une technique qui permet de perdre de l'information pour en représenter son contenu: d'où le mot "empreinte". De ce fait, le hashage est irréversible sauf par méthode brutale dans la limite du raisonnable.

Voici les différentes contraintes de l'algorithme MD5 qui ont justifié ses différentes versions.
- créer une empreinte numérique de taille fixe (16 octets, 128 bits)
- idéalement impossible d'inverser la fonction de hashage
- annuler idéalement la probabilité d'obtenir la même empreinte à partir de deux messages différents
- favoriser une très grande dispersion: un petit écart entre deux messages donnera un écart important entre leurs deux empreintes

MD5 tend à être remplacé par d'autres systèmes mieux sécurisés, style SHA (plus haut niveau de chiffrement).

==============================
4? Ca sert à quoi ?

MD5 est irréversible. Donc, c'est très utile...

Faisons une analogie: les empreintes digitales humaines esseulées ne permettent pas d'identifier la personne, mais leur comparaison oui. Avec le MD5, c'est pareil.

MD5 est beaucoup utilisé en PHP pour gérer des comptes sans que les informations soient exploitables, même par l'administrateur du site (certes il peut toujours remplacer les données, mais ne peut pas connaître le contenu original), qui n'a donc aucune préconnaissance de la chaîne originale. De ce fait, aucun commerce n'est possible, et le système MD5 est suffisamment solide pour résister aux attaques.

Par extension, le MD5 permet de gérer des générateurs de clé. Mais comme toute chose, il ne faut pas se baser exclusivement sur le MD5 pour coder les informations. Bien au contraire...

==============================
5? Ca ressemble à quoi le MD5 ?

Pour répondre à cette question, voici des chaînes:

MD5('') = D41D8CD98F00B204E9800998ECF8427E
MD5('a') = 0CC175B9C0F1B6A831C399E269772661
MD5('b') = 92EB5FFEE6AE2FEC3AD71C777531578F
MD5('c') = 4A8A08F09D37B73795649038408B5F33
MD5('bateau') = B40C600C9E8B436FFB554756920C4B77
MD5('gateau') = 3F8593D58BDAB252D9005A80A1E63415
MD5('Delphifr.com est le meilleur site du monde') = D1A63FBDC03253814B04508CBD4EC868
MD5('Delphifr.com est le Meilleur site du monde') = 22D9ED0E2FD2F288B2F1E7D519257B26

Comme vous le voyez, la casse est importante.

==============================
6? En définitive, il sert à quoi ton programme ?

C'est pour tenter de retrouver des données personnelles codée en MD5. Y'a deux techniques de base:
1) utiliser des dictionnaires (5 millions de mots en 48Mo). Voir ftp://gattinger.org/wordlists/ pour télécharger les fichiers. Si vous n'avez pas ces fichiers, la fonction Dico sera désactivée.
2) utiliser la méthode brutale.

La seule manière de décoder le MD5 est de tester toutes les combinaisons. C'est le principe du hashage, à ne pas confondre avec le cryptage qui lui est réversible. C'est pour cette raison que le MD5 est considéré comme incassable, car il faut bruteforcer. Or, mathématiquement, il y a un problème sympathique.

Pour un mot de 8 lettres constitué a priori de 26 lettres en minuscules, on nécessite une attente maximale de 5 jours à raison de 550 000 passes par seconde. Pour un mot de 5 caractères parmi les 256 de la table ASCII, on a besoin de 23 jours. Avec 10 caractères, il faut 70 milliards d'années. Dans ce dernier cas, à la puissance de 460 TéraFlops des supercalculateurs IBM, il faudrait "seulement" 83 ans.

Décrypter le MD5 ne peut se faire que dans le cadre privé, car les informations codées sont déjà préconnues, ce qui n'est généralement pas le cas lorsqu'on visualise une chaîne MD5 tirée du hasard. Comme déjà expliqué, il est possible de décrypter un numéro de téléphone si seulement on sait si c'en est un. Si on ne sait pas, alors se lancer dans la table ASCII est une partie perdue d'avance. L'univers ne serait pas assez âgé...

==============================
7? Comment la MD5 Lib marche-t-elle ?

Comparer deux STRING prend du temps. On préfère donc des tableaux de BYTE car c'est plus rapide (correspond au type MD5Digest). On évite ainsi de gérer des chaînes et toutes les conversions qui vont avec (voir §9). J'ai dû rajouter 4 fonctions à la librairie d'origine.

La librairie est très bien faite.

==============================
8? Peut-on encore accélérer la vitesse d'analyse ?

Il y a 4 solutions:
1) ne pas faire s'amuser pendant que le programme travail
2) fermer toutes les applications
3) avoir un seul décodeur à la fois
4) mettre l'application en focus

Les résultats sont très modestes.

==============================
9? Dans la pratique, la vitesse est de 375 000 passes par seconde pour les IP, mais avec des chaînes, on est effectivement à 550 000. Je ne comprend pas !

La puissance maximale du programme est de 550 000 passes par seconde (correspond à la chaîne vide). Pour les IP, il faut à chaque boucle regénérer l'IP sous forme de string. En revanche, pour les chaînes, on ne fait varier qu'un caractère à la fois. On a donc simplement à faire un truc du genre STRING[Index]:=CHAR;. De ce fait, on gagne énormément en vitesse, et on est à 95% de la vitesse maximale. C'est donc une très bonne optimisation difficilement réductible.

Plus les chaînes sont longues et plus ça rame. Mais le ciblage des actions réduit significativement le temps pour recouvrer une chaîne. D'où le gain espéré...

==============================
10? Cryptage ou hashage ?

Le cryptage associe des caractères à d'autres. Trouver les clés de génération permet de décrypter: principe de clés publiques et privées. Ce cryptage là sert dans les archives DOC, RAR, ZIP, XLS, PPT...

Le hashage massacre les données de manière irréversible par des fonctions non bijectives. C'est unisens. Le hashage ne peut pas être utilisé dans des documents de bureautique.

==============================
11? Comment se protéger ?

Il faut:
- mettre des mots de passe très longs
- ne pas utiliser des mots du dictionnaire
- jouer sur la casse
- utiliser un large panel de caractères ASCII

Ca démultiplie les combinaisons.

==============================
12? Comment utiliser ce logiciel ?

Par le coté mathématique de la chose, seule une utilisation privée est possible car vous connaissez l'allure de la chaîne d'origine, style «je sais qu'il y a que des 0 et des 1», «là, y'a une majuscule»... etc, etc. Un cambrioleur (ou même un ami) ne connait rien et est démuni.

Il y a eu un challenge un jour. Je cite: «Challenge RC5 / 64 bits: Ce challenge a été emporté par Distributed.net, en septembre 2002, après 1700 jours de calcul et un réseau qui a compté plus de 300 000 ordinateurs de type "PC"»

Ca fait réfléchir. Et si vous tombez par hasard sur deux chaînes différentes ayant le même MD5, alors vous pourrez être chanceux de vous.

==============================
13? Conclusion ?

Le hashage est plus sécurisé que le cryptage. Le déhashage est une éternelle procédure à cause de la protection unisens. La sécurité est un métier, et MD5 a prouvé qu'il était utile pour vos besoins personnels.

Conclusion :


Vous pouvez toujours aller visiter http://altert.family.free.fr/

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.