Liniile de rezumat au forma „ALGORITM hash”, astfel încât să poată fi copiate în note de lansare sau în manifeste de descărcare.
Generator de hash-uri — fiecare algoritm explicat de la zero
Într-o propoziție: o funcție hash criptografică este un blender cu sens unic — primește oricâte octeți și îi strânge într-o amprentă de lungime fixă, astfel încât aceeași intrare dă întotdeauna aceeași amprentă, dar amprenta nu spune nimic despre cum s-ar putea reconstrui intrarea. Această pagină rulează unsprezece dintre ele integral în fila browserului.
Fiecare algoritm de mai jos este explicat în aceiași patru pași: ce este, în cuvinte simple, intuiția funcționării fără formule, dacă ar trebui folosit și astăzi și greșelile pe care oamenii le fac cel mai des cu el.
MD5
Ce este. MD5 (1992) comprimă orice intrare într-o amprentă de 128 de biți (32 de caractere hexazecimale). A fost proiectat să fie rapid pe calculatoarele anilor 1990, și chiar este — tocmai de aceea este încă peste tot: pagini de descărcare de software, cache-uri de deduplicare a fișierelor, chei de baze de date vechi.
Cum funcționează, intuitiv. Intrarea se taie în blocuri de 64 de octeți. Fiecare bloc este amestecat într-o stare glisantă de 128 de biți de patru ori la rând (patru runde de amestec ușor diferite), iar după ultimul bloc starea se afișează ca rezumat. Amestecul este construit din adunări, rotații și căutări în tabele — ieftin atunci, ieftin acum.
Ar trebui să se folosească? Pentru sume de control unde nimeni nu încearcă să păcălească destinatarul — detectarea unei descărcări corupte, găsirea fișierelor duplicate — da, încă raportează perfect corupția. Pentru orice situație adversară, nu: din 2004 cercetătorii pot construi două fișiere diferite cu același MD5 în câteva secunde, iar falsificări reale de certificate prin coliziuni MD5 au avut loc în 2008. Este un număr de serie, nu un lacăt.
Greșeli frecvente. Folosirea MD5 pentru parole (mult prea rapid — vezi Generatorul de hash-uri pentru parole pentru ce ar trebui folosit în loc); încrederea într-un fișier pentru că „MD5-ul se potrivește”, când atacatorul a publicat și el MD5-ul; și lipirea întregii linii MD5 (file) = hash în loc de doar hash-ul — caseta de verificare de mai sus acceptă ambele.
SHA-1
Ce este. SHA-1 (1995, NSA) produce un rezumat de 160 de biți (40 de caractere hexazecimale). Timp de douăzeci de ani a fost hash-ul de integritate implicit pentru Git, certificatele TLS și semnăturile PGP.
Cum funcționează, intuitiv. Aceeași rețetă de familie ca MD5, dar cu o stare de 160 de biți, 80 de runde de amestec pe bloc de 64 de octeți și un set mai larg de operații. Rundele suplimentare trebuiau să facă blenderul mai greu de inversat prin inginerie inversă.
Ar trebui să se folosească? Nu, pentru orice situație adversară. Spargerea teoretică a devenit practică în 2017, când Google a produs două fișiere PDF diferite cu valori SHA-1 identice (atacul SHAttered, de aproximativ 6500 de ani-CPU). Git încă stochează obiectele sub SHA-1, dar îl tratează doar ca identificator și a adăugat de atunci detectarea coliziunilor. Pentru lucrări noi se folosește SHA-256 sau SHA-3.
Greșeli frecvente. Să se creadă că 160 de biți „sunt încă destul de lungi” — spargerea ține de structura internă, nu de forța brută; și confundarea RIPEMD-160 cu SHA-1 pentru că ambele au 40 de caractere hexazecimale (caseta de identificare de mai sus le deosebește).
SHA-2: SHA-256, SHA-384 și SHA-512
Ce este. Familia SHA-2 (2001, NSA) este calul de povară al verificării moderne a integrității. SHA-256 dă 256 de biți (64 de caractere hexazecimale), SHA-512 dă 512 biți, iar SHA-384 este SHA-512 cu rezultatul tăiat la 384 de biți — util când un protocol impune o etichetă mai scurtă.
Cum funcționează, intuitiv. Blocurile de 64 de octeți (sau de 128 de octeți pentru variantele de 512 biți) sunt îndoite într-o stare de 8 cuvinte prin 64 (sau 80) de runde de pași adunare-rotație-amestec. Spre deosebire de MD5, programarea întâi întinde fiecare bloc într-un buffer extins, iar aceasta este ceea ce a învins stilul de atac care a spart MD5 și SHA-1. O curiozitate care merită cunoscută: pe procesoarele pe 64 de biți SHA-512 este mai rapid decât SHA-256, pentru că prelucrează de două ori mai multe date pe rundă, cu aritmetică pe 64 de biți.
Ar trebui să se folosească? Da — SHA-256 este răspunsul implicit pentru sume de control ale fișierelor, semnarea codului și amprentele certificatelor astăzi, fără nicio spargere practică cunoscută după două decenii de analiză. SHA-384/512 se folosesc atunci când se dorește mai multă marjă sau când platforma le rulează mai rapid.
Greșeli frecvente. Folosirea doar a SHA-256 pentru parole — este un hash rapid, iar viteza este dușmanul aici (se folosesc bcrypt/scrypt/Argon2id); și confundarea lungimii rezumatului cu puterea pentru setările de rezistență la coliziuni adversare — lungimea stabilește doar plafonul.
SHA-3 (SHA3-256 / SHA3-512) și Keccak-256
Ce este. SHA-3 (2015, standardizat din trimiterea Keccak de Bertoni, Daemen, Peeters și Van Assche) este al treilea standard NIST pentru hash-uri. Nu are nimic în comun cu structura internă a SHA-2 — a fost ales tocmai ca un rezerv independent, în cazul în care SHA-2 ar cădea vreodată.
Cum funcționează, intuitiv. În loc să amestece blocuri printr-o stare mică, Keccak „înmoaie și stoarce” în mod repetat: intrarea este absorbită bit cu bit într-un burete de 5×5×64 de biți, întregul burete este amestecat printr-o permutare fixă (24 de runde de operații pe biți peste întreaga stare), iar apoi biții rezumatului sunt storși afară. Imaginea cu buretele este întreaga idee: biții de capacitate nu se scot niciodată, iar ei sunt cei care fac funcția ireversibilă.
Keccak-256 față de SHA3-256. Diferă exact printr-un octet de padding. Trimiterea originală a echipei Keccak a completat ultimul bloc cu 0x01; NIST a schimbat padding-ul standard în 0x06 (separarea domeniilor, pe care o folosesc variantele Keccak din epoca SHA-2). Ethereum a adoptat padding-ul original, astfel că „keccak256”-ul său diferă de SHA3-256-ul standard pentru fiecare intrare. Această pagină le oferă pe ambele, bifate separat.
Ar trebui să se folosească? Da — fie ca primă alegere când politica cere un algoritm care nu este din familia SHA-2, fie oriunde ecosistemul îl vorbește deja. Greșeli frecvente: presupunerea că SHA3-256 și Keccak-256 sunt interschimbabile (nu sunt — compară cele două rânduri pe care le produce această pagină pentru aceeași intrare); și presupunerea că „SHA-3” îl înlocuiește pe SHA-2 — ambele sunt sigure, SHA-2 rămâne cel mai răspândit.
RIPEMD-160
Ce este. RIPEMD-160 (1996, consorțiul RIPE al academicienilor europeni, consolidat de Dobbertin, Bosselaers și Preneel) produce 160 de biți. Este un design în întregime european, independent în mod deliberat de familia SHA proiectată de NSA.
Cum funcționează, intuitiv. Fiecare bloc de 64 de octeți este procesat de două linii paralele de câte 80 de runde, cu constante și cantități de rotație diferite; la final cele două linii și starea veche se combină. Structura cu două trasee a fost modul prin care proiectanții au rezistat atacurilor diferențiale care spărgeau alte hash-uri din anii 1990.
Ar trebui să se folosească? În practică supraviețuiește mai ales în alte sisteme: cheile publice Bitcoin sunt hash-uite cu RIPEMD-160(SHA-256(pk)), cheile OpenPGP mai vechi îl oferă ca opțiune de hash, iar el este hash-ul tradițional pentru piesele BitTorrent v1, alături de SHA-1. Nu are un atac practic de coliziune, dar dimensiunea de 160 de biți îi dă cea mai mică marjă de siguranță de pe această pagină. Pentru utilizarea nouă de sine stătătoare se preferă SHA-256 sau SHA-3.
Greșeli frecvente. Să se creadă că cele două linii paralele îl fac „de două ori mai puternic” — mărimea rezultatului este cea care limitează rezistența la coliziuni; și confundarea cu SHA-1 (aceeași lungime de 40 de caractere hexazecimale; caseta de identificare de mai sus listează ambele posibilități una lângă alta).
BLAKE2b-512 și BLAKE2s-256
Ce este. BLAKE2 (2013, Aumasson, Neves, Wilcox-O’Hearn și Winnerlein) este un hash proiectat pentru viteza software: BLAKE2b vizează platformele pe 64 de biți cu ieșire de până la 512 biți, iar BLAKE2s vizează platformele pe 32 de biți cu ieșire de până la 256 de biți.
Cum funcționează, intuitiv. Descinde din finalistul SHA-3 BLAKE, al cărui nucleu este o permutare cu cheie împrumutată de la cifrul-flux ChaCha: o matrice 4×4 de cuvinte este amestecată prin alternarea pașilor de amestec pe coloane și pe diagonale — ca și cum o grilă ar fi amestecată mai întâi de sus în jos, apoi de-a lungul diagonalelor — pentru 12 (BLAKE2b) sau 10 (BLAKE2s) runde pe bloc. Deoarece acești pași se mapează foarte bine pe instrucțiunile procesorului, BLAKE2 este adesea mai rapid decât MD5, oferind în același timp o securitate comparabilă cu SHA-3.
Ar trebui să se folosească? Da — este un design complet modern, nespart, popular în software sensibil la performanță (integritatea pachetelor în unele ecosisteme, stocare adresată prin conținut, deduplicare de backup) și ca MAC rapid. Pe această pagină, BLAKE2b-512 dă cele mai lungi rezumate, iar BLAKE2s-256 este varianta modernă compactă.
Greșeli frecvente. Gândirea că „mai rapid înseamnă mai slab” — BLAKE2 este mai rapid prin proiectare, nu prin tăierea colțurilor; și faptul că nu se știe că BLAKE2 acceptă și o cheie (devenind un MAC) sau un șir de personalizare — această pagină îl folosește întotdeauna în mod simplu, fără cheie.
Citirea casetelor Verificare și Identificare
Verificare. Caseta de verificare normalizează orice se lipește — majuscule sau minuscule, două puncte la fiecare două cifre, un prefix sha256=, învelișul de tip BSD SHA256 (file) = hash, o linie GNU md5sum cu numele fișierului după hash, \r\n rătăcite — apoi recalculează fiecare algoritm bifat pe intrarea curentă (text sau fișierul ales) și raportează fiecare algoritm care se potrivește. O potrivire verde înseamnă „acești octeți sunt exact ceea ce a hash-uit editorul”; roșu înseamnă că niciunul dintre algoritmii aleși nu l-a produs — se încearcă bifarea mai multor algoritmi sau se verifică dacă lipirea a fost trunchiată.
Identificare. Caseta de identificare nu calculează niciun hash; ea citește forma șirului. Lungimea restrânge candidații: 32 de caractere hexazecimale pot fi MD5, 40 pot fi SHA-1 sau RIPEMD-160, 64 pot fi SHA-256 / SHA3-256 / Keccak-256 / BLAKE2s-256, 96 SHA-384, 128 SHA-512 / SHA3-512 / BLAKE2b-512. Prefixele arată hash-urile de parolă ($2a$/$2b$/$2y$ bcrypt, $argon2id$, $scrypt$, $6$ sha512crypt, $1$ MD5-crypt) — acestea sunt o altă specie (a se vedea Generatorul de hash-uri pentru parole) și nu sunt calculate în mod deliberat de această pagină. Un șir cu +, / și =, a cărui lungime este multiplu de 4, este mai probabil date codificate în Base64 decât un rezumat hexazecimal; instrumentul îl decodează și raportează lungimea în octeți pe care ar corespunde.
Ce poate și ce nu poate spune identificarea. Lungimea și setul de caractere sunt amprente ale formatului, nu dovada algoritmului: două șiruri de 64 de caractere hexazecimale pot proveni de la SHA-256 sau de la SHA-512 trunchiat. Identificatorul ordonează posibilitățile; caseta de verificare este cea care dovedește cu care algoritm se potrivesc de fapt octeții.
Toți cei unsprezece dintr-o privire
| Algoritm |
Digestie |
Inventat |
Rezumatul pentru „The quick brown fox jumps over the lazy dog” |
| MD5 | 128 biți | 1992 | 9e107d9d372bb6826bd81d3542a419d6 |
| SHA-1 | 160 biți | 1995 | 2fd4e1c67a2d28fced849ee1bb76e7391b93eb12 |
| SHA-256 | 256 biți | 2001 | d7a8fbb307d7809469ca9abcb0082e4f8d5651e46d3cdb762d02d0bf37c9e592 |
| SHA-384 | 384 biți | 2001 | ca737f1014a48f4c0b6dd43cb177b0afd9e5169367544c494011e3317dbf9a509cb1e5dc1e85a941bbee3d7f2afbc9b1 |
| SHA-512 | 512 biți | 2001 | 07e547d9586f6a73f73fbac0435ed76951218fb7d0c8d788a309d785436bbb642e93a252a954f23912547d1e8a3b5ed6e1bfd7097821233fa0538f3db854fee6 |
| SHA3-256 | 256 biți | 2015 | 69070dda01975c8c120c3aada1b282394e7f032fa9cf32f4cb2259a0897dfc04 |
| SHA3-512 | 512 biți | 2015 | 01dedd5de4ef14642445ba5f5b97c15e47b9ad931326e4b0727cd94cefc44fff23f07bf543139939b49128caf436dc1bdee54fcb24023a08d9403f9b4bf0d450 |
| Keccak-256 | 256 biți | dinaintea anului 2015 | 4d741b6f1eb29cb2a9b9911c82f56fa8d73b04959d3d9d222895df6c0b28aa15 |
| RIPEMD-160 | 160 biți | 1996 | 37f332f68db77bd9d7edd4969571ad671cf9dd3b |
| BLAKE2b-512 | 512 biți | 2013 | a8add4bdddfd93e4877d2746e62817b116364a1fa7bc148d95090bc7333b3673f82401cf7aa2e4cb1ecd90296e3f14cb5413f8ed77be73045b13914cdcd6a918 |
| BLAKE2s-256 | 256 biți | 2013 | 606beeec743ccbeff6cbcdf5d5302aa855c256c29b88c8ed331ea1a6bf3c8812 |
Fiecare rezumat din tabelul de mai sus este produs de motoarele din această pagină — se bifează toți algoritmii, se apasă Mostră și se compară. Rândurile SHA-3, Keccak, RIPEMD-160 și BLAKE2 provin din nucleul auto-găzduit crypto-shared.js, folosit în toate instrumentele criptografice ale acestui site.
Întrebări frecvente
Ce casetă să fie de încredere pentru o descărcare? Caseta de verificare, cu SHA-256 bifat — majoritatea editorilor semnează astăzi cu SHA-256 sau SHA-512. Caseta de identificare doar numește variantele posibile; ea nu dovedește nimic despre fișier.
De ce este Keccak-256 în listă? Pentru că Ethereum, Swarm și câteva sisteme cu registru contabil au standardizat padding-ul dinaintea standardului. Dacă se verifică un keccak256 din Ethereum, trebuie folosit acel rând, nu SHA3-256.
Pot două intrări diferite să aibă același rezumat? În teorie, da — infinit de multe intrări se mapează într-o mulțime finită de rezumate (principiul cutiilor). În practică, găsirea unei astfel de perechi înainte de moartea termică a universului este ceea ce înseamnă „rezistența la coliziuni”, iar fiecare algoritm de mai sus, în afară de MD5 și SHA-1, rămâne în picioare.
Hash-urile sunt criptare? Nu. Criptarea se inversează cu o cheie; un hash este un blender cu sens unic. Nimic de pe această pagină nu poate fi „decriptat” înapoi în textul original — iar aceasta este o trăsătură, nu o limitare.