În prima zi a anului 2016, Mozilla a încetat să susțină o tehnologie de securitate slabă numită SHA-1 în browserul web Firefox. Aproape imediat, ei și-au inversat decizia, deoarece ar reduce accesul la unele site-uri mai vechi. Dar, în februarie 2017, temerile lor s-au dovedit a fi adevărate: cercetătorii au rupt SHA-1 prin crearea primului atac de coliziune în lumea reală. Iată ce înseamnă asta.
SHA-ul din SHA-1 este valabil Secure Algorithm Hash, și, pur și simplu, ați putea să vă gândiți la ea ca pe un fel de problemă sau metodă de matematică scrambleaza datele introduse in el. Dezvoltat de către ANS din Statele Unite, este o componentă esențială a multor tehnologii folosite pentru criptarea transmisiilor importante pe internet. Metodele obișnuite de criptare SSL și TLS, despre care ați auzit, pot utiliza o funcție hash ca SHA-1 pentru a crea certificatele semnate pe care le vedeți în bara de instrumente a browserului.
Nu vom intra adânc în matematica și informatică a oricărei funcții SHA, dar aici este ideea de bază. Un "hash" este un cod unic bazat pe intrarea oricăror date. Chiar și un șir de litere mici, aleatorii introduse într-o funcție de tip hash, cum ar fi SHA-1, va returna un număr lung de seturi de caractere, făcându-l (potențial) imposibil de revertit șirul de caractere înapoi la datele originale. Acesta este modul în care funcționează de obicei stocarea parolelor. Când creați o parolă, introducerea parolei este șterse și stocată de server. La întoarcere, când introduceți parola, este reluată din nou. Dacă se potrivește cu hash-ul inițial, se poate presupune că intrarea este aceeași și veți avea acces la datele dvs.
Funcțiile de ștergere sunt utile în primul rând pentru că ele ușurează să se determine dacă intrarea, de exemplu, un fișier sau o parolă, sa schimbat. Atunci când datele de intrare sunt secrete, ca o parolă, hash-ul este aproape imposibil de inversat și de recuperare a datelor originale (cunoscute și sub denumirea de "cheie"). Acest lucru este un pic diferit de "criptare", al cărui scop este codarea datelor cu scopul de a le decodifica mai târziu, folosind chei și chei secrete. Hashes are pur și simplu menirea de a asigura integritatea datelor - pentru a vă asigura că totul este același. Git, software-ul de control al versiunii și distribuție pentru codul sursă open source, folosește SHA-1 hash-uri din acest motiv.
Este o mulțime de informații tehnice, dar să spunem pur și simplu: un hash nu este același lucru cu criptarea, de atunci este folosit pentru a identifica dacă un fișier a fost modificat.
Să presupunem că trebuie să vizitați un site privat. Banca dvs., adresa dvs. de e-mail, chiar și contul dvs. Facebook - toate utilizează criptarea pentru a păstra datele private pe care le trimiteți. Un site web profesionist va furniza o criptare prin obținerea unui certificat de la o autoritate de încredere - o terță parte, care are încredere în asigurarea faptului că criptarea este la nivel, privată între site și utilizator și nu este spionată de nicio altă parte. Această relație cu terțul, numită Autoritățile de certificare, sau CA, este crucială, deoarece orice utilizator poate crea un certificat "auto-semnat" - îl puteți face chiar și pe o mașină care rulează Linux cu Open SSL. Symantec și Digicert sunt, de exemplu, două companii cunoscute de CA.
Să trecem printr-un scenariu teoretic: Cum-Pentru a Geek vrea să păstreze autentificat în sesiunile utilizatorilor private cu criptare, așa că petiționează un CA ca Symantec cu un Solicitarea semnării certificatului, sau CSR. Ei creează o cheia publică și cheia privată pentru criptarea și decriptarea datelor trimise prin internet. Solicitarea CSR trimite cheia publică la Symantec împreună cu informații despre site-ul Web. Symantec verifică cheia împotriva înregistrării sale pentru a verifica dacă datele sunt neschimbate de către toate părțile, deoarece orice schimbare redusă a datelor face hașurile radical diferite.
Cheile publice și certificatele digitale sunt semnate de funcțiile hash, deoarece rezultatele acestor funcții sunt ușor de văzut. O cheie publică și un certificat cu un hash verificat de la Symantec (în exemplul nostru), o autoritate, asigură unui utilizator de How-To Geek că cheia este neschimbată și nu este trimisă de cineva rău intenționat.
Deoarece hash-ul este ușor de monitorizat și imposibil (unele ar spune "greu") pentru a inversa, semnatura hash verificată și corectă înseamnă că certificatul și conexiunea pot fi de încredere și că datele pot fi convenite să fie trimise criptate de la capăt la sfârșit . Dar dacă hașheta nu era de fapt unică?
S-ar putea să fi auzit de "Problema zilei de naștere" în matematică, deși nu ați știut ce a fost numit. Ideea de bază este că, dacă aduni un grup destul de mare de oameni, șansele sunt destul de mari încât două sau mai multe persoane să aibă aceeași zi de naștere. Mai mult decât v-ați aștepta, de fapt - destul ca să pară o coincidență ciudată. Într-un grup de 23 de persoane, există o șansă de 50% ca cei doi să aibă o zi de naștere.
Aceasta este slăbiciunea inerentă a tuturor hash-urilor, inclusiv SHA-1. Teoretic, funcția SHA ar trebui să creeze un hash unic pentru toate datele introduse în ea, dar pe măsură ce numărul de hash-uri crește, devine mai probabil ca perechi diferite de date să poată crea același hash. Așadar, s-ar putea crea un certificat de încredere, cu un hash identic cu un certificat de încredere. Dacă te-au pus să instalezi acel certificat care nu are încredere, ar putea fi mascat ca fiind de încredere și ar distribui date rău-intenționate.
Găsirea corespondenței hash în două fișiere se numește a atac de coliziune. Este cunoscut faptul că cel puțin un atac de coliziune la scară largă sa produs deja pentru hash-urile MD5. Dar, pe 27 februarie, 2017, Google a anunțat SHAttered, prima ciocnire produsă pentru SHA-1.Google a reușit să creeze un fișier PDF care avea același hash SHA-1 ca un alt fișier PDF, în ciuda conținutului diferit.
SHAttered a fost realizat pe un fișier PDF. Fișierele PDF sunt un format de fișier relativ slab; o mulțime de mici modificări de nivel de biți se pot face fără a împiedica cititorii să o deschidă sau să cauzeze diferențe vizibile. De asemenea, PDF-urile sunt adesea folosite pentru a livra programe malware. În timp ce SHAttered ar putea funcționa pe alte tipuri de fișiere, cum ar fi ISO, certificatele sunt specificate rigid, făcând un astfel de atac improbabil.
Deci, cât de ușor este acest atac să efectueze? SHAttered sa bazat pe o metodă descoperită de Marc Stevens în 2012, care a necesitat operațiuni SHA-1 de peste 2 60,3 (9,223 quintillion) - un număr uluitor. Cu toate acestea, această metodă are încă 100.000 de ori mai puține operații decât ar fi fost necesar pentru a obține același rezultat cu forța bruta. Google a constatat că, cu 110 carduri grafice de ultimă generație care funcționează în paralel, ar dura aproximativ un an pentru a produce o coliziune. Închirierea acestui timp de calcul de la Amazon AWS ar costa aproximativ 110.000 $. Rețineți că, pe măsură ce scăderea prețurilor pentru componentele calculatorului și puteți obține mai multă putere pentru mai puțin, atacurile precum SHAttered devin mai ușor de tras.
110.000 de dolari ar putea părea mult, dar se află în domeniul accesibilității pentru anumite organizații - ceea ce înseamnă că cybervillianii din viața reală ar putea să creeze semnături digitale de documente, să interfereze cu sistemele de backup și de control al versiunilor precum Git și SVN sau să facă legitime un ISO Linux malware.
Din fericire, există factori atenuanți care împiedică astfel de atacuri. SHA-1 este rar folosit pentru semnăturile digitale. Autoritățile de certificare nu mai oferă certificate semnate cu SHA-1, iar Chrome și Firefox au renunțat la asistență pentru acestea. Distribuțiile de tip Linux diferă, de regulă, mai des decât o dată pe an, ceea ce face imposibil pentru un atacator să creeze o versiune rău-intenționată și apoi să genereze o polițată pentru a avea același hash SHA-1.
Pe de altă parte, unele atacuri bazate pe SHAttered se întâmplă deja în lumea reală. Sistemul de control al versiunii SVN utilizează SHA-1 pentru a diferenția fișierele. Încărcarea celor două PDF-uri cu shash-uri identice SHA-1 într-un depozit SVN va provoca o corupere.
Nu există multe pentru utilizatorul tipic de făcut. Dacă utilizați sumele de control pentru a compara fișierele, trebuie să utilizați SHA-2 (SHA-256) sau SHA-3, nu SHA-1 sau MD5. De asemenea, dacă sunteți un dezvoltator, asigurați-vă că utilizați algoritmi de hashing mai moderni, cum ar fi SHA-2, SHA-3 sau bcrypt. Dacă sunteți îngrijorat de faptul că SHAttered a fost folosit pentru a da două fișiere distincte același hash, Google a lansat un instrument pe site-ul SHAttered care vă poate verifica.
Credite de imagine: Lego Firefox, O mulțime de Hash, vă rugăm să nu rănesc autor necunoscut Web, Google.