Puncte:3

Care sunt proprietățile unei funcții hash?

drapel gr

Am creat o funcție hash. Dacă sunt întrebat dacă este conformă cu definiția unei funcții hash, știu doar că ar trebui să aibă o ieșire de dimensiune fixă. Folosesc înmulțirea și adunarea fiecărui caracter text simplu cu numărul aleatoriu pe care l-am atribuit.

În afară de ieșirea de dimensiune fixă, ce alte caracteristici trebuie să aibă o funcție hash și de ce?

poncho avatar
drapel my
Întrebați despre o funcție hash criptografică sau doar o funcție hash (de exemplu, pentru utilizare într-un tabel hash)?
drapel gr
Cer o funcție hash.
Maarten Bodewes avatar
drapel in
E frumos și tot, dar acesta este [crypto.se]. Dacă doriți o definiție mai largă, poate doriți să mergeți la, de ex. [cs.se].
Puncte:6
drapel ng

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ă.
user3742898 avatar
drapel jp
Aș face distincția între „o funcție hash are” (ieșire cu dimensiune fixă, este o funcție, acceptă toate intrările relevante) și „o funcție hash _worthwhile_ are” (timp liniar, rezistent la coliziuni, rezistent la preimagine). "întoarce 0;" este o funcție hash. Este o funcție hash teribilă, dar este o funcție hash. Funcțiile hash proaste sunt frecvent utile atunci când se caută erori în algoritmii care folosesc funcții hash sau pentru a ajuta la clarificarea care proprietăți (viteză, rezistență la coliziune,...) sunt cele mai importante pentru o anumită aplicație.
Blindy avatar
drapel in
Deoarece OP a clarificat că nu vorbește despre funcții hash sigure din punct de vedere criptografic, cred că trei puncte ar trebui slăbite în definiția dvs.: 1. nu este nevoie ca funcția să fie publică pentru a fi o funcție hash bună (evaluarea inter pares este utilă, dar nu este necesar), 2. Având în vedere o intrare mare și nevoia de hashing rapid, duplicatele „imposibile din punct de vedere computațional” sunt doar o sugestie, iar 3. inversarea imposibilă a funcției nu este în mod fundamental necesară, `f(x) = x` este o modalitate foarte rapidă și eficientă de a hash un număr întreg.
fgrieu avatar
drapel ng
@Blindly: deoarece OP a pus simultan o [întrebare cripto-începător](https://crypto.stackexchange.com/q/92044/555), am decis să răspund întrebarea și „Cerb un hash function" comentează ca o indicație că OP nu știe ce este o funcție hash criptografică, mai degrabă decât o indicație că întrebarea nu este despre cripto.
poncho avatar
drapel my
De fapt, o funcție hash criptografic proastă poate fi folosită mai bine într-un tabel hash decât una bună - adică poate provoca mai puține compresii hash așteptate decât o funcție cu aspect aleatoriu. Acest lucru se poate întâmpla în funcție de distribuția intrărilor; o funcție hash (necriptografică) bine aleasă își poate răspândi rezultatele mai bine decât se aștepta.

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.