Šta je heš
Kriptografski heš pretvara bilo koji ulaz u otisak fiksne veličine. Promenite jedan bit ulaza i ceo izlaz se menja; iz izlaza ne postoji praktičan put nazad do ulaza; i neizvodljivo je naći dva ulaza sa istim hešom (za algoritme koji su još bezbedni). To hešove čini korisnim za proveru preuzimanja, otkrivanje izmena, deduplikaciju podataka i, uz so i spor algoritam, čuvanje lozinki.
| Algoritam | Izlaz | Status | Upotreba danas |
|---|---|---|---|
| MD5 | 128 bitova (32 heks) | Probijen: kolizije su trivijalne | Nasleđene kontrolne sume, keš ključevi. Nikada za bezbednost. |
| SHA-1 | 160 bitova (40 heks) | Probijen: kolizije demonstrirane (2017) | Git ID-jevi objekata (u zameni). Ne za potpise. |
| SHA-256 | 256 bitova (64 heks) | Bezbedan | Podrazumevani izbor: TLS, potpisivanje koda, kontrolne sume preuzimanja, Bitcoin. |
| SHA-384 | 384 bita (96 heks) | Bezbedan | Gde se želi veća margina; subresource integrity. |
| SHA-512 | 512 bitova (128 heks) | Bezbedan | Brži od SHA-256 na 64-bitnim procesorima; Linux heševi lozinki (sha512crypt). |
HMAC
HMAC umešava tajni ključ u heš na određen način (RFC 2104) tako da samo neko sa ključem može da proizvede ili proveri vrednost. To je mehanizam iza HS256 JWT-ova, potpisa webhookova (GitHub, Stripe), potpisivanja AWS zahteva i TOTP kodova. Običan hash(key + message) nije bezbedan za ovo; HMAC postoji da bi otklonio slabost te konstrukcije na produženje dužine (length extension).
Provera preuzimanja
- Nađite objavljenu kontrolnu sumu na stranici za preuzimanje (često datoteka
SHA256SUMS). - Prevucite preuzetu datoteku ovde, ili pokrenite
sha256sum fileu shellu. - Nalepite objavljenu vrednost u polje za poređenje. Poklapanje znači da je datoteka bajt za bajt ono što je objavljeno.
Poklapanje heša dokazuje integritet, a ne autentičnost: ako napadač može da promeni datoteku, može da promeni i kontrolnu sumu pored nje. Za autentičnost vam treba potpis (GPG, Sigstore, minisign).
Lozinke
Ne čuvajte lozinke kao SHA-256 hešove. Brzi hešovi mogu da se pogađaju milijardama puta u sekundi na GPU-u. Koristite sporu, soljenu, memorijski zahtevnu funkciju namenjenu tom poslu: Argon2id, scrypt ili bcrypt.
Pitanja
Koji heš da koristim?
SHA-256 osim ako nemate konkretan razlog za nešto drugo. Bezbedan je, univerzalno podržan i brz. SHA-512 je malo brži na 64-bitnom hardveru. MD5 i SHA-1 su u redu samo za nebezbednosne namene kao što su keš ključevi.
Može li heš da se dešifruje?
Ne. Heš nije šifrovanje; nema ključa i nema inverzne funkcije. Ono što napadači rade umesto toga je pogađanje ulaza i poređenje hešova, što radi za kratke ili uobičajene ulaze (otuda rainbow tabele) i zato lozinkama trebaju so i spori hešovi.
Zašto se moj MD5 razlikuje od onog na sajtu?
Obično završeci redova (CRLF naspram LF), novi red na kraju, ili drugačije kodiranje teksta. Heširajte tačne bajtove: za datoteku koristite zonu za prevlačenje umesto lepljenja njenog sadržaja.
Da li je SHA-256 izračunat ovde isti kao sha256sum?
Da, bajt za bajt. Alat koristi WebCrypto implementaciju pregledača za SHA porodicu. Za tekstualni unos bajtovi su UTF-8 kodiranje onoga što ste ukucali.
Da li se moja datoteka ili lozinka negde šalje?
Ne. Heširanje se obavlja lokalno u JavaScriptu. Sajt nema serversku komponentu koja bi mogla da je primi.