Mise à jour
Ironie du sort, quelques semaines après que j'ai posté la réponse précédente, les deux chercheurs Chinois, Tao Xie et Dengguo Feng, a publié un nouveau bloc unique de collision MD5. J'étais pas au courant de ce papier jusqu'à maintenant. Un seul MD5 bloc signifie que la taille de saisie est de 64 octets ou 512 bits. Notez que les entrées sont pour la plupart les mêmes, qui ne diffèrent que de 2 bits.
Leur méthodologie ne sera pas publiée jusqu'en janvier 2013, mais leur collision peut être vérifiée maintenant, en utilisant des nombres à partir de l'étude:
>>> from array import array
>>> from hashlib import md5
>>> input1 = array('I', [0x6165300e,0x87a79a55,0xf7c60bd0,0x34febd0b,0x6503cf04,
0x854f709e,0xfb0fc034,0x874c9c65,0x2f94cc40,0x15a12deb,0x5c15f4a3,0x490786bb,
0x6d658673,0xa4341f7d,0x8fd75920,0xefd18d5a])
>>> input2 = array('I', [x^y for x,y in zip(input1,
[0, 0, 0, 0, 0, 1<<10, 0, 0, 0, 0, 1<<31, 0, 0, 0, 0, 0])])
>>> input1 == input2
False
>>> md5(input1).hexdigest()
'cee9a457e790cf20d4bdaa6d69f01e41'
>>> md5(input2).hexdigest()
'cee9a457e790cf20d4bdaa6d69f01e41'
Mise à jour: Le livre a été publié en Mars 2013: Tao Xie et Fanbao Liu et Dengguo Feng - Rapide Collision Attaque sur MD5
Toutefois, si vous avez plus d'espace pour jouer avec, les collisions de quelques kilo-octets sont plus rapides à calculer, ils peuvent être calculées à l'intérieur des heures sur n'IMPORTE quel ordinateur.
Vieille réponse
Le précédent le plus court de collision utilisé au moins deux MD5 blocs de valeur de l'entrée -- c'est de 128 octets, 1 024 bits. Un préfixe dans le premier bloc peut être choisie arbitrairement par l'attaquant, le reste devrait être calculé et apparaissent comme du charabia.
Voici un exemple de deux entrées en collision, vous pouvez essayer vous-même en Python:
>>> from binascii import unhexlify
>>> from hashlib import md5
>>> input1 = 'Oded Goldreich\nOded Goldreich\nOded Goldreich\nOded Go' + unhexlify(
... 'd8050d0019bb9318924caa96dce35cb835b349e144e98c50c22cf461244a4064bf1afaecc582'
... '0d428ad38d6bec89a5ad51e29063dd79b16cf67c12978647f5af123de3acf844085cd025b956')
>>> len(input1)
128
>>> md5(input1).hexdigest()
'd320b6433d8ebc1ac65711705721c2e1'
>>> input2 = 'Neal Koblitz\nNeal Koblitz\nNeal Koblitz\nNeal Koblitz\n' + unhexlify(
... '75b80e0035f3d2c909af1baddce35cb835b349e144e88c50c22cf461244a40e4bf1afaecc582'
... '0d428ad38d6bec89a5ad51e29063dd79b16cf6fc11978647f5af123de3acf84408dcd025b956')
>>> md5(input2).hexdigest()
'd320b6433d8ebc1ac65711705721c2e1'
La production de ces deux entrées a pris 2 jours sur un 215-nœud Playstation 3 cluster, par Mark Stevens :)