Puncte:3

Hashingul de mai multe ori va fi mai mult, mai puțin sau la fel de sigur ca și hashingul o dată

drapel br

Hashingul de mai multe ori va fi mai mult, mai puțin sau la fel de sigur ca hashingul o dată?

Eliminați această întrebare:

  • Am vazut aceasta afirmatie:
  • Pentru mine, s-ar părea că ceea ce încercați să faceți în rehashing este să încetiniți un atac cu forță brută.
  • Deși problema zilei de naștere s-ar putea aplica la hashing multiplu, se pare că s-ar aplica în egală măsură și primului exemplu (pe care persoana l-a etichetat drept „nu face asta”), ca și celui de-al doilea exemplu (cu care persoana s-a simțit mai confortabil).
  • În oricare dintre exemple, odată ce coliziunea este găsită, repetarea în acel punct este discutabilă (deoarece va reproduce aceleași rezultate între hash și coliziunea sa).
  • Scenariul specific pentru această întrebare este: exemplele persoanei pe care le-am dat în întrebarea mea de mai sus sunt corecte în afirmația lor - că exemplul 2 va face ca coliziunile, vorbind probabilitatea, să se întâmple mai rar?

Ce caut intr-un raspuns:

  • Acesta nu este domeniul meu de expertiză (de aceea îl întreb aici, unde este expertiza dumneavoastră). Vă rugăm să nu ezitați să-mi corectați neînțelegerile și presupunerile problematice.
  • Sunt interesat atât de o explicație tehnică detaliată, atâta timp cât este însoțită de o explicație a pașilor de către un profan și în special de concluzie (accentul fiind pus pe explicația profanului).
  • Întreb teoretic toate funcțiile de hashing unidirecțional (dacă există distincții între clasele largi de algoritmi de hashing, vă rugăm să nu ezitați să le subliniați în general, înțelegând că implicațiile răspunsului dvs. s-ar aplica practic din partea mea la un algoritm de hashing similar). la SHA-2, SHA-3 sau bcrypt).
  • M-am uitat prin 10 întrebări și răspunsuri diferite crypto.stackexchange.com care ar părea foarte asemănătoare cu această întrebare, dar fie s-au ocupat de cazuri de utilizare specifice care au modelat răspunsul la cazul de utilizare, fie au dat o dovadă teoretică fără a explica în mod profan. termenii ceea ce făcea de fapt dovada lor și concluzia unui profan la răspunsul lor.
    • În sensul acestei întrebări, să presupunem că calculul meu nu este la egalitate și nici nu am citit, în general, despre variabilele matematice folosite în criptografie, dar să presupunem că pot urmări algebra și că îmi pot șterge calculul dacă îmi spui care sunt variabilele. reprezintă (sau link-uri către explicațiile lor).

Vă mulțumesc anticipat pentru ajutorul acordat la această întrebare.

drapel jp
Depinde pentru ce folosești hash-ul. Schimbarea parolelor (și derivarea cheilor din secretele cu entropie scăzută) este mult diferită de majoritatea celorlalte aplicații și are considerații de securitate foarte diferite.
kelalaka avatar
drapel in
Care este scopul tău? Ce vrei să obții? Ce întrebări și răspunsuri nu vă mulțumesc?
Puncte:5
drapel ng

Exemplele persoanei pe care le-am dat în întrebarea mea de mai sus sunt corecte în afirmația lor - acel exemplu 2 va face ca ciocnirile, vorbind probabilitatea, să se întâmple mai rar?

Se fac mai multe afirmații Acolo:

O afirmație este că funcția 1 de parola + sare cedând hash definit de

hash = sha512(parola + sare); 
pentru (i = 0; i < 1000; i++) {
    hash = sha512(hash); // <-- NU faceți asta!
}

este mai probabil să se ciocnească decât funcția 2 de parola + sare cedând hash definit de

