Când utilizați a $n$-bit hash, probabilitatea ca an accidental schimbarea rămâne nedetectată este despre $2^{-n}$ (pentru hashe-uri care își îndeplinesc chiar și ușor obiectivele de proiectare).
Dacă cineva folosește această tehnică o dată pe secundă timp de 100 de ani, cu un hash de 128 de biți precum MD5, probabilitatea este $36524\times86400\times2^{-128}\approx2^{31.6-128}=2^{-96.4}$.
Știm de 44 cratere pe pământ, cauzată de coliziunea cu un corp ceresc suficient de mare pentru a fi o lovitură majoră pentru civilizația noastră actuală, care a avut loc în ultimii 2,3 G de ani. Astfel, probabilitatea unui eveniment de perturbare a civilizației în acest interval de timp de 100 de ani este cel puțin $44\times100/(2,3\times10^9)\approx2^{-19}$ (și sunt optimist aici: distrugerea nucleară provocată de om este probabil mai probabilă). Prin urmare, nu are rost să ne batem cu o probabilitate de numai $2^{-96.4}$.
Dar în criptografie, luăm în considerare adversarii care încearcă activ să ne învingă. Dacă folosim un hash de 128 de biți (cum ar fi MD5) și facem multe fișiere (de exemplu $2^{31.6}$ ca mai sus, care hashuri se potrivesc unui stick USB de 64 GB) și au adversari puternici cu genul de resurse irosite în mineritul bitcoin¹, atunci posibilitatea ca ei să găsească un fișier cu același hash ca și unul dintre noi devine considerabilă (deși nu este ideea). m-ar deranja).
Pericolul real și imediat vine dacă presupunem că adversarii reușesc să pătrundă în software-ul pe care îl folosim pentru a ne salva fișierele (să zicem PDF) și suntem suficient de proști să folosim MD5 sau SHA-1, care rezistență la coliziune cu prefixul ales este rupt. Acum adversarii pot produce fără efort fișiere cu același MD5 sau SHA-1 ca oricare al nostru, care arată exact așa cum le consideră potrivite adversarii atunci când sunt vizualizate.
În scopul meu (doar verificarea validității datelor), ce ați recomanda?
Ignorarea posibilității de modificări adverse este în afara subiectului într-un grup cripto. Dacă facem asta, un CRC este suficient. 64 de biți este bine. Singurul lucru de care trebuie să vă temeți este că mass-media ar putea folosi intern un CRC și ei intervin. Din lipsă de informații, alegerea unui CRC primitiv pe 64 de biți are sens.
Înapoi la criptografie și modelul său advers: ar trebui să fie folosite hashuri neîntrerupte precum cele ale familiei SHA-2 sau SHA-3. În afara unei descoperiri la care puțini se așteaptă, SHA-256 este sigur în mod adecvat pentru cel puțin un deceniu, SHA-512 pentru totdeauna (la scară umană), chiar dacă presupunem că vom primi vreodată Calculatoare cuantice relevante din punct de vedere criptografic.
¹ Vorbesc despre puterea electrică totală și circuitele integrate irosite. Cu toate acestea, cea mai mare parte nu ar fi pentru hashing masiv paralel cu ASIC-uri ca în mineritul bitcoin. Ar fi pentru memorie rapidă organizată pentru căutare, deoarece calcularea hashurilor MD5 are un cost scăzut în comparație cu potrivirea lor cu $2^{\approx31.6}$ hashuri țintă.