Dar după ce l-am citit, încă nu înțeleg cât de rezistent este XXH3 (unul din familia xxHash) la atacurile preimagine.
Deloc - este ușor să creezi o imagine care are o valoare arbitrară.
Da, ieșirea XXH3 este de 64/128 de biți, ceea ce înseamnă că probabilitatea de a găsi o imagine este $2^{64}/2^{128}$ corespunzător.
Probabilitățile sunt valabile dacă strategia pe care o utilizați este „alegeți o imagine, tăiați-o și vedeți care este rezultatul”. Există strategii mult mai eficiente.
Poate că există un fel de atac care nu este forța brută?
Sigur este.
xxhash constă din pași care:
Transformă starea curentă într-un mod inversabil; sau
Adăugați un cuvânt care depinde (din nou, într-un mod inversabil) de următorul cuvânt al imaginii (și nicio altă operațiune din xxhash nu depinde de acel cuvânt de intrare).
Prin urmare, pentru a genera o imagine care are o anumită valoare, tot ce trebuie să faceți este să selectați un șablon care constă din valori, cu excepția unui cuvânt; apoi, evaluați xxhash-ul înainte până ajungeți la acel cuvânt, venind cu o valoare de stare internă A. Apoi, luați valoarea hash țintă și calculați xxhash-ul înapoi până ajungeți la acel cuvânt, venind cu o valoare de stare internă B. Apoi, tot ce trebuie să faceți este să selectați singurul cuvânt necunoscut pentru a fi ceva care convertește valoarea de stare A în valoarea de stare B - asta este ușor; introduceți acel cuvânt în șablon și ați terminat.
Și, pentru a răspunde la ultima ta întrebare:
Pentru hashurile criptografice este greu să le găsești, dar ele există. Când am executat cu succes atacul preimagine, cum putem fi siguri că valoarea pe care o găsim este valoarea inițială?
Evident, coliziunile sunt inevitabile pentru orice funcție care convertește un șir potențial lung într-un șir de lungime fixă mai scurt. Acum, dacă găsim o imagine care are aceeași valoare, cum ne asigurăm că este aceeași imagine care a fost hashing inițial? Răspuns: în general, nu putem, cu excepția cazului în care știm multe despre imaginea originală (de exemplu, în atacul de mai sus asupra xxhash, știam toate cuvintele de intrare, cu excepția unuia). Pe de altă parte, pentru majoritatea atacurilor împotriva hashurilor criptografice, nu ne pasă - atacatorul câștigă de obicei dacă poate găsi orice preimagine.