Date : 29/08/2005

MD5 : TÉLÉCHARGER UNE DISTRIB' LINUX

Alors aujourd'hui on part théorique et on finit par un peu de pratique :-) En piste…

MD5 : Qu'ès aquò?

Le MD5 (pour Message Digest 5) est un algorithme (comprenez "une suite d'instructions") de cryptage de données. Gné ? L'algorithme du MD5 a pour effet de transformer des blocs de données quelconques (chaînes de caractères, fichiers, etc…) en un hash (les anglophobes pourront se rabattre sur le mot "condensat") représentatif de ces données.

« Et… ça a quelle gueule un hash ? » Dans le cas du MD5, un hash corrrespond à 128 bits de données (donc 128 zéros ou un d'affilée) que l'on représente généralement sous la forme de 32 chiffres hexadécimaux (pour apprendre à compter en hexadécimal c'est par ici : article 2), du genre "74a89c745e3be4d69922647b0dc5f185".

Principe du hash MD5

L'interêt ? L'algorithme MD5 est conçu de façon à ce que le moindre changement d'octet dans les données qu'il traite ait pour conséquence un changement radical du hash obtenu en résultat. Mais attention, cela ne signifie pas qu'à un hash donné il ne correspond qu'un seul ensemble de données bien précis. Imaginons deux chaines de caractères (deux phrases quoi) quelconques totalement différentes. Bien que le nombre de chances pour que cela se produise soit infinitésimal, il est tout à fait possible que ces deux chaînes aient des hashs MD5 identiques. On parle alors de "collision complète" (puisque les deux hashs sont complètement identiques). Néanmoins nous allons voir qu'en pratique cette histoire de collision n'est que moyennement gênante…

MD5 : À quoi ça sert concrètement ?

Les deux grandes applications de l'algorithme MD5 sont le cryptage des mots de passe et la vérification de l'intégrité des fichiers.

Le cryptage des mots de passe

Sachez que, chaque fois que vous vous inscrivez quelque part (site web, application, etc…) et que vous spécifiez un mot de passe, celui-ci est stocké dans une structure de données (base de données, fichier…). Eh oui, il faut bien le stocker quelque part pour pouvoir le vérifier. Mais bon, comme toute donnée, toutes les protections qu'on pourra lui coller s'avèreront à long terme inefficaces, et il y aura toujours quelqu'un pour piquer le fichier en question. Si votre mot de passe est dedans « en clair » (c'est-à-dire de façon non cryptée), la personne en question connaîtra immédiatement votre mot de passe. Gênant non ?

La solution consiste donc à stocker non pas le mot de passe lui-même mais son hash (pas forcément son hash en MD5 d'ailleurs). Le hash n'étant pas mathématiquement réversible (les algorithmes de hash ont été conçus pour coder les données dans un seul sens), la personne ne pourra pas déterminer votre mot de passe (enfin presque, voir plus bas). Elle ne pourra que s'évertuer à trouver une collision complète, et ça c'est déjà bien pour votre sécurité (non, je ne fais pas campagne pour les élections présidentielles).

« Mais alors, si on ne peut pas retrouver directement mon mot de passe, comment est-il reconnu comme étant correct lorsque je l'entre moi-même ? » Tout simplement en recalculant le MD5 de ce que vous avez entré. Si les hashs correspondent, on peut supposer que le mot de passe est correct. Le MD5 d'un bloc de données n'est pas généré aléatoirement et reste constant quels que soient le lieu et la date où ils sont calculés.

Stockage des mots de passe

La vérification de l'intégrité des fichiers

Pour comprendre cette application, il suffit de partir d'une considération simple : puisqu'il y a vraiment très très peu de chances que deux fichiers différents aient des hashs MD5 identiques (surtout s'ils ont la même taille), on peut utiliser l'algorithme MD5 pour s'assurer qu'un fichier n'a pas été altéré lors d'un transfert (par internet par exemple) : on calcule le hash MD5 du fichier en question avant la transmission. Une fois le fichier arrivé, on recalcule ce hash et on le compare à celui calculé précédemment : s'ils sont identiques (la corruption de fichier étant un phénomène plus qu'aléatoire), on peut considérer que l'intégrité de ce fichier est intacte et donc que le transfert a parfaitement réussi. Cumulé au contrôle de la taille du fichier en octets, ce test est le plus fiable. La seule méthode plus fiable consiste à comparer octet par octet les deux fichiers, ce qui dans le cadre d'un long transfert n'est pas réalisable. On peut également contrôler avec d'autres types de hash (SHA-1, SHA-256, MD4, …).

Verification de l'integrite des fichiers

MD5 : côté P2P

Ce principe ne vous dit vraiment rien ? Pourtant vous l'utilisez très souvent si vous êtes amateurs de P2P puisque c'est la méthode employée pour repérer un fichier n'importe où sur un réseau alors que les différentes personnes qui le partagent en ont changé le nom : on considère que le couple taille en octets + hash est représentatif d'un fichier unique sur tout le réseau. Regardez par exemple ce lien (bidon) pour le réseau eDonkey :

ed2k://|file|Fichier_a_la_con.txt|1048576|74a89c745e3be4d69922647b0dc5f185|/

On commence par ed2k://|file| pour indiquer qu'il s'agit d'un lien vers un fichier ("file" en anglais) sur le réseau ed2k.

On a ensuite le nom du fichier (Fichier_a_la_con.txt), que n'importe qui peut changer et qui n'est donc pas représentatif du fichier voulu ; c'est simplement le nom avec lequel il sera enregistré sur votre disque dur après téléchargement.

Vient alors la taille du fichier en octets (ici 1 Mo). Pas encore suffisant pour distinguer un fichier de la multitude qui traîne sur le réseau.

Et en dernier on a le hash MD5 du fichier en question. On peut alors identifier formellement le fichier (à 99,99 %), même si son nom a été changé :-)

MD5 : côté chaînes de caractères

Pour mieux vous faire comprendre tout cela, voici un petit formulaire qui vous permettra d'obtenir le hash MD5 de ce que vous entrerez dans le champ (phrase, mot…). "Amusez-vous" (ouais je sais, ça vaut pas un bon Quake) à ne changer qu'une lettre de votre phrase et constatez comme le hash obtenu est radicalement différent.



Exemple : faites votre propre MD5    

MD5 : côté fichiers

Bon ça, c'était pour les chaînes de caractères. «Et pour les fichiers ?» me direz-vous. Pour cela, nous allons utiliser un petit utilitaire appelé fsum (site officiel). À télécharger ici, celui-ci s'utilise dans cette console que vous exécrez tant : la ligne de commande.

Installation :

Pour vérifier votre installation, ouvrez une "Invite de commandes" (Démarrer > Programmes > Accessoires > Invite de commandes ou encore Démarrer > Exécuter, tapez cmd et faites Entrée). Tapez ensuite fsum et appuyez sur Entrée. Vous devez obtenir ceci :

Fsum

Utilisation :

NB : L'utilisation du prompt DOS est détaillée dans l'article 6 : Les principales commandes MS-DOS

Le reste est simple… si vous connaissez les commandes MS-DOS : déplacez-vous dans le dossier qui vous convient grâce à la commande "cd", assurez-vous de son contenu par un "dir", etc…

Par défaut, fsum utilise l'algorithme MD5 pour hasher un ou plusieurs fichiers (les amateurs du prompt pourront s'amuser à rediriger la sortie vers un fichier texte) selon la syntaxe suivante : fsum fichier

