Din punct de vedere criptografic, o funcție hash cu ieșire de dimensiune fixă:
- Trebuie să fie o funcție deterministă: aceeași intrare trebuie să genereze întotdeauna aceeași ieșire.
- Trebuie să accepte mesaje de intrare într-un set larg de introducere. În mod ideal, acesta ar trebui să fie șir de biți arbitrar, dar adesea este șiruri de octeți sau șiruri de caractere arbitrare, poate până la o anumită dimensiune.
- Baring calificativ special (cum ar fi cu cheie sau secret sau Aleatoriu), trebuie să fie public: fiecare pas și constantă necesară pentru calcularea ieșirii pentru orice intrare dată este cunoscută tuturor.
- Trebuie să calculeze rezultatul în polinomul de timp cu dimensiunea de intrare. Acesta ar trebui să fie aproximativ liniar cu dimensiunea de intrare.
- Ar trebui sa aiba rezistență la coliziune: este imposibil din punct de vedere computațional să afișați două mesaje distincte cu aceeași ieșire (această proprietate implică a doua rezistență preimagine, care este că având în vedere o intrare aleatorie, este imposibil din punct de vedere computațional să găsiți o altă intrare care să producă aceeași ieșire). Observați că dacă există $n$ posibile ieșiri, există atacuri generice care rup rezistența la coliziune cu aproximativ $\sqrt n$ evaluări ale funcției, deci implică rezistența la coliziune $n$ este mare (să zicem, cel puțin $2^{192}$ in zilele de azi); dacă nu, definiția rezistenței la coliziune trebuie să fie slăbită la: cea mai bună metodă de a afișa două mesaje distincte cu aceeași ieșire este un atac generic.
- Ar trebui sa aiba (întâi) rezistență preimagine: având în vedere ieșirea pentru o intrare aleatorie necunoscută, este imposibil din punct de vedere computațional să găsiți acea intrare (sau o altă intrare cu aceeași ieșire) mai ușor decât încercând intrări. Observați că dacă există $n$ posibile ieșiri, există atacuri generice care rup rezistența preimagine cu aproximativ $n$ evaluări ale funcției, deci implică rezistența preimagine $n$ este mare (să zicem, cel puțin $2^{96}$ in zilele de azi); dacă nu, definiția rezistenței preimagine trebuie să fie slăbită.
În general, un hash criptografic modern ar trebui să se comporte în linii mari ca un oracol aleatoriu, adică o casetă care implementează o funcție, a cărui ieșire este aleatorie pentru fiecare intrare particulară. Pentru un set de ieșiri suficient de mare, asta implică rezistență la coliziune, rezistență înainte de imagine și multe altele:
- Pentru intrare aleatorie necunoscută cu orice caracteristică naturală (adică independentă de definiția funcției hash; de exemplu, intrare care constă din 40 de cifre zecimale a căror sumă este divizibilă cu 10), rezultatul ar trebui să nu se distingă din punct de vedere computațional de uniform aleatoriu în set de ieșiri.
- Rezistență la atacul prin extensie de lungime: ieșire dată pentru intrare necunoscută $M$, ar trebui să fie imposibil să se calculeze ieșirea pentru intrarea unei extensii a $M$ (acesta este $M\mathbin\|E$ pentru negol $E$) mai ușor decât prin găsirea $M$ încercând intrări. Observați că hashurile încă comune, cum ar fi SHA-256, nu au această proprietate ulterioară.