Z článku bych nepochopil pokrok oproti SHAttered, který chápu takto:
SHAttered bylo:
SHA1(vybraná_zpráva_1 || pseudonáhodná_data_1 || vybraná_zpráva_2) == SHA1(vybraná_zpráva_1 || pseudonáhodná_data_2 || vybraná_zpráva_2)
Tohle je:
SHA1(vybraná_zpráva_1 || pseudonáhodná_data_1 || vybraná_zpráva_2) == SHA1(vybraná_zpráva_3 || pseudonáhodná_data_2 || vybraná_zpráva_2)
(pozn. to že můžete appendovat cokoli (stejného) a rovnost hashů se nezmění je normální očekávaná vlastnost této konstrukce (length extension), je to i v SHA-2 by design a opravuje to až SHA-3, příp. double-SHA2 používaná např. v Bitcoinu)
tj. můžu si vybrat dva libovolné začátky. Tím je to mnohem použitelnější na praktické útoky, protože SHAttered šlo použít jen na ty formáty dokumentů, kde po vygenerování hlavičky a následného pseudonáhodného balastu se můžu na tento balast odkazovat a podle něj rozhodovat.
Tohle ti nějak nesedí. SHAttered bylo podle mě takhle:
SHA1(kolizní_jádro_1 || zpráva) == SHA1(kolizní_jádro_2 || zpráva)
Jinak by nemohly fungovat ty webové generátory kolizních dokumentů, které vzaly jádra ze zveřejněného PoC a následně editovaly hodnotu zpráva.
Shambles jsem pochopil takto:
SHA1(zpráva || kolizní_suffix_1) == SHA1(zpráva || kolizní_suffix_2)
U SHAttered je rozdíl mezi bajty 0xc0 a 0x130, zbytek souborů je totožný kolidovat bude bez ohledu na obsahu od bajtu 0x130 dále, pokud je v obou souborech shodný.
U Shambles přiznávám, že jsem to nezkoumal.