web-dev-qa-db-fra.com

SHA1 Démo de collision / Exemple

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.

27
Archimedix

La première collision connue a maintenant été publiée à https://shartitered.it/

8
Dave L.

Au 23 février 2017, cette réponse n'est plus exacte.

Pendant plus de six ans, la fonction de hachage cryptographique SHA1 sous-estime que la sécurité Internet a été à la porte de la mort. Maintenant, il est officiellement mort, grâce à la soumission du premier cas connu d'un exploit fatal appelé "collision"

Il n'y a pas encore de collision connue pour SHA-1. À l'heure actuelle:

  • Il existe des collisions sur réduites des versions de SHA-1, avec moins que les 80 tours de la standard standard SHA-1.
  • Un algorithme a été décrit, qui devrait obtenir une collision SHA-1 avec un effort de calcul approximativement équivalent à 263 Invocations de SHA-1 sur de petits messages; C'est beaucoup mieux que les algorithmes génériques (qui nécessitent 280 Invocations en moyenne) mais c'est toujours assez grand et cet algorithme n'a pas encore été exécuté.

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".

32
Thomas Pornin

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.

10
Archimedix

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. 
4
Ben Robinson

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

2
mykhal