Je crois que je vois où est la confusion.
Pour comprendre, il faut s'intéresser à l'algorithme de padding. Dans ton exemple, si tu donnes comme entrée à l'algorithme sha1 la chaîne :
4d 6f 6e 53 33 63 72 65 74 6e 61 6d 65 3d 68 61
63 6b 6e 64 6f 26 61 64 6d 69 6e 3d 30
L'algorithme du sha1 va effectivement utiliser du padding pour obtenir un bloc de 512 bits qui sera :
4d 6f 6e 53 33 63 72 65 74 6e 61 6d 65 3d 68 61
63 6b 6e 64 6f 26 61 64 6d 69 6e 3d 30 80 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 E8
Et c'est ce bloc qui sera utilisé pour calculer le hash.
Cependant, si tu donnes directement comme entrée à l'algorithme sha1 la chaîne :
4d 6f 6e 53 33 63 72 65 74 6e 61 6d 65 3d 68 61
63 6b 6e 64 6f 26 61 64 6d 69 6e 3d 30 80 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 E8
Dans ce cas là, le sha1 va rajouter un bloc entier de padding. En effet, l'agorithme de padding fonctionne de la manière suivante:
1. Dans tous les cas, rajouter un bit à '1' à la fin du message (dans l'exemple précédent, c'est ce qui fait apparaître l'octet 0x80).
2. Ensuite rajouter des 0 jusqu'à arriver à une taille totale étant (un multiple de 512) - 64 bits.
3. Rajouter la taille du message originale pour combler les 64 bits de fin de bloc (dans l'exemple précédent, c'est ce qui fait apparaître l'octet 0xE8).
Donc dans ce nouvel exemple, un bloc entier sera rajouté au message. Et donc la partie calculatoire du sha1 sera effectuée sur deux blocs :
4d 6f 6e 53 33 63 72 65 74 6e 61 6d 65 3d 68 61
63 6b 6e 64 6f 26 61 64 6d 69 6e 3d 30 80 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 E8
80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 xx
C'est pour ça que tu obtiens un hash différent.
Et comme le dis flob, le but de l'attaque n'est pas de réaliser une collision, mais de pouvoir, en se basant sur le hash d'un message 1, de connaître le hash d'un message 2 sans forcément connaître le premier message (dans l'article de pixis, on ne connaît pas le secret en préfixe)