Puncte:1

Evitarea coliziunii MD5 cu hashuri parțiale secundare

drapel cn

Încerc să proiectez un program asemănător VCS care determină dacă fișierele sunt aceleași comparând hashurile MD5.

Apoi am citit despre ciocnirile MD5 Aici, și mă întreb dacă pot rezolva asta făcând o verificare secundară prin hashing doar părți din fișier dacă prima verificare a dus la o coliziune.

Care sunt unele probleme cu această abordare care pot fi deja prevăzute?

bk2204 avatar
drapel fr
Vă rugăm să nu utilizați MD5 sau chiar SHA-1 în acest scop (sau orice alt scop). Git a adăugat recent suport pentru SHA-256, în special pentru că celelalte două sunt teribile și, așa cum a propus Kelalaka, BLAKE2, BLAKE3 sau SHA-2 sunt toate alegeri grozave.
Puncte:3
drapel in

Ar putea fi o problemă uriașă în cazul dvs., deoarece există o coliziune identică de prefix în MD5;

 |prefix identic | parte liberă a fișierului A | sufix identic |
 |prefix identic | parte liberă a fișierului B | sufix identic |
                                         ^
                 au coliziune aici| restul e la fel

Deși astăzi identificarea coliziunii pentru MD5 este foarte ușoară, în cazul în care atacatorul poate controla un bloc din mijloc al MD5, probabilitatea acestui lucru se poate reduce dacă fișierele nu sunt arbitrare, deoarece va oferi atacului mai puțini candidați posibili pentru coliziune.

În cazul tău, nu există atacator și cauți o coliziune necontrolată. În VCS, fișierele cu multe editări pot intra în grupul de posibile scenarii de coliziune, același prefix, unele părți modificate și sufix identic. Problema dvs. majoră va fi să determinați ce parte să testați; doar al doilea bloc (MD5 are blocuri de 512 biți) sau doar al treilea bloc sau al doilea și al treilea bloc...

De ce să ne deranjezi cu MD5 și să avem o verificare secundară în timp ce putem avea alternative mai bune și mai rapide.

  • BLAKE2 a fost cel mai rapid de acum BLAKE3 care este chiar mai rapid. BLAKE2 de ~2 ori și BLAKE3 de ~9 ori mai rapid decât MD5. Utilizați BLAKE2/3 cu ieșire pe 512 biți și aveți un $2^{256}$-rezistenta la coliziune in timp; deci crearea unei coliziuni este imposibil din punct de vedere computațional.
  • SHA-512 care are aproape aceeași viteză ca MD5 și poate garanta o rezistență mult mai bună la ciocnire pe care MD5 nu o poate egala în niciun fel.

The concluzia lui Corkami;

Omoară MD5!

Dacă nu verificați în mod activ dacă există malformații sau blocuri de coliziuni în fișiere, nu utilizați MD5!

Nu este un hash criptografic, este o funcție de jucărie!

kelalaka avatar
drapel in
Ei bine, [Git folosea SHA-1](https://www.zdnet.com/article/linus-torvalds-on-sha-1-and-git-the-sky-isnt-falling/), iar acum [ ei îl îmbunătățesc](https://github.blog/2021-09-01-improving-git-protocol-security-github/)
Morrolan avatar
drapel ng
Rețineți că implicit Git și, de fapt, singurul lucru acceptat de gazdele Git majore, cum ar fi Github, este *încă* SHA1. Vezi de ex. [acest răspuns](https://stackoverflow.com/a/65874596). Al doilea link al tău este despre renunțarea Github a suportului pentru SHA1 împreună cu SSH. Adică este vorba despre un mod de transport prin care se poate accesa Git, și nu despre git ca o modalitate de a aborda conținut.

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.