hash = sha512(parola + sare);
pentru (i = 0; i < 1000; i++) {
    hash = sha512(hash + parola + sare);
}

Acest lucru este corect în teorie și ar fi observabil în practică pentru un hash îngust, de ex. 80 de biți.

O modalitate de a vedea este că

  • setul de ieșire al unei funcții aleatoare fixe $H$ repetat $n$ timpii tinde să se îngusteze ca $n$ crește (argument: nu poate crește niciodată când $n$ face și unele rezultate de îngustare din coliziuni ale hash-ului iterat, aici SHA-512);
  • probabilitatea de coliziune a unei funcții aleatoare pentru două intrări aleatorii distincte este inversa mărimii setului de ieșire.

Este astfel de înțeles (chiar dacă repetarea unei funcții aleatoare $n$ ori s-ar putea să nu producă o funcție aleatorie peste ceea ce rămâne din setul de ieșire) că probabilitatea de coliziune a $H^n(x)$ pentru două distincte aleatorii $x$ creste cu $n$.

Aceasta limitează rezistența la coliziune a funcției 1 care pentru bucla se repetă $H: h\mapsto\operatorname{SHA-512}(h)$. În timp ce în 2, funcția iterată se schimbă atunci când este introdusă parola + sare se modifică, astfel încât seturile de ieșire se micșorează cu $n$ depinde de acea intrare. Conform unui model de hash ca funcție aleatoare, 2 este, de asemenea, o funcție aleatoare care poate atinge setul complet și probabilitatea de coliziuni pentru diferite intrări parola + sare nu creste ca $n$ face.


Se afirmă, de asemenea, că, din acest motiv, ar trebui să folosim în practică 2 în loc de 1, iar acest lucru este incorect din mai multe motive:

  • Cel puțin pentru orice hash care este rezistent la coliziuni, așa cum este SHA-512, nu trebuie să ne facem deloc griji cu privire la coliziuni sau cicluri.
  • În context (aplicația de hashing a parolei), rezistență la coliziune a funcției iterate generale nu este o problemă. Rezistenta preimagine este. Și chiar și pentru SHA-1, care nu este rezistent la coliziuni și nu este realist $n$, nu trebuie să ne îngrijorăm că ruperea 1 ar necesita evaluări considerabil mai puține ale hash-ului decât ruperea 2, inclusiv cu precalcul realist.

Un avantaj al lui 2 este: este puțin mai dificil de implementat în hardware deoarece hardware-ul trebuie să folosească parola și sare la fiecare iterație, care astfel trebuie să fie stocate. ASIC-urile pentru a accelera 2 vor fi astfel mai complexe decât pentru 1. Acesta este singurul motiv pentru care văd că 2 este mai puțin rău decât 1 în practică. Încă este rău, pentru că $n=1000$ iterațiile nu sunt suficient de lente pentru ASIC-uri sau GPU-uri care efectuează căutarea prin parolă; și pentru că totul nu folosește memoria, pierzând astfel protecția suplimentară împotriva căutării prin forță brută a parolelor pe care le-a folosit parolele moderne (cum ar fi cripta sau Argon2) da.


Hashingul de mai multe ori va fi mai sigur decât hashingul o dată

Acest lucru depinde în primul rând de obiectiv, care dictează hash-ul de utilizat

  • Dacă facem hashing în scopul întinderea cheii, adică de obicei atunci când se trimit o parolă sau o expresie de acces, da: securitatea împotriva căutării cu forță brută crește aproximativ liniar odată cu numărul de runde. Dar, din nou, ar trebui să folosim un hash de parolă dur de memorie.Pentru timpul petrecut egal, chiar și pentru cei învechiți bcrypt va oferi mai multă siguranță decât construcțiile care repetă pur și simplu un hash, cum ar fi PBKDF2 sau funcțiile 1 și 2, care nu sunt recomandate în era ASIC-urilor, FPGA-urilor și GPU-urilor pentru spargerea parolei.
  • Dacă facem hash de mai multe ori pentru a consolida o funcție hash criptografică cu un defect (de exemplu, rezistența la coliziune este ruptă), probabil că da. De exemplu. funcția 2 (cu parola + sare înlocuit cu mesajul la hash) ar remedia toate defectele de securitate cunoscute ale MD5 sau SHA-1 pe lângă lățimea lor de ieșire, chiar dacă facem o singură rundă suplimentară în loc de 1000. Cu toate acestea, acesta este la un preț uriaș în performanță și utilizare, deoarece trebuie să hașăm mesajul de două ori, astfel încât, în unele cazuri, îl stocăm.
  • Pentru alte scopuri criptografice, inclusiv semnătura și derivarea cheii dintr-o cheie largă folosind un hash modern, nr. Putem folosi SHA-2 sau SHA-3 (pentru a-i numi pe cei din întrebare) în aceste scopuri. Hashingul repetat nu este necesar și poate chiar reduce ușor rezistența la coliziune (dacă este efectuată ca în 1), cu o singură excepție: dacă hash-ul are proprietate lungime-extensie (așa cum are SHA-2, dar nu SHA-3), și dacă acest lucru nu este de dorit, este rezonabil să re-hash odată ce ieșirea hash-ului (care nu necesită stocarea mesajului de două ori).
Puncte:1
drapel us

Iată o explicație intuitivă (versus riguroasă):

O funcție hash apare aleatorie, dar de fapt nu adaugă nicio entropie la rezultat. De fapt, elimină entropia prin proprietatea că multe intrări pot duce la aceeași ieșire.(Doar o funcție one-to-one and on ar putea păstra entropia.) Prin urmare, fiecare aplicare a hash-ului la propria sa ieșire elimină entropia până când converge către un ciclu repetat (grup finit) de ordin, posibil mult mai mic decât dimensiunea câmpului. Nu cunosc vreo dovadă a limitelor în ordinea unui astfel de grup pentru hashe-urile LSR.

Al doilea exemplu reîmprospătează entropia cu fiecare aplicație adăugând parola și sare. Deoarece este o operațiune diferită, are ca efect trecerea la un ciclu (coset) diferit în fiecare rundă.

Deci, lucrând înapoi, începem cu o intuiție despre funcția hash ca un set de mai multe cicluri, mai degrabă decât o hartă complet randomizată. O funcție hash ideală ar fi un ciclu mare, iar în acea funcție, primul exemplu ar fi bine.

Dacă ar fi să tragem o analogie foarte grosieră cu un câmp algebric mai simplu, am putea considera că ne uităm la un câmp compus compus din mai multe clase ale grupului de nuclee definite prin aplicarea funcției hash, în timp ce doar un câmp prim ar avea maximul maxim. Ordin.

Și încă ceva, pentru că am amestecat conceptele de cicluri și pierderea entropiei. LSR are o capacitate limitată de entropie și pierde o parte din exces în fiecare rundă. Aceasta înseamnă că unirea tuturor seturilor de cicluri în care orice intrare ar putea ajunge să compună un câmp mult mai mic decât intrarea în sine. Punând împreună aceste concepte, aplicarea repetată reduce încet toate intrările într-un număr mic de cicluri mici, ceea ce înseamnă că veți crește foarte mult șansa de coliziune.

Pentru a afirma ceea ce este evident, o șansă mai mare de coliziune înseamnă o șansă mai mare de a ghici o intrare care va atinge aceeași valoare cu parola și, astfel, să acorde acces. Amintiți-vă că parola în sine este irelevantă, doar capacitatea de a furniza o valoare care are aceeași valoare ca și parola.

Sperăm că cineva poate demonstra acest lucru cu mai multă rigoare folosind teoremele de algebră abstractă și proprietățile grupurilor hash LSR. Abia astept.Multumesc pentru intrebare.

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.