Cette question est similaire à this , mais celle-ci ne fait que référence à des démos de collision MD5.
Y a-t-il des paires de messages arbitraires réels SHA1 connus jusqu'à présent?
J'aimerais utiliser ces tâches pour tester comment divers produits logiciels (mon propre et une tierce partie) y traitent.
Faire des recherches sur Google ne relevaient que les collisions OH-SE SE 5/SHA0 et quelques conseils sur une approche de la création de collisions SHA1, mais je ne pouvais maîtriser mes exemples.
La première collision connue a maintenant été publiée à https://shartitered.it/
Au 23 février 2017, cette réponse n'est plus exacte.
Il n'y a pas encore de collision connue pour SHA-1. À l'heure actuelle:
Il y avait un effort pour obtenir une collision SHA-1 en exploitant le pouvoir de quiconque avait des cycles d'horloge de processeur de rechange à faire un don, avec le [~ # ~ # ~ ~] Cadre pour organiser le tout chose, mais il n'y avait pas assez de volontaires et les efforts ont été abandonnés l'année dernière. D'où aucune collision SHA-1 réelle n'est pas encore.
Les attaques théoriques reposent sur certaines hypothèses qui peuvent s'avérer légèrement fausses; Par exemple, l'attaque sur MD5 est en fait un peu plus rapide que prévu (à un moment donné, une propriété doit être remplie, avec une probabilité théorique de 2-28, mais en pratique c'est plus comme 2-27,7, c'est-à-dire que l'attaque est 20% plus rapide que prévu). Il est toujours considéré que l'attaque théorique est correcte et la complexité "plutôt précise".
Le blog de sécurité de Google décrit la première collision publique, intentionnelle SHA-1 ici:https://security.googleblog.com/2017/02/Announcing-first-sha1-collision.html
Liens directs vers 2 pdfs avec le même SHA-1 (à partir du site dédié à cette découverte ):
Encore une fois, Marc Stevens était impliqué avec le CWI Amsterdam et certains employés de Google, mais cette fois-ci pour la SHA-1 complète sur deux PDF construits.
Stevens note également qui en raison de la construction de SHA-1 Merkle-Damgård , les deux PDF peuvent être étendues (annexées) avec les mêmes données arbitraires à produire versions plus longues hachage au même digest.
Google publiera apparemment le code source d'accompagnement dans 90 jours (23 février 2017), donnant un certain temps aux fournisseurs du système concerné pour mettre à jour leurs affaires.
Il reste à voir comment les logiciels tels que GIT et les fournisseurs de services tels que Github traiteront avec cela, notamment en termes de compatibilité à l'envers.
Linus Torvalds a a publié une déclaration concernant GIT , notant qu'elles migrent vers des hachages plus récentes de manière compatible, mais qu'il prendra du temps.
Au fait, la démo de collision "brisée" n'affecte pas GIT (sans modification), car elle utilise SHA-1 comme ceci:
sha1("blob " + <size in octets as text> + "\0" + <contents>)
Vous pouvez obtenir le hachage GIT en utilisant git hash-object <file path>
, même si le fichier n'est pas en git.
Dans Actualités connexes, Subversion semble être la première victime réelle de cette preuve, provoquant une corruption du référentiel, rendant ainsi les fichiers mentionnés des exploits pratiques.
-- Auparavant ... -
A 76 rond collision a été trouvé par Marc Stevens .
Cryptographe Jean-Philippe Aumasson, co-créateur de [~ # ~ ~] blake [~ # ~] et SIPHASH et initiateur du Concours de hachage de mot de passe (PHC) , devine une collision SHA-1 sur les 80 rounds complètes aura été trouvé par 2020 .
Selon Recherche en cours de Marc Stevens et al. Publié en octobre 2015 ,
... Nous estimons le coût de la collision SHA-1 Aujourd'hui (c'est-à-dire automne 2015) entre 75k $ et 120k $ Location d'Amazon EC2 Cloud Computing sur plusieurs mois. En revanche, l'expert en sécurité Bruce Schneier a précédemment projeté le coût de collision SHA-1 d'environ 173k $ d'ici 2018.
Ils décrivent également une attaque de collision pour la fonction de compression de SHA-1.
Il y a un exemple dans attaques de recherche de collision sur SHA1 Papier de Wang, Yin et Yu, à partir de 2005, mais juste pour une version 58 ronde de SHA-1. (Le SHA-1 officiel complet effectue 80 rounds.)
3 A collision example for 58-step SHA1
h₁ = compress(h₀,M₀) = compress(h₀,M'₀)
_____________________________________________________
h₀: 67452301 efcdab89 98badcfe 10325476 c3d2e1f0
_____________________________________________________
M₀: 132b5ab6 a115775f 5bfddd6b 4dc470eb
0637938a 6cceb733 0c86a386 68080139
534047a4 a42fc29a 06085121 a3131f73
ad5da5cf 13375402 40bdc7c2 d5a839e2
_____________________________________________________
M'₀: 332b5ab6 c115776d 3bfddd28 6dc470ab
e63793c8 0cceb731 8c86a387 68080119
534047a7 e42fc2c8 46085161 43131f21
0d5da5cf 93375442 60bdc7c3 f5a83982
_____________________________________________________
h₁: 9768e739 b662af82 a0137d3e 918747cf c8ceb7d4
_____________________________________________________
Table 2: A collision of SHA1 reduced to 58 steps. The two
messages that collide are M₀ and M'₀. Note that padding
rules were not applied to the messages.
Pas exactement la collision SHA1, mais il existe des collisions de PBKDF2-HMAC-SHA1 Message Digest Authentification Code.
Par exemple, PBKDF2 (SHA1, mot de passe, sel, itérations, dklen) des deux mots de passe plnlrtfpijpuhqylxbgqiiyipieyxvfsavzgxbbcfusqkozwpngsyejqlmjsytrmd
et eBkXQTfuBqp\'cTcar&g*
, sel hunter2
, 4
itérations, fournissez la même valeur (35d1c8f259129dc800ec8e073bb68f995424619c
pour dklen 20
).
En fait, il est trivial de trouver de telles collisions pour des cordes de plus de 64 octets.
Un autre exemple de collision (Python3):
>>> import hashlib, binascii
>>> def pbkdf2sha1hex(x, salt, iters):
... h = hashlib.pbkdf2_hmac('sha1', x, salt, iters)
... return binascii.hexlify(h)
>>> pbkdf2sha1hex(b'http://stackoverflow.com/questions/3475648/sha1-collision-demo-example/31136714', b'NaCl', 1000000)
b'20177527e04e05d5e7b448c1ab2b872f86831d0b'
>>> pbkdf2sha1hex(b'\x8c\xbf8\x94\xbc\xf4\xbe\x90xT,r\xbc\x03\xd1\xed\xd9\xea\xfb\x9f', b'NaCl', 1000000)
b'20177527e04e05d5e7b448c1ab2b872f86831d0b'
Veuillez noter que le même "problème" s'applique à PBKDF2-HMAC-SHA256 aussi:
>>> h1 = pbkdf2_hmac('sha256', b'http://stackoverflow.com/questions/3475648/sha1-collision-demo-example/31136714', b'NaCl', 1000000)
b"\xcf\xc5\xee\x15=\r\x0b\x0e\x89r\x9b\xe1\xb7'+\xa4'o\x98kn++u\x12\xec\xd9\xec\xea\xebL\xb7"
>>> h2 = pbkdf2_hmac('sha256', b'.\x83\xb0D\x93D\x9f\x162\xf3\xd4x\xb6\x1a\x9f-\x1f\xdb\xdc\xa4\x8f\xb3\x95Y5\xea\x99*\x97\x00V\x81', b'NaCl', 1000000)
>>> h1 == h2
True
Tout se passe, car de la définition de PBKDF2, pour de longues chaînes, elle tient:PBKDF2(hashalgo, s, ...) == PBKDF2(hashalgo, hashalgo(s), ...)
.
Plus d'infos E.G. Ici: https://mathiasbynens.be/notes/pbkdf2-hmac