The full collision is a result of two subsequent manipulations of the compression function. The first manipulation brings the hash function's internal state only slightly out of sync, while the second manipulation (which is the actual collision) brings them back into sync.
An interesting thing to note is that although the messages of the first and second blocks are different, the difference pattern between them is the same.
Legend:
good.pdf | bad.pdf | difference | good.pdf | bad.pdf | difference | ||
---|---|---|---|---|---|---|---|
message | ![]() |
![]() |
![]() |
state | ![]() |
![]() |
![]() |
schedule | ![]() |
![]() |
![]() |
||||
hash | ![]() |
![]() |
![]() |
good.pdf | bad.pdf | difference | good.pdf | bad.pdf | difference | ||
---|---|---|---|---|---|---|---|
message | ![]() |
![]() |
![]() |
state | ![]() |
![]() |
![]() |
schedule | ![]() |
![]() |
![]() |
||||
hash | ![]() |
![]() |
![]() |