Vous pouvez changer l'algorithme utilisé en incluant les options (décrites dans l'aide qui s'affiche en tapant fsum) entre "fsum" et le(s) fichier(s) en question. Attention : l'algorithme peut mettre un peu de temps à s'exécuter en fonction de la puissance de votre machine et de la taille du fichier à hasher.

Fsum

MD5 : côté mot de passe ?

J'ai émis tout à l'heure une petite réserve concernant la non-reversibilité du MD5, et vous-même vous vous êtes peut-être demandé le sens du cas n°3 sur l'illustration "Le stockage des mots de passe". Voyons les points faibles du MD5 :

Tout d'abord, l'algorithme MD5 n'empêche pas les "collisions" : pour un hash MD5 donné, il se peut qu'il n'y ait qu'un seul mot de passe correspondant, composé de 54 caractères très variés et donc très difficile à calculer ; mais il se peut aussi qu'un mot de passe de 5 lettres (donc très facile à calculer) ait le même hash MD5, ce qui facilite grandement les recherches d'un mot de passe qui "tromperait" le script chargé de vérifier le mot de passe.

Avec ou sans cette constatation, on peut toujours trouver le mot de passe correspondant à un hash MD5 par bruteforce. Brutequoi ? "Bruteforce". Comme son nom l'indique, cette méthode n'est pas la plus élégante pour casser une protection, elle est même la plus sommaire. Imaginez que vous vouliez casser la protection offerte par un cadenas à code sur le casier de votre collègue de bureau (roh c'est pô bien) : vous allez essayez toutes les combinaisons possibles une par une jusqu'à ce que le cadenas s'ouvre : 000, 001, 002, etc.

Même principe ici : on va composer tous les mots de passe possibles et inimaginables puis générer leur hash MD5 et les comparer au hash voulu jusqu'à ce qu'on trouve deux hashs égaux : le plus souvent, on tombe sur le mot de passe que la personne avait défini. On peut également tomber sur une collision (un mot de passe différent générant le même hash). Peu importe, le mot de passe trouvé sera accepté. Dans le cas des mots de passe, on peut les trouver plus rapidement si on dispose d'informations précises (genre « le mot de passe se termine par "ne" » ou plus précieux encore « le mot de passe est composé de 8 caractères ») ou en utilisant un bruteforce par dictionnaire, c'est-à-dire un bruteforce qui piocherait ses mots de passe à tester dans un fichier contenant les mots de passe les plus utilisés ou les mots les plus courants.

Mot de passe solide

Mais alors, quid de la sécurité des millions de mots de passe à travers le monde stockés selon un principe similaire ? Pas de panique, songez à l'exemple du cadenas. Ça ne va pas vous prendre un peu de temps de vous taper les 1000 combinaisons une à une ? Et c'est là que l'on peut souffler un peu : à moins de disposer d'un super-ordinateur ou mieux encore d'un système de traitement parallélisé (c'est-à-dire plusieurs ordinateurs faisant chacun une petite partie du boulot), les calculs pour casser un mot de passe peuvent prendre des centaines d'années (cela dépend à la fois de la puissance de calcul à votre disposition et de l'alphabet [ensemble de caractères] que vous choisissez pour composer les mots de passe). Par contre, certains mots de passe sont cassés quasi-instantanément. Pour citer un exécutable que vous allez bientôt manipuler :


