Вы находитесь на странице: 1из 6

Mieux coder Rainbow tables

http://www.mieuxcoder.com/2008/01/02/rainbow-tables/

Mieux coder
De lart de crer de meilleurs logiciels

Accueil auteur FlexSpy 1.2 Stocker des mots de passe en 2008 02 01 2008

Rainbow tables
Publi par aranud dans Dveloppement, Scurit

Intrigus par la rapidit avec laquelle une attaque par table arc-en-ciel (Rainbow table) permet de cracker lempreinte (hash) dun mot de passe, jai dcid de me plonger dans le sujet pour en savoir plus et comprendre le truc . Voici un petit rsum de mon voyage au pays des Rainbow tables. Tout dabord commenons par le commencement Mthode numro 1 - La force brute Toutes les fonctions de hachage communment utilises sont telles quil nexiste pas de fonction inverse. Pour cracker une empreinte (hash), lide la plus simple est donc de prendre tous les mots de passes possibles, de calculer pour chacun son empreinte, et de la comparer lempreinte que lon veut cracker. Si les deux empreintes sont identiques, on a trouv le mot de passe, sinon on continue. Empreinte recherche : a7df33 aaaa => hachage => 6d8c33Non, ce nest pas celui que lon recherche. Au suivant ! aaab => hachage => 54cd12Au suivant ! aaac => hachage => af5a94Au suivant ! aaad => hachage => a7df33Gagn !! le mot de passe est aaad Le problme avec cette mthode cest que ca peut vite savrer assez long. Sur un PC moderne, il faut 8 10 jours de calcul en moyenne pour casser un mot de passe de 8 caractres alphanumrique (minuscules uniquement). Mthode numro 2 - Dictionnaire dempreintes Comme toujours en informatique, on peut aller plus vite, au prix dune plus grande consommation mmoire. En effet, pourquoi ne pas calculer lempreinte de tous les mots de passe possibles, puis stocker le tout dans un fichier ? Ensuite, pour cracker une empreinte, il suffit de chercher dans le fichier lempreinte et de lire le mot de passe associ. Empreinte recherche: a7df33 Dictionnaire: aaaa 6d8c33 aaab 54cd12 aaac af5a94

1 of 6

16/04/2013 1:30 PM

Mieux coder Rainbow tables

http://www.mieuxcoder.com/2008/01/02/rainbow-tables/

aaad a7df33 zzzz 8d6bc7 Le problme dans ce cas, cest la taille du fichier. Une empreinte SHA-1 est compose de 20 octets, donc le fichier contenant les empreintes de tous les mots de passe de 8 caractres alphanumriques (minuscules uniquement) pse dj 50.000 Go, soit 100 disques durs de 500 Go !! Comptez 2000 disques de 500 Go pour stocker le dictionnaire des empreintes des mots de passe de 8 caractres alphanumriques (minuscules et majuscules). Mthode numro 3 - Rainbow tables Les tables arc-en-ciel essayent de concilier taille de fichier et temps de calcul raisonnable. Une attaque par Rainbow table (table arc-en ciel) se droule en 2 tapes. Il faut tout dabord gnrer une table, puis cracker une ou plusieurs empreintes laide de cette table.
Gnration de la table

Toute lastuce des Rainbow tables consiste calculer partir dune empreinte, un mot de passe. Attention, pas LE mot de passe qui correspond lempreinte (une telle fonction nexiste pas), mais UN mot de passe. On dit que lon rduit lempreinte. La seule chose que lon demande cette fonction de rduction cest dtre cohrente, cest--dire de toujours retourner le mme mot de passe quand on lui donne la mme empreinte en paramtre. Le principe de gnration dune Rainbow table est donc le suivant: On part dun mot de passe, on calcule son empreinte puis on calcule un nouveau mot de passe partir de lempreinte, on calcule lempreinte de ce mot de passe, et on rpte lopration un certain nombre de fois. Ensuite on stocke dans la table le mot de passe initial et lempreinte finale.

Puis on recommence le processus. On choisit un nouveau mot de passe, et on construit une nouvelle chaine.

Voil ! Nous venons de gnrer une Rainbow table contenant 2 lignes o chaque ligne reprsente une chaine de 4 mots de passe (chaine de longueur 4).
Utilisation de la table pour cracker des empreintes

Voyons maintenant comment utiliser cette Rainbow table pour cracker des empreintes.

2 of 6

16/04/2013 1:30 PM

Mieux coder Rainbow tables

http://www.mieuxcoder.com/2008/01/02/rainbow-tables/

