Puncte:2

Cât de puternic dacă combin două funcții hash, cum ar fi MD5(SHA256(input))?

drapel in

Dacă încerc să fac MD5(SHA256(intrare)), care este puterea acestei așa-numite abordări dublu hashing?

Este la fel de puternic ca SHA256, sau la fel de puternic ca MD5 sau la fel de puternic ca SHA256 + MD5?

Aceasta nu este o întrebare despre teme, o pun din cauza unei probleme reale în proiectul meu. De drept, trebuie doar să fac SHA256(intrare) pe intrare și stocați-l într-o coloană dintr-un tabel MySQL. Dar preocuparea mea practică este: SHA256 are lungimea 64 când este codificat în bază64, dar MD5 are lungimea 32 când este codificat în bază64. Am nevoie de un index pe această coloană. MySQL ar funcționa mai bine atunci când folosesc MD5(SHA256(input)) pentru că este mai scurt (fie din cauza unui arbore B+ mai condensat, fie, în principiu, mai mic înseamnă mai puțin spațiu de stocare)?


Editează singur: încearcă să te gândești ce înțelegem prin „puternic” aici? Este rezistența pre-imagine sau rezistența la a doua pre-imagine?

drapel us
Gândiți-vă la o altă funcție hash mult mai proastă la coliziuni decât MD5 -- să spunem Hash(X) = 1... care ar fi securitatea Hash(SHA256(X))? Aceeași logică se aplică acestei întrebări.
fgrieu avatar
drapel ng
Un hash SHA-256 (respectiv MD5) este _nu_ de lungime 64 (respectiv 32) atunci când este codificat baza-64.Folosirea binarului ca cheie de căutare nu are niciun motiv IT _bun_ să fie o problemă și are motive să fie mai rapidă. Deoarece obiectivele de securitate ale sistemului general nu sunt declarate, nu putem spune dacă sunt îndeplinite. Am redeschis Q-ul, dar într-adevăr: de ce ar fi luat în considerare acest lucru, cu MD5-ul stricat? De ce nu un hash trunchiat modern?
kelalaka avatar
drapel in
[RIPEMD](https://en.wikipedia.org/wiki/RIPEMD) este mai bine să fie folosit decât MD5, pe care Bitcoin îl folosește deja RIPEMD-160
kelalaka avatar
drapel in
Care este dimensiunea totală a datelor? De ce este importantă coliziunea pentru tine? De ce nu poți folosi PRP care garantează unicitatea, cu condiția ca datele să fie unice? Ținta dvs. nu este clară pentru a oferi un răspuns complet... Și partea din arborele B+ este în afara subiectului aici.
dave_thompson_085 avatar
drapel cn
În afară de faptul că stocarea SHA256 trunchiată este la fel de bună din punct de vedere criptografic, dacă doriți, puteți stoca SHA256 complet și aveți MySQL _index_ doar un prefix al acestuia; vezi manualul. Dar asta nu este criptografie și este offtopic.
Puncte:3
drapel ng

Studiem un hash $H$ definit de $H(m):=H_2(H_1(m))$, cu SHA-256 pentru $H_1$ si MD5 pentru $H_2$.

The Rezistența la coliziune a MD5 este grav ruptă, prin urmare argumentul generic¹ că rezistența la coliziune a $H$ este cel puțin cea mai slabă dintre rezistența la coliziune a $H_1$ și $H_2$ nu ne duce nicăieri.

Argumentul genericâ² că prima rezistență preimagine a $H$ este cel putin aceea de $H_2$ funcționează în măsura în care avem încredere în rezistența preimagine a MD5; care este pus la îndoială (vezi acest), dar nu rupte în practică.

Singurul lucru la care mă pot gândi despre rezistența a doua preimagine $H$ este că nu poate fi mai bună decât rezistența a doua preimagine a $H_1$. Acest lucru nu oferă nicio asigurare de securitate și, din moment ce rezistența a doua preimagine a SHA-256 este considerată bună, nici nu dă un atac.


Din punct de vedere aplicat (despre care pare să fie întrebarea, deoarece menționează o aplicație concretă), nu văd că niciunul dintre atacurile criptoanalitice existente asupra MD5 sau SHA-256 sunt relevante.

  • Rezistența la coliziune a MD5 este ruptă.Dar dimensiunea scurtă de intrare MD5 (dimensiunea de ieșire de 256 de biți a lui SHA-256 este doar o jumătate de bloc de intrare din MD5) și constrângerea grea că această intrare este un hash, sunt suficiente pentru a face inaplicabile atacurile de coliziune MD5 existente (restricționând celor mult mai buni decât forța brută).
  • Atât SHA-256, cât și MD5 au un efect nedorit proprietatea extensiei de lungime, dar lungimea fixă ​​a intrării MD5 o blochează pentru proprietatea lui MD5. Și re-hashing-ul ieșirii SHA-256 la jumătate de dimensiune blochează cel pentru SHA-256.

Astfel, singurele atacuri relevante din punct de vedere criptografic pe care le văd sunt cele care rămân pentru hashuri ideale $H_1$ și $H_2$ cu lăţimea lor de ieşire respectivă. De cand $H_2$ este mult mai îngustă decât $H_1$, atacurile cu forță brută sunt limitate de lățimea de $H_2$ și considerente de viteză. În special:

  • Hash-ul compus al întrebării are o lățime de numai 128 de biți, astfel că coliziunile pot fi afișate cu aproximativ $2^{66}$ evaluări (atât pentru SHA-256, cât și pentru MD5) folosind un standard căutare distribuită de coliziuni. Îmi pot imagina situații în care rezistența scăzută la coliziune este o problemă (și nu pot spune aici, asta depinde de aplicație).
  • Hashul compus nu este utilizabil pentru întinderea cheii, așa cum ar fi nevoie pentru parole, pentru că este mult prea rapid și nu este greu de memorie. Totuși, nu există nicio indicație că întinderea cheii este o cerință.

Acest hash compus nu are un argument clar de securitate, nu este foarte rapid, mai ales pentru introducerea scurtă, și este rău din perspectiva relațiilor publice, deoarece MD5 este stricat. Din câte îmi dau seama, este in practica cam la fel de bun pe cât poate fi orice hash ușor de rapid pe 128 de biți tehnic puncte de vedere, inclusiv nesatisfăcător în ceea ce privește rezistența la coliziune (dar nu există nicio certitudine că rezistența la coliziune este o cerință în cazul de utilizare).Nu văd niciun motiv să folosesc acel hash compus mai degrabă decât ceva mai modern și mai sigur decât MD5, inclusiv unele SHA-2 (eventual trunchiate) sau SHAKE128 de la SHA-3 cu dimensiunea de ieșire reglabilă sau Blake2b (sau Blake3 după ce praful se așează) .


¹ Ipoteza o coliziune pentru $H$, acesta este $(m,m')$ cu $m\ne m'$ și $H(m)=H(m')$. Putem calcula $w=H_1(m)$ și $w'=H_1(m')$. Dacă $w=w'$, avem o coliziune pentru $H_1$. Altfel, avem $H_2(w)=H_2(w')$ cu $w\ne w'$, deci o coliziune pentru $H_2$. Astfel am spart rezistența la coliziune pt $H_1$ sau $H_2$.

² Emiteți ipoteza unui algoritm care găsește prima preimagine pentru $H$, care este dat $h$ găsirea $m$ astfel încât $H(m)=h$ cu probabilitate deloc neglijabilă și efort fezabil. Putem calcula $w=H_1(m)$ și este așa încât $h=H_2(w)$. Astfel am construit o metodă de găsire a primei imagini prealabile pentru $H_2$ cu aceeași probabilitate neneglijabilă de succes și în esență același efort ca și algoritmul ipotetizat.

³ Un algoritm care găsește a doua preimagine pentru $H_1$, care este dat $m$ găsirea $m'\ne m$ astfel încât $H_1(m)=H_1(m')$, găsește și a doua preimagine pentru $H$.

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.