<<Warning>> Session stopped in less than 10ms,
<<Warning>> not enough for a statistical report.

En clair : « cracké instantanément » !! Vos frissons vous regagnent n'est-ce pas ? Tout ceci nous amène à la notion de « mot de passe solide ». Non, pas un mot de passe écrit avec des parpaings ! Un mot de passe solide est un mot de passe qui se doit de résister plusieurs heures au moins à une attaque type bruteforce. Ou du moins plus de 2 secondes à cette même attaque mais menée par le super-ordinateur-de-la-NSA-en-2040 :-). Concrètement, les mots de passe les plus vite cassés sont courts et n'utilisent que des lettres parmi les 26 de l'alphabet romain. Donc, lorsque vous inventerez votre prochain mot de passe, songez à trouver un truc :

Si malgré cela l'angoisse d'avoir un mot de passe en pâte à modeler ne vous lâche pas, vous pouvez encore tester votre mot de passe.

Méthode GData

GData est un site qui propose une base de données mettant en rapport des hashs MD5 et des mots / expressions entrées par les utilisateurs ; on y trouve notamment un formulaire permettant (peut-être) de retourner la chaîne de caractères correspondant au hash MD5 que vous y aurez entré. On a donc ici l'utilisation pure et simple de la méthode "dictionnaire". Utilisez le script plus haut pour générer le hash MD5 du mot de passe que vous souhaitez tester, puis soumettez-le à ce formulaire. Si GData vous affiche votre mot de passe en toutes lettres, cela signifie que ce mot de passe est complètement POURRI et qu'il vaudrait mieux que vous le changiez…

Méthode MDCrack

Nous entrons ici dans le bruteforce pur. MDCrack (site officiel) permet sur une machine récente de tester 5 millions de mots de passe par seconde. Le programme en lui-même est légal mais veillez à ce que l'utilisation que vous en faîtes le soit aussi. Téléchargez le programme lui-même ici et installez-le de la même manière que vous avez installé fsum (copiez le fichier mdcrack.exe dans le bon dossier).

Tapez mdcrack dans une invite de commande pour vous assurer que vous l'avez bien installé et pour afficher le mode d'emploi par la même occasion. Vous devez voir ceci :

MDCrack => pi

Par défaut, les hashs sont calculés en MD5. Les diverses options servent à indiquer au programme que vous avez des indices sur le mot de passe à trouver : il commence par…, se termine par…, est composé de tant de caractères parmi tel ensemble, etc… Nous allons traiter quelques cas simples qui ne vous obligeront pas à mobiliser votre PC pendant 10 heures d'affilée. La syntaxe de base (donc sans indice) est : mdcrack hash_a_renverser

Premier essai : mdcrack 72ab8af56bddab33b269c5964b26620a. Vous devriez avoir cela immédiatement :

Le hash MD5 que je vous ai fourni correspondait donc au mot "pi", collision qui a été trouvée instantanément. Plus précisemment au bout de 574 hashs MD5 : avec son alphabet par défaut qui contient 62 caractères, MDCrack a réalisé : 62 hashs pour les mots à 1 caractère + 8×62 hashs pour les mots à deux caractères finissant par a, b, c … g, h + 16 hashs pour ai, bi, ci, … oi,pi). Pas vraiment un gros boulot pour une machine moderne.