Commenons par le plus facile : essayons de cracker lempreinte 269c241b . Cette empreinte figure directement dans la table, la seconde ligne, et est associe avec le mot de passe qwer . On sait donc que le mot de passe qui correspond cette empreinte est le 4me de la chaine. Malheureusement, on ne la pas stock dans la table. Nous allons donc rgnrer la chaine comme lors de la cration de la Rainbow table. On prend donc le mot de passe initial, on le fait passer dans la fonction de hachage, ce qui donne 05db7a98. Ensuite on fait passer cette empreinte dans la mme fonction de rduction que celle qui a servit gnrer la table. Elle retourne donc le 2me mot de passe de la chaine (jufx ) que lon hache puis rduit pour trouver le 3me mot de passe (sgkj), que lon hache puis rduit pour donner le 4me mot de passe: omhf . Bingo ! Pour tre sur de nous, on hache omhf , ce qui donne 26c241b . Re-bingo !! Nous avons crack lempreinte 26c241b : le mot de passe est omhf . Essayons maintenant de cracker lempreinte 9d4e1e23 : Pas de chance cette fois, cette empreinte ne figure pas dans la table. La partie nest pas perdue pour autant ! Essayons de calculer une autre empreinte partir de 9d4e1e23 : Un appel la fonction de rduction nous donne swdv , qui si on le passe la fonction de hachage renvoie 4457806c . Oh surprise cette empreinte figure dans la table la 1re ligne. Prenons donc le mot de passe initial aaaa , et comme pour le premier cas, reconstituons la chaine : 2 coups de hachage/rduction nous donnent le mot de passe xccd qui une fois pass au hachoir donne 9d4e1e23 . Mission accomplie. Le mot de passe correspondant notre empreinte est xccd . Un dernier pour la route : 05db7a98 : 1. 2. 3. 4. Lempreinte ne figure pas dans la table. Passons au plan B reduce(hash(05db7a98)) => 3caa59a1. Qui ne figure pas non plus dans la table. Recommenons. reduce(hash(3caa59a1)) => a986fc2c. Encore perdu. Recommenons. reduce(hash(a986fc2c)) => 269c241b. Qui figure sur dans la table, la 1re ligne. De plus comme nous avons tourn 3 fois pour trouver, et que la table contient des chaines de longueur 4, le mot de passe recherch est le 1er de la chaine. 5. hash(qwer) => 05db7a98. Cest gagn ! Pour stocker 100 millions de mots de passe, il suffit donc par exemple de gnrer une Rainbow table contenant 100.000 lignes avec des chaines de longueur 1.000. On stocke donc dans un fichier de 2 Mo une table qui pserait 2 Go dans le cas dun simple dictionnaire si on a de la chance et pas de collision! Tout cela est trop un peu trop simple Car en pratique, les fonctions de rductions provoquent des collisions. Une collision survient quand la fonction de rduction retourne le mme mot de passe pour deux empreintes diffrentes. Cela survient forcement car il y a toujours plus dempreintes possibles que de mots de passes possibles. Nombres de mots de passe de 8 caractres alphanumriques (26+26+10)^8 = 52^8 = 510^13 Nombres dempreintes SHA-1 (160 bits) 2^160 = 10^4 Reprenons lexemple prcdent et admettons que nous nayons pas eu de chance en ce dbut danne 2008. Cela donnerait peu prs cela:

3 of 6

16/04/2013 1:30 PM

Mieux coder Rainbow tables

http://www.mieuxcoder.com/2008/01/02/rainbow-tables/

La collision se produit lors de la rduction de 05db7a98. La fonction retourne xccd , comme pour lempreinte 4a388ce4. Rsultat : au lieu de contenir 8 mots de passe distincts, notre table nen contient que 6. Nous avons des chaines qui sont dupliques partir de la collision (xccd => swdv). Pour diminuer cet effet indsirable, les Rainbow Tables utilisent non pas une mais plusieurs fonctions de rduction. En fait, il y a une fonction de rduction diffrente par colonne . Voici donc le schma de gnration dune Rainbow table :

Cette fois, si une collision se produit, on ne se retrouve pas avec des chaines dupliques car mme si la fonction de rduction 1 retourne uibf pour lempreinte 05db7a98, en haut on passe ensuite la fonction de rduction 3, et en bas la fonction de rduction 2, et donc au lieu davoir la chaine duplique jusqu la fin, on a juste un mot de passe dupliqu.

4 of 6

16/04/2013 1:30 PM

Mieux coder Rainbow tables

http://www.mieuxcoder.com/2008/01/02/rainbow-tables/

Voil donc do ces tables tirent leur nom de tables en arc-en-ciel

Evidemment dans le cas o on na vraiment pas de chance, on peut tomber sur une collision dans la mme colonne. En pratique, ce cas narrive que peu frquemment avec de longues chaines. Si vous voulez aller encore un peu plus loin, vous pouvez regarder le code source dun petit programme Java que jai crit pour loccasion qui gnre des Rainbow tables pour casser les empreintes SHA-1 de mots de passe de 4 caractres alphanumriques (minuscules uniquement). Tlcharger la dmo et les sources Java.
Ce bulletin a t publi le Mercredi 2 janvier 2008 0:23 et est class dans Dveloppement, ScuritVous pouvez suivre les rponses ce bulletin avec le fil RSS 2.0. Vous pouvez rpondre, ou faire un rtro-lien depuis votre site.

Rpondre
Nom (obligatoire) Adresse ml (ne sera pas publi) (obligatoire) Site

5 of 6

16/04/2013 1:30 PM

Mieux coder Rainbow tables

http://www.mieuxcoder.com/2008/01/02/rainbow-tables/

Type the two words:

Propuls par WordPress, Mandigo theme by tom. Bulletins (RSS) et Commentaires (RSS).

6 of 6

16/04/2013 1:30 PM

Вам также может понравиться