Conform acest există cel puțin 6 „proprietăți” pe care toate funcțiile hash sigure criptografic se străduiesc să le atingă:
- Determinat: același mesaj rezultă întotdeauna în același hash;
- Rapid: este rapid de calculat valoarea hash pentru orice mesaj dat;
- Funcție unidirecțională: este imposibil să generați un mesaj din valoarea lui hash decât prin încercarea tuturor mesajelor posibile;
- Efect de avalanșă: o mică modificare a unui mesaj ar trebui să modifice valoarea hash atât de mult încât noua valoare hash pare necorelată cu vechea valoare hash;
- Rezistent la coliziune: este imposibil să găsiți două mesaje diferite cu aceeași valoare hash
- Rezistent la atacuri pre-imagine: un atac pre-imagine asupra funcțiilor hash criptografice încearcă să găsească un mesaj care are o anumită valoare hash. O funcție hash criptografică ar trebui să reziste atacurilor asupra imaginii sale prealabile.
Primele 3 cred că sunt destul de ușor de respectat din câte îmi pot imagina până acum (neavând implementat o funcție de hashing criptografic sigură). Dar cum proiectați ceva care are ultimele 3 totuși?
- Efect de avalanșă.
- Rezistent la coliziune.
- Rezistent la atacuri pre-imagine.
Există lucruri specifice pe care le puteți face atunci când proiectați o funcție de hashing pentru a o face să aibă cumva aceste 3 proprietăți? Cum fac cei care creează funcțiile hash criptografice premiate?
Dacă nu există principii de aplicat, următorul cel mai bun pariu ar fi să știi ce exemple să studiezi pentru a obține o perspectivă asupra modului în care au reușit să adere la aceste proprietăți. În acest caz, ce lucrări sau algoritmi hash sunt buni de studiat și pe ce părți să se concentreze din acele cazuri?