Autre exemple : mdcrack b61705f85f6a5787b3797b783d692360

MDCrack => flood

Maintenant, je génère le MD5 de "born4being3v1linth1sw0rld". Remarquez qu'il n'y a pas de caractères spéciaux, que des chiffres et des lettres (présenté par Patrice Laff… euh non c'est pas ça). J'obtiens d8344f6ae19522a80c7049f70e688e4e. Si vous trouvez une collision rapidement, contactez-moi :)). Ah, au fait, pour interrompre un programme MS-DOS, faites Ctrl+C dans la console.

Un peu de (vraie) pratique : télécharger une distribution Linux

Pourquoi ?

Cette application pratique du MD5 ne vous intéressera que si vous souhaitez télécharger une distribution Linux proprement. Difficile à mettre en oeuvre si vous ne savez pas encore ce qu'est Linux. Ce que le MD5 vient faire là-dedans ? Comme les distribs Linux sont le plus souvent à télécharger (ce qui augmente le risque de corruption) et que les programmes linux sont très sensibles à la corruption des données, il est prudent de faire un hash MD5 des images CDs/DVDs ainsi téléchargées. Nous partirons sur la base suivante : un bon ami à vous vous a recommandé de tester la distribution Linux Live-CD "Kaella".

Comment télécharger ?

Un petit tour sur Google vous permettra de dénicher vite fait le site officiel et sa rubrique téléchargement. Il vaut généralement mieux utiliser un client FTP comme FileZilla (possibilité de mettre le téléchargement en pause et corruption inexistante en adoptant le bon mode de téléchargement).

Choisissez le miroir FTP (comprenez "le serveur FTP") le plus proche de chez vous. Prenons l'exemple du miroir "Ecole des Mines de Nancy" : faites un clic droit sur le lien "ftp" et copier l'adresse du lien / du raccourci. Démarrez votre client FTP, collez (ctrl+V) l'adresse obtenue précédemment dans le champ "Hôte" / "Adresse", choisissez le port 21, mettez "anonymous" comme nom d'utilisateur, mettez une adresse e-mail comme mot de passe et connectez-vous (ce genre de serveur public accepte toujours les connexions en "anonyme").

Les distributions Linux sont fournies sous forme d'image CD, une sorte de photographie de l'ensemble des données présentes sur le disque sans distinction des fichiers et dossiers qui en forme le contenu. Il n'y a donc qu'un gros fichier à charger (enfin, parce que la Kaella se présente sous la forme d'un seul CD bootable) avec une extension *.iso + le fichier ayant le même nom avec une extension *.iso.md5 : ce petit fichier texte contient le hash md5 de l'image que nous allons télécharger.

Configurez votre client FTP de manière à transférer en mode binaire puis lancez le téléchargement des deux fichiers en question (ici : Kaella-Knoppix_Linux_Azur_2.0.1.iso et Kaella-Knoppix_Linux_Azur_2.0.1.iso.md5).

Comment vérifier l'intégrité ?

Une fois les deux fichiers téléchargés, ouvrez le *.iso.md5 avec le bloc-note, ouvrez une invite de commande, veillez à ce que fsum (ou md5sum, autre utilitaire limité au hash MD5) soit installé comme expliqué plus haut, rendez-vous dans le bon dossier grâce à la commande cd et faites fsum Kaella-Knoppix_Linux_Azur_2.0.1.iso. Comparez le contenu du fichier et la sortie de fsum. Si les hashs sont identiques : félicitations, vous avez téléchargé votre image CD Linux sans altération. Sinon il vous faut réiterer le téléchargement.

hashs identiques
Ici, les hashs sont identiques, le téléchargement a réussi.

Comment graver ?

Nous allons désormais graver cette même image en utilisant le programme Burnatonce (gratuit pour une utilisation non-commerciale), à télécharger sur le site officiel. Installez et démarrez Burnatonce puis faites Fichier > Charger une nouvelle image > choisissez l'ISO que vous avez téléchargé et lancez la gravure pour obtenir votre CD Linux tout beau tout prêt à booter.

Burnatonce

<< Article précédent      Article suivant >>

↑      Page d'accueil

Notre site accueille 600 membres qui ont posté pas moins de 4772 messages dans 544 topics : - )
Notre dernier membre inscrit est jajaja.
Un seul connecté : zbajzm.
Jumper :
Sauf mention contraire, les articles sont sous licence by-nc-sa. Les images appartiennent à leurs propriétaires respectifs.