Citirea răspunsului selectat la Proiectarea unei funcții hash din primele principii, mai degrabă decât în funcție de euristică este foarte perspicace.
Secțiunea despre „neliniaritate” sugerează că transformarea fiecărei ecuații implicate în funcția hash într-una liniară înseamnă că atacatorul poate înțelege cu ușurință implementarea funcției hash.
Dacă încercați să faceți o funcție hash criptografică care folosește doar XOR și deplasare, ecuațiile vor fi liniare chiar și după infinit de runde, acum analistul este la o singură eliminare Gauss de a o rezolva și acum au capacitatea de a crea preimagini arbitrare .
Pentru a evita acest lucru, trebuie să vă faceți ecuațiile neliniare utilizând operatorul AND. Hashurile fac tot felul de deplasări și XOR-ing, dar acest pas neliniar este ceea ce le face sigure.
Dar a avea termeni neliniari nu este suficient. Trebuie să vă asigurați că atacatorul nu poate anula în mod eficient termenii neliniari din ecuațiile dvs. fixând unele intrări la 1 sau 0. De asemenea, trebuie să vă asigurați că termenii nu se vor anula dacă atacatorii iau diferența dintre două ecuații. Dacă aveți formula ++ pentru unul și altă formulă ++ pentru un alt bit. Adăugarea acestor două va da + care este acum liniar și permite atacatorului să o rezolve pentru a obține relația dintre doi biți. Fiecare ecuație liniară independentă pe care o poate crea un atacator va reduce securitatea hash-ului tău cu 1 bit.
Puteți explica mai detaliat cum ar funcționa asta? Având în vedere o funcție hash care a fost ruptă, cum ați putea arăta această situație de liniaritate pe acea funcție hash? Practic, să spunem că md5 este un exemplu (nesigur din anumite motive). Este nesigur din acest motiv de liniaritate? Dacă da, ce înseamnă asta în ceea ce privește funcția hash md5? Care sunt ecuațiile care s-au dovedit a fi liniare? Dacă md5 este un exemplu prost, care este un exemplu bun? Practic, cum căutați liniaritatea într-o funcție hash bit cu bit, care sunt tehnicile de utilizat?
Aș dori să știu tehnicile pe care le-ar putea folosi un atacator pentru a „rezolva” funcția hash bazată doar pe intrare/ieșire (fără a vedea implementarea). Dar, deoarece aceasta este probabil o întrebare prea generală sau prea implicată, această întrebare se concentrează doar pe acest aspect al ecuației liniare. Care sunt tehnicile de „ecuație liniară” pe care le-ar putea folosi un atacator pentru a rezolva o funcție hash?