2010-05-31 18 views
3

On sait queY a-t-il une différence entre md5 et sha1 dans cette situation?

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éner les chaînes.

EDIT ---

Vous pouvez trouver ici a et b:
http://www.mscs.dal.ca/~selinger/md5collision/

Vérifiez ces liens:
hexpaste.com/qzNCBRYb/1 - c'est a.md5(a)."kutykurutty"
hexpaste.com/mSXMl13A/1 - c'est b.md5(b)."kutykurutty"

Ils partager le même hachage MD5, mais ils sont différents. Mais vous pouvez appeler ces chaînes a' et b', car ils ont le même md5.

--- EDIT

Que se passe dans la deuxième rangée si nous changeons tous les md5 à SHA1? Alors:

1. if (sha1(c) == sha1(d) ) 
2. then (sha1(c.z) ?= sha1(d.z)) 

Je ne pouvais pas trouver deux chaînes différentes avec la même SHA1, c'est la raison pour laquelle je vous pose cette question. Y a-t-il d'autres "règles" intéressantes à propos de sha1?

Répondre

1

Les deux seules références que j'ai trouvé sont les suivantes -

  1. http://www.iaik.tugraz.at/content/research/krypto/sha1/MeaningfulCollisions.php
  2. http://www.schneier.com/blog/archives/2005/02/sha1_broken.html#c1654 (Voir commentaire de David Schwartz)

Depuis le site Web IAIK -

Notez que pour entrer en collision SHA-1 paires de messages (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 tout le monde a trouvé deux chaînes qui entrent en collision pour SHA1, c'est donc la plupart du temps une discussion académique. Mais d'après ce que je comprends, quand une collision est découverte, il devrait être possible de créer plusieurs autres collisions en utilisant cette propriété.

1

La première déclaration ne sera vraie que pour z très spécifique, calculée spécifiquement pour a et b. Il est vrai que vous pouvez générer une collision MD5, mais ce n'est pas trivial - un effort de calcul est nécessaire et certainement vous ne pouvez pas attendre que z fera l'affaire.

Actuellement, SHA-1 est censé être sécurisé par des moyens cryptographiques, ce qui signifie que personne n'a trouvé de moyen de générer des collisions SHA-1. Cela ne veut pas dire que c'est vraiment sécurisé et que la génération de collision n'est pas possible - peut-être y a-t-il une vulnérabilité non encore découverte. Même s'il existe une vulnérabilité, il est hautement improbable que les mêmes chaînes forment à la fois une collision MD5 et une collision SHA-1.

+0

En fait, tout z fera l'affaire. J'ai trouvé a et b sur ce site: http://www.mscs.dal.ca/~selinger/md5collision/ Si vous mettez quelque chose de même après ces "chaînes", vous finirez avec le même md5. Ma question ne concerne pas la sécurité, je suis simplement curieux. Cochez ces cases: http://hexpaste.com/qzNCBRYb/1 http: // hexpaste.com/mSXMl13A/1 Btw: Je parle de différentes chaînes (a, b et c, d). – Vili

+0

@Vili: Je vois, je ne savais pas que les collisions sont si mauvaises pour MD5. Quoi qu'il en soit SHA1 est considéré comme sûr, ce qui implique que la génération de collision est si difficile que personne ne peut l'essayer dans un délai raisonnable. – sharptooth

0

Sha1 n'est pas aussi facile à craquer que md5, mais ils ont trouvé quelques vulnérabilités en retour en 2005 je crois. Dans ce scénario, SHA1 se comportera exactement comme MD5 dans le scénario suivant:

+0

'un article, écrit avec John Kelsey, qui décrit un algorithme pour trouver des secondes pré-images avec SHA-1 - une technique qui généralise à presque toutes les autres fonctions de hachage - en 2^106 calculs: beaucoup moins que les 2^160 calculs pour la force brute. ' –

+0

Ma question ne concerne pas cracker sha1, c'est à peu près ça: sont-ils égaux: sha1 (c.z), sha1 (d.z) si sha1 (c) == sha1 (d)? – Vili

0

Votre exemple est faux à mon avis. Permettez-moi de vous montrer pourquoi:

md5(a) == md5(b) 

Lorsque les deux hash sont les mêmes, les chaînes correspondantes doivent être identiques (cela pourrait être des collisions, mais ce n'est pas important dans ma thèse), nous aurons donc:

a = b 

Lorsque vous concaténer maintenant les deux chaînes avec une chaîne z, vous aurez az = bz et leurs md5-hash seront les mêmes, parce qu'ils ont la même chaîne d'entrée

md5(a.z) == md5(b.z) 

et le md5-hachage une troisième fois être égal alors que les deux entrées de chaîne sont les mêmes

md5(z.a) == md5(z.b) 

Et cela est vrai pour md5 et tout autre algorithme de hachage alors qu'ils doivent être déterministe et côté effet libre. Donc, votre exemple n'aura de sens que si z est une chaîne spéciale qui entraînera une collision. Le comportement de md5 et sha1 sera donc exactement le même: La chaîne de collision ajoutée entraînera une collision, mais il y aura des hachages différents (mais il y a vraiment une très faible probabilité que vous trouviez une chaîne de collision qui sera Vous n'avez trouvé que deux chaînes différentes avec le même sha1 parce que les collisions sont plus difficiles à trouver comme l'ont expliqué les personnes avant moi.

+0

'a! = B', vérifiez la partie éditée de la question. 'z' pourrait être n'importe quoi. Je pense qu'il y a une règle, 'un mod 128' doit être' 0'. – Vili