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
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
A voir également:
- Md5 : Mais comment fait il ??? oO!
- Md5 checksum - Télécharger - Web & Internet
- Md5 - Télécharger - Gestion de fichiers
- Md5 file - Télécharger - Gestion de fichiers
- Md5 en PHP ✓ - Forum PHP
- Decrypt md5 php ✓ - Forum PHP
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
3 déc. 2008 à 11:15
Salut,
Tu devrais trouver ton bonheur ici :
https://fr.wikipedia.org/wiki/MD5
Tu devrais trouver ton bonheur ici :
https://fr.wikipedia.org/wiki/MD5
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
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à... :-)
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à... :-)
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
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.
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.
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
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.
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.
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
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)
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)
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
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), ...
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
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 ;-)
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 ;-)
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
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.
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.
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
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 :-)
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 :-)
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
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 ?
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 ?
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
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).
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
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....
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....
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
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.
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.
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
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.
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.
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
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)
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)
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
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).
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).
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
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.
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.
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
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 ?
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 ?
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
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 ;-))
en quoi le sha1 serait plus long a casser que le md5,
sha1 = 160 bits
md5 = 128 bits
Je te laisse faire les calculs ;-))
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
3 déc. 2008 à 14:10
Et pour simplifier, chaque fois qu'on augmente d'un bit, on double le nombre de combinaisons...
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
3 déc. 2008 à 14:19
Salut,
Tu sais bien que je suis paresseux ;-))
Tu sais bien que je suis paresseux ;-))
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
3 déc. 2008 à 14:20
:-)