Puncte:2

SHA-256 are (128 de timp + 128 de spațiu = 256 de biți) rezistență la coliziune?

drapel vu

În primul rând, luăm în considerare acele funcții hash care pot oferi de fapt securitate pre-imagine pe 256 de biți și nu ceva de genul SHAKE128<l=256biți> unde parametrii burete oferă doar o capacitate de securitate de 128 de biți.

Știm că criptoanaliza nu are doar o dimensiune de timp, ci are și o dimensiune spațială, adică cantitatea de memorie de lucru necesară pentru a executa algoritmul de criptoanaliza. Deci, dacă ne așteptăm să găsim o coliziune SHA-256 după aproximativ $2^{128}$ încercări, asta în teorie înseamnă și că are nevoie $2^{128}$ spațiu pentru a păstra intrările de coliziune candidate.

Deci este adevărat? Înseamnă asta că SHA-256 are o rezistență generală la coliziune de 256 de biți când se ia în considerare spațiul?

drapel vn
Pe lângă faptul că nu aveți nevoie de spațiu de $2^{128}$ pentru a efectua atacul de coliziune, așa cum este răspunsul acceptat, mai există și faptul că $2^{128} + 2^{128} = 2^{ 129}$, deci chiar dacă nu a existat un atac cu memorie scăzută și am numărat (greșit) utilizarea resurselor în acest fel, tot nu ar fi aproape de $2^{256}$.
Puncte:4
drapel ng

Nu, ruperea proprietății de coliziune a lui SHA-256 nu necesită aproape $2^{128}$ spaţiu. Știm cum să arătăm coliziunea în orice $n$-bit hash $H$ cu $\mathcal O(2^{n/2})$ evaluări hash și $\mathcal O(n)$ spaţiu.

Cea mai simplă metodă potrivită este Descoperirea ciclului lui Floyd, care va prezenta cu probabilitate nedisparatoare două distincte $n$-bit șiruri de biți $r$ și $s$ cu $H(r)=H(s)$, pe orbită un punct inițial dat $t$ la iterare $H$

  • $m\gets\lceil\,2^{n/2+1}\,\rceil$ (crescând $+1$ reduce eșecurile).
  • $u\obține H(t)$ .
  • $r\obține u$A ; $s\obține H(u)$ .
  • in timp ce $r\ne s$ :Â (găsește ciclu)
    • dacă $m=0$ apoi opriți în eșec (orbita lungă, rar).
    • $m\obține m-1$ .
    • $r\obține H(r)$A ; $s\ obține H(H(s))$ .
  • dacă $t=s$ apoi opriți-vă în eșec ($t$ în ciclu, dispărut de rar).
  • $s\obține H(s)$ .
  • in timp ce $r\ne s$ :Â (offset $u$ cu un ciclu)
    • $s=H(s)$A ; $u=H(u)$ .
  • in timp ce $t\ne u$:Â (găsește coliziune)
    • $r\ obține t$A ; $s\obține u$ .
    • $t\obține H(t)$A ; $u\obține H(u)$ .
  • ieșire $(r,s)$ și opriți-vă în succes.

Încearcă online! pentru coliziunea unui hash pe 24 de biți (primul $k=3$ octeți ai lui SHA-256). Vă rugăm să fiți destul de amabil să rulați acest cod Python pe computer dacă crește $k$.

Metoda folosește că orbita de $t$, definit ca fiind $u$ atins prin iterare $u\obține H(u)$ începând de la $u=t$, tinde să circule în interior $\mathcal \Theta(2^{n/2})$ trepte. Algoritmul detectează un ciclu atins, găsiți $u$ dupa tot atatia pasi de la $t$ ca lungimea ciclului, apoi unde este introdus ciclul, ceea ce produce o coliziune. Se poate arăta că pentru funcția aleatoare $H:\{0,1\}^*\mapsto\{0,1\}^n$ și cu excepția celor foarte mici $n$, probabilitatea de succes a acestui algoritm din orice punct de plecare $t$ este cel puțin $3/4$ (Eșecurile sunt pentru o orbită prea lungă de $t$, sau când $t$ aparține unui ciclu).

În caz de eșec, este adesea suficient să reporniți din alt punct aleatoriu.De obicei, funcționează bine pentru hashurile criptografice comune $H$, dar chiar și pentru acestea se poate întâmpla ca majoritatea punctelor de plecare să ducă la un ciclu prea mare pentru a fi găsit. Într-un caz general, dorim să trecem la utilizarea algoritmului cu $H'$ definit de $H'(x)=H(F(x))$ pentru o injecție randomizată, calculabilă eficient și inversabilă $F$ ales la începutul algoritmului. Asta e atât de afișat o coliziune pentru $H'$ folosind algoritmul prezintă o coliziune pentru $H$, dar $H'$ poate avea o structură de ciclu diferită. Pentru cele mai multe $n$-bit hash $H$ potrivit pentru utilizare criptografică, $F$ poate fi XOR cu un fix $n$-bit șir de biți sau adăugarea unui prefix fix sau/și sufix. Acest lucru nu este ilustrat în pseudocodul de mai sus și codul Python legat.

Este posibil să distribuiți munca pe multe mașini care rulează în paralel, fiecare cu puțină memorie, comunicare moderată și muncă suplimentară moderată. Vezi Paul C. van Oorschot și Michael J. Wiener, Căutare de coliziuni paralele cu aplicații criptoanalitice, în Journal of Criptology, 1999.

gnasher729 avatar
drapel kz
În afara cripto, articolul pe care l-ați legat pare foarte greu de aplicat algoritmului de factoring pollard-rho în sine, deoarece acolo nu căutăm x=y, ci gcd(x-y, N) > 1.
DannyNiu avatar
drapel vu
Cred că dacă s-ar adăuga rezultatele experimentului algoritmului lui Floyd pe transformări mai mici (de exemplu, 24 sau 32 de biți), ar fi mai mult decât convingător.
fgrieu avatar
drapel ng
@DannyNiu: Algoritmul original a fost greșit. Acesta vine cu o demonstrație funcțională.
gnasher729 avatar
drapel kz
Algoritmul Pollard-tho poate găsi cu ușurință factorii unui număr de 128 de biți în câteva secunde. Ceea ce implică găsirea de coliziuni între numere de 64 de biți. De obicei durează aproximativ 2^32 de pași.
Puncte:0
drapel kz

Nu, coliziunile SHA-256 pot fi găsite practic fără spațiu.

Trucul este că nu calculați, de exemplu, H(1), H(2), H(3) etc., ceea ce ar necesita stocarea tuturor rezultatelor într-un tabel. În schimb, lăsăm x0 = o anumită valoare, x1 = H(x0), x2 = H(x1) și așa mai departe. Apoi comparăm x1 și x2, x2 și x4, x3 și x6, xk și x2k, iar aceasta va găsi o coliziune în aproximativ 2^128 de pași fără stocare.

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.