Md5 : Mais comment fait il ??? oO!

Fermé
Fricky42 Messages postés 466 Date d'inscription lundi 15 septembre 2008 Statut Membre Dernière intervention 27 mars 2012 - 3 déc. 2008 à 11:08
NHenry Messages postés 15164 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 27 novembre 2024 - 13 déc. 2015 à 16:35
Stravudjivian*,

Voila. Cela fait un petit moment que j'utilise la fonction md5 de php. Evidemment, vu que je n'aime pas manipuler des machins completement obscure, j'ai fait des recherches pour voir un peu comment il fonctionne... Bon, j'ai rien bité, ca reste en partie obscure pour moi. Cependant une enigme me hante l'esprit jour et nuit O.O!

Comment, mais comment, avec toute la logique du monde, un programme peut traduire toute chaine de 0 a x>32 caracteres comprenant des caracteres speciaux, en une chaine toujours egale a 32 caracteres de A-Z,a-z,0-9 ??

On est tous d'accord quil existe beaucoup plus de possibilite de chaines qui vont de 0 a 60 (au moins) caracteres comprenant les A, a, @, 0, etc...qu'une chaine de toujours 32 caracteres comprenant que du A,a,0

C'est raisonnement tout beta, mais c'est logique...

Voila, si quelqu'un aurait la gentillesse de m'expliquer car c'est un genre de torture pour moi ce machin =D.

Mici et bonne journee !

*Bonjour en rien du tout.
A voir également:

12 réponses

~Jean-Marc~ Messages postés 286 Date d'inscription mercredi 1 octobre 2003 Statut Membre Dernière intervention 8 décembre 2009 60
3 déc. 2008 à 11:15
Salut,

Tu devrais trouver ton bonheur ici :
https://fr.wikipedia.org/wiki/MD5
0
kilian Messages postés 8731 Date d'inscription vendredi 19 septembre 2003 Statut Modérateur Dernière intervention 20 août 2016 1 527
3 déc. 2008 à 11:18
Haha!

En fait le mystère n'est pas si..épais.
En réalité, un hash md5 n'est pas une chaine de caractère mais une valeur de 128 bits.

On a quatre entiers de 32 bits h1, h2, h3, h4, qui ont une valeur initiale et auxquels on ajoute des calculs, des calculs et encore des calculs.

A la fin, on va imprimer ces entiers sous forme hexadécimale (c'est pour ça que tu as des nombres et des lettres, mais les lettres n'iront pas plus loin que f).

Sous forme hexadécimale, un entier va produire 8 digits: xxxxxxxx
A la fin on va concaténer les représentations hexadécimales des 4 entiers, ce qui donnera 4 fois 8 digits. Et voilà... :-)
0
Fricky42 Messages postés 466 Date d'inscription lundi 15 septembre 2008 Statut Membre Dernière intervention 27 mars 2012 182
3 déc. 2008 à 11:25
Jean Marc >
Merci mais Wikipedia est la premiere chose que je fais avant google quand j'ai une interrogation =D. Mais j'avou avoir ete quelque peu largue par l'article...

Kilian >
Merci pour l'info. Cependant je ne comprend toujours pas ce que ca change. A la fin de l'operation, on se retrouve tout de meme avec une chaine de 32 caracteres. que se soit des bananes ou la concatenation des 4 int sous forme hexa.
Petite question :
Peut il y avoir plusieurs chaines ("papa est en haut" et "les donughts cest bon" par exemple) qui generent (au bout de l'operation) une meme chaine md5 ? Je ne pense pas, et c'est a partir de la que se base toute mon interrogation.

0
blux Messages postés 26498 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 28 novembre 2024 3 317
3 déc. 2008 à 11:32
Salut,

Peut il y avoir plusieurs chaines ("papa est en haut" et "les donughts cest bon" par exemple) qui generent (au bout de l'operation) une meme chaine md5 ? Je ne pense pas, et c'est a partir de la que se base toute mon interrogation.
On peut forcément puisqu'on travaille avec un résultat 'fini' (on n'a que 128 bits à notre disposition), et ça c'est déjà produit, cela s'appelle une collision...

Pour le reste, 32 caractères en hexa, ça fait la même chose que 128 bits : soit environ 3,4x10^38.
0
Dr Zoidberg Messages postés 529 Date d'inscription jeudi 28 juin 2007 Statut Membre Dernière intervention 12 juin 2015 100
3 déc. 2008 à 11:31
Salut,

j'ajouterais que MD5 représente donc 2^128 soit 3,4.10^38 possibilités ( équivaut aussi à 16^32 si on se base sur le représentation textuelle/hexa).
Donc effectivement le risque de télescopage n'est pas nul, mais assez peu probable dans la plus part des cas.
Et le but de MD5 comme les autres fonctions de hashage est de faire un 'résumé' des données d'origine afin de vérifier leur validité dans le cas d'un transféré, ou de valider un mot de passe mais en aucun cas de retrouver les données sources depuis le hash.
Si on traite un nombre de données très très élevé on peu choisir un autre type d'algo de hashage comme SHA qui travail sur 160bits (1,46.10^48 possibilités)
0
vous pouver me donner un exemple pratique de l'algorithme MD5??
0
NHenry Messages postés 15164 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 27 novembre 2024 345
13 déc. 2015 à 16:35
Contrôle d'intégrité de fichier, masquage de mot de passe (plus considéré comme assez sûr, on lui préfère SHA ou mieux), ...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 569
3 déc. 2008 à 11:34
Salut,

Peut il y avoir plusieurs chaines ("papa est en haut" et "les donughts cest bon" par exemple) qui generent (au bout de l'operation) une meme chaine md5 ?
md5 c'est une fonction de hachage comme tu l'as bien constater.
Vu qu'elle est sur 128 bits le risque de collisions est vraiement très très minimal, mais pas parfait.
Personnellement je ne vais pas chercher une colission pour le md5 ;-)

0
kilian Messages postés 8731 Date d'inscription vendredi 19 septembre 2003 Statut Modérateur Dernière intervention 20 août 2016 1 527
3 déc. 2008 à 11:34
A la fin de l'operation, on se retrouve tout de meme avec une chaine de 32 caracteres. que se soit des bananes ou la concatenation des 4 int sous forme hexa.

Oui. On reprend nos h1, h2, h3, h4, tous des entiers qui contiennent notre hash.
Comme je l'ai dit la représentation d'un entier en hexa prend 8 caractères.

Exemple si h1 = 0, ça donnera 00000000, si h1 = 15 ça donnera 0000000f
A la fin on va concaténer la représentation hexa de nos 4 entiers.
Ca va nous faire 4 entiers * 8 caractères = 32 caractères.

Peut il y avoir plusieurs chaines ("papa est en haut" et "les donughts cest bon" par exemple) qui generent (au bout de l'operation) une meme chaine md5 ?

Oui, je crois que c'est rare mais ça arrive. On appelle ça une collision.
0
Dr Zoidberg Messages postés 529 Date d'inscription jeudi 28 juin 2007 Statut Membre Dernière intervention 12 juin 2015 100
3 déc. 2008 à 11:43
On part d'un ensemble d'une infinité de possibilités de chaine de caractères différentes (et pas forcément des caractères d'ailleurs) que MD5 réduit à 3,4.10^38 possibilités, même si c'est grand, c'est fini.
Donc il y a une infinité de façon de générer des collisions -- même si c'est peu probable dans la pratique.
Et heureusement que ces collisions existent, sinon ça faudrait dir que l'algo de hash est réversible et c'est justement l'inverse qu'on veut -- afin par exemple de ne pas pouvoir déchiffrer un mot de passe crypté d'après son hash.
Et ca voudrait dire également que le nombre de possibilités de hash serait infini, donc leur taille serait indéfinie aussi -- ca serait un algo réversible et non destructeur , une compression en somme (ZIP ...).
En espérant avoir réussi à rester clair :-)
0
Fricky42 Messages postés 466 Date d'inscription lundi 15 septembre 2008 Statut Membre Dernière intervention 27 mars 2012 182
3 déc. 2008 à 11:58
Carrement, bah je te remercie.
Je vois mieux le sens du terme algo destructeur.

Allez, juste une petite derniere question pour rebondir sur ce que tu dit :

D'apres mes recherches le SHA1 serait plus secure que le md5.
L'algo est different, ok. Mais toujours en restant a un niveau tres beta :

la generation du SHA1 groupe 64 caracteres contre 32 pour le md5. Donc tres nettement moins de collisions. Cela ne permet pas de plus simplement trouver la bonne chaine d'origine via une methode bruteforce ?
0
Dr Zoidberg Messages postés 529 Date d'inscription jeudi 28 juin 2007 Statut Membre Dernière intervention 12 juin 2015 100
3 déc. 2008 à 12:30
Non car il y a beaucoup plus de possibilités à essayer, mais dans un cas comme dans l'autre c'est aussi une question de chance et de statistique : même avec un hash sur 512 bits, rien n'interdit de tomber sur le bon mdp dans les premiers essais même si c'est très peu probable. Et pour les collisions il y en aura toujours théoriquement le même nombre : une infinité (vu qu'il y a une infinité de possibilité de source).
0
Fricky42 Messages postés 466 Date d'inscription lundi 15 septembre 2008 Statut Membre Dernière intervention 27 mars 2012 182
3 déc. 2008 à 12:39
Une infinite oui. Mais la frequence differe.
disons X = nombre de combinaisons possible md5 et Y nombre de combinaisons sha1, Y etant beaucoup plus grand que X.

on imagine un programme qui genere a partir de la chaine 0 (jusqu'a l'infini) chaque hash.

en md5 il y aura theoriquement une collision toutes les X generations
en sha 1 toutes les Y generations.

Pour casser un hash quelque soit son type il n'y a que le bruteforce. Cependant en md5, lorsque la boucle aura trouve une correspondance, tu auras (theoriquement toujours) plus de chance de tomber sur un faux ami que sur la bonne origine comparé au hash sha1...

Mais je fais probablement erreur....
0
Dr Zoidberg Messages postés 529 Date d'inscription jeudi 28 juin 2007 Statut Membre Dernière intervention 12 juin 2015 100
3 déc. 2008 à 12:56
Dans le système c'est le hash qui est stocké, pas le MDP. Donc plusieurs MDP en clair peuvent en théorie être acceptés pour un même hash (en théorie car si le 1er mdp, celui voulu par l'utilisateur est sur 8 caractères, il n'y aura peut être des collisions qu' avec des chaines de plus de 10000 caractères ou avec des caractères non 'imprimables' ou ...). Je pense qu'en pratique (je pense car je ne suis pas spécialiste en cryptographie) les collisions sont assez négligeables dans ce sens, mais permettent tout de même l'irréversibilité de l'algo.
Il sera donc statistiquement plus long de trouver le premier mdp valable pour un hash en SHA qu'en MD5 vu que l'ensemble est plus grand.
0
blux Messages postés 26498 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 28 novembre 2024 3 317
3 déc. 2008 à 13:22
les collisions sont assez négligeables dans ce sens, mais permettent tout de même l'irréversibilité de l'algo.
Ce n'est pas parce les collisions sont négligeables qu'elles donnent un algo irréversible.

L'algorithme est par construction non-bijectif, puisque destructif d'une grande majorité de la chaine de départ.
0
Dr Zoidberg Messages postés 529 Date d'inscription jeudi 28 juin 2007 Statut Membre Dernière intervention 12 juin 2015 100 > blux Messages postés 26498 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 28 novembre 2024
3 déc. 2008 à 13:28
Ma phrase n'était effectivement pas claire.
Mais s'il n'y avait pas de collisions l'algo serait bijectif, ou je me trompe ? (un hash correspondrait a une et une seule chaine source)
0
blux Messages postés 26498 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 28 novembre 2024 3 317 > Dr Zoidberg Messages postés 529 Date d'inscription jeudi 28 juin 2007 Statut Membre Dernière intervention 12 juin 2015
3 déc. 2008 à 13:37
Je crains que tu ne te trompes :-)

A partir du moment où les données en sortie sont plus petites que les données en entrée, il y a forcément un moment où l'on perd de l'information. C'est à ce moment que la fonction devient non-injective (et par conséquent non-bijective).
0
Flachy Joe Messages postés 2103 Date d'inscription jeudi 16 septembre 2004 Statut Membre Dernière intervention 21 novembre 2023 260
3 déc. 2008 à 13:14
Il me semble que des chercheurs ont réussi à produire 2 chaînes de caractères donnant la même somme haché.
Ces deux chaînes avait des caractéristiques particulière, elles contenaient, si je ne m'abuse, des données de "bourrage" qui paraissaient aléatoires.
Dans la pratique, même si tu connais le mot de passe d'origine tu ne pourra pas construire une chaîne ayant le même hash. Il faudrait que tu fasse exprès que le premier contienne du bourrage pour pouvoir créer le second.

C'est pour ça que le hachage est aussi utilisé comme signature de message, si quelqu'un veux modifier le message, il faut qui crée un chaîne qui ait le même hachage, ce qui est techniquement impossible.
0
Fricky42 Messages postés 466 Date d'inscription lundi 15 septembre 2008 Statut Membre Dernière intervention 27 mars 2012 182
3 déc. 2008 à 13:59
D'accord, mais au passage j'ai une nouvelle question (quoi encore ??) :

en quoi le sha1 serait plus long a casser que le md5, dans les 2 cas il faudra faire du brute force, et par consequent une boucle qui hash puis compare.
Cette operation mettra autant de temps pour l'un que pour l'autre non ?
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 569
3 déc. 2008 à 14:03
Re,

en quoi le sha1 serait plus long a casser que le md5,
sha1 = 160 bits
md5 = 128 bits
Je te laisse faire les calculs ;-))
0
blux Messages postés 26498 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 28 novembre 2024 3 317
3 déc. 2008 à 14:10
Et pour simplifier, chaque fois qu'on augmente d'un bit, on double le nombre de combinaisons...
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 569 > blux Messages postés 26498 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 28 novembre 2024
3 déc. 2008 à 14:19
Salut,

Tu sais bien que je suis paresseux ;-))
0
blux Messages postés 26498 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 28 novembre 2024 3 317 > lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019
3 déc. 2008 à 14:20
:-)
0