Bon allez puisque pour une fois je vais pouvoir vous expliquez quelque chose, j'en profite
:
Ce dont parle Guepi c'est l'attaque Rainbow Table. Elle n'exploite en aucun cas une faille des algo de hashage, mais exploite l'idée du comprimis temps/mémoire. Le but de l'attaque est de trouver un password générant un hash donné (i.e. on choppe le hash dans la DB mysql, et on récup un password donnant le même hash)
On part du constat que :
- générer tt les password et calculer les hashs correspondant : prend trop de temps
- stocker tous les hashs possibles avec un mdp associé : prend trop de place
=> il faut un comprimis temps/mémoire.
Comment qu'on fait ?
On va calculer UNE FOIS POUR TOUTE cette table-ci, où
" --> hx " : résultat de l'algo de hashage
" => y " : résultat d'une fonction de réduction (R1, R2 ou R3, selon la colonne), c-a-d une fonction à caractère aléatoire qui prend en entrée un hashé (genre de fct inverse d'une fct de hashage, mais ça veut pas dire que Reduction(hash(x)) = x hein ^^ ce serait trop facile
)
Ci-dessous le nombres sont des caractères en clair, et les hx des hashés :
0 --> h0 => 6 --> h6 => 3 --> h3 => 9
2 --> h2 => 3 --> h3 => 5 --> h5 => 6
4 --> h4 => 8 --> h8 => 1 --> h1 => 1
Cette table est volontairement petite pour l'exemple, mais dans la réalité elle est très grande et prend énormément de temps à calculer, mais on ne fait ce calcul que une fois.
On ne peut évidemment pas tout stocker, on ne stocke donc que la première et la dernière colonne (compromis mémoire).
Ici on stocke donc :
0 : 9
2 : 6
4 : 1
Ensuite qu'est ce qu'on fait ?
Donc comme annoncé on part d'un hashé, disons hx et on cherche un password qui produit le hashé hx.
1) On calcule la réduction R3 de hx
2) Le résultat est-il dans la dernière colonne ?
- oui : on recalcule la chaine à partir de son point d'entrée et on obtiendra la chaine initiale.
Ex: si la réduction H3 de hx donne 9, on repart de 0 et on calcule : 0 --> h0 => 6 --> h6 => 3. On obtient le password "3" qui une fois hashé donne h3 = hx. Notez qu'on a du calculer qu'une seule ligne de la table (compromis temps)
- non : On applique R2 puis hash() puis R3 à notre hashé hx. Le résultat est-il dans la dernière colonne ?
- oui : on recalcule la chaine à partir du début
- non : on lui applique R1 puis hash() puis R2 puis hash() puis R3
etc.
Si on ne trouve aucun résultat c'est que la table n'est pas suffisamment grande.
Des tables de ce genre sont disponibles sur internet (cf. ce qu'a dit guepi j'imagine).
Voilà dsl pour le hors sujet
(je le ferai plus
)
Si certains sont intéresés mais n'ont rien compris à mon explication je suis dispo en MP