Quelle est la différence entre md5 et sha1 dans cette situation?
on sait que
1. if ( md5(a) == md5(b) )
2. then ( md5(a.z) == md5(b.z) )
3. but ( md5(z.a) != md5(z.b) )
où les points concaténent les cordes.
EDIT - - -
ici vous pouvez trouver a
et b
:
http://www.mscs.dal.ca / ~selinger / md5collision /
consultez ces liens:
hexpaste.com/qzNCBRYb/1 - c'est a.md5(a)."kutykurutty"
hexpaste.com/mSXMl13A/1 - c'est b.md5(b)."kutykurutty"
ils partagent le même hachage md5, mais ils sont différents. Mais vous pouvez appeler ces chaînes a'
et b'
, parce qu'elles ont le même md5.
- - - modifier
ce qui se passe dans la deuxième rangée si nous changeons tous les md5 en sha1 ? So:
1. if ( sha1(c) == sha1(d) )
2. then ( sha1(c.z) ?= sha1(d.z) )
Je ne pouvais pas trouver deux cordes différentes avec le même sha1 , c'est pourquoi je demande ceci. Y a-t-il d'autres "règles" intéressantes à propos de sha1 ?
4 réponses
SHA1 se comportera exactement comme MD5 dans ce scénario.
les deux seules références que j'ai trouvées sont les suivantes -
- http://www.iaik.tugraz.at/content/research/krypto/sha1/MeaningfulCollisions.php
- http://www.schneier.com/blog/archives/2005/02/sha1_broken.html#c1654 (voir commentaire de David Schwartz)
de le site de L'IAIK -
noter que pour les paires de messages SHA-1 en collision (comme pour toutes les autres fonctions de hachage suivant un principe de conception similaire), il est toujours possible d'ajouter des suffixes aux deux messages tant qu'ils sont identiques.
Je ne pense pas que quelqu'un ait trouvé deux cordes contradictoires pour SHA1, donc c'est surtout une discussion académique. Mais d'après ce que j'ai compris, quand une collision est découverte, il devrait être possible de créer plusieurs autres collisions en utilisant cette propriété.
le premier énoncé ne sera valable que pour z
spécifiquement calculé pour a
et b
. Il est vrai que vous pouvez générer une collision MD5, mais ce n'est pas trivial - certains efforts de calcul est nécessaire et certainement vous ne pouvez pas vous attendre à ce que n'importe quel z
fera.
actuellement SHA-1 est considéré comme étant cryptographiquement sûr, ce qui signifie que personne n'a trouvé un moyen de générer des collisions SHA-1. Il n'a pas signifie qu'il est vraiment sûr et la génération de collision n'est pas possible - peut-être Il ya une vulnérabilité encore non découverte. Même s'il y a une vulnérabilité, il est très peu probable que les mêmes chaînes forment à la fois une collision MD5 et une collision SHA-1.
Sha1 n'est pas aussi facilement fissuré que md5, mais ils y ont trouvé des vulnérabilités en 2005 je crois.
votre exemple est erroné à mon avis. Laissez-moi vous montrer pourquoi:
md5(a) == md5(b)
quand les deux hachages sont identiques, les chaînes correspondantes doivent être identiques (cela pourrait être des collisions, mais ce n'est pas important dans ma thèse), donc nous aurons:
a = b
quand vous concaténez maintenant les deux cordes avec une corde z, vous aurez un.z = b.z et leurs MD5-hashes seront les mêmes, parce qu'ils ont la même chaîne de caractères
md5(a.z) == md5(b.z)
et le hachage md5 sera une troisième fois égal alors que les deux entrées de chaîne sont les mêmes
md5(z.a) == md5(z.b)
et c'est vrai pour md5 et tous les autres algorithmes de hachage alors qu'ils doivent être déterministe et sans effet secondaire.
votre exemple n'aura de sens que si z est une chaîne spéciale qui entraînera une collision. Et donc le comportement de md5 et sha1 sera exactement le même: La chaîne de collision ajoutée entraînera une collision, mais prepended sera différent hashs (mais il ya vraiment très faible probabilité que vous trouvez une chaîne de collision qui sera prependend et ajouté résultat d'une collision, mais aucun exemple n'a encore été trouvé dans la réalité) Vous n'avez pas trouvé thwo chaîne différente avec même sha1 parce que les collisions sont plus difficiles à trouver comme expliqué par les gens avant moi.