Képzeld el, hogy bármely adatot — egyetlen szót, egy regényt, egy 4 GB-os videót — egy rövid, fix hosszúságú karaktersorozattá tudsz csökkenteni, amely egyedileg azonosítja. Változtass egyetlen vesszőt az eredetiben, és a karaktersorozat teljesen mássá válik. És nincs mód a folyamat megfordítására az eredeti adat visszaállításához.
Pontosan ezt csinálja a kriptográfiai hash függvény. Ez a modern biztonság egyik legalapvetőbb építőköve, és csendben védi szinte mindazt, amit online csinálsz.
Az ujjlenyomat-metafora
A hash úgy működik, mint egy digitális ujjlenyomat. Az ujjlenyomatod egyedileg azonosít téged, de senki sem tudja rekonstruálni az arcodat belőle. Hasonlóan, a kriptográfiai hash egyedileg azonosít egy adatot anélkül, hogy felfedné, mi az az adat.
Adj bármilyen bemenetet egy hash függvénynek, és kapsz egy kivonatot (más néven hash értéket vagy ellenőrző összeget) — egy fix hosszúságú hexadecimális karaktersorozatot. A SHA-256, az egyik leggyakoribb algoritmus, mindig 64 karakteres kimenetet állít elő, függetlenül a bemenet méretétől.
| Bemenet | SHA-256 kivonat (első 16 karakter) |
|---|---|
Hello |
185f8db32271fe25... |
hello |
2cf24dba5fb0a30e... |
| Teljes Wikipedia dump | (továbbra is 64 karakter) |
A négy alapvető tulajdonság
Egy függvény csak akkor minősül kriptográfiai hashnek, ha a következő tulajdonságokkal rendelkezik:
- Determinisztikus. Ugyanaz a bemenet mindig ugyanazt a kimenetet adja, bármely gépen, bármikor.
- Egyirányú (pre-image ellenállás). Egy hash ismeretében számításilag kivihetetlen megtalálni az eredeti bemenetet. Nem lehet „visszahash-elni" az adatot.
- Ütközés-ellenálló. Gyakorlatilag lehetetlen két különböző bemenetet találni, amelyek ugyanazt a kivonatot adják. A SHA-256 esetében a véletlen ütközés esélye körülbelül 1 a 2^128-hoz — ez a szám nagyobb, mint a megfigyelhető univerzumban lévő atomok száma.
- Lavinahatás. Egyetlen bit megváltoztatása a bemenetben a kimeneti bitek nagyjából felét megváltoztatja. Nincs észlelhető minta vagy kapcsolat a hasonló bemenetek között.
Fontos különbség: A hash nem titkosítás. A titkosítás kulccsal visszafordítható; a hash szándékosan visszafordíthatatlan. Az adatokat titkosítod, hogy védd az átvitel során. Az adatokat hash-eled, hogy ellenőrizd az integritásukat vagy bizonyítékot tárolj az eredeti megtartása nélkül.
Gyakori hash algoritmusok
MD5 (1991)
- Kimenet: 128 bit (32 hexadecimális karakter)
- Állapot: Kriptográfiailag feltört. A kutatók másodpercek alatt képesek ütközéseket generálni egy laptopon.
- Még használatos: Nem biztonsági ellenőrző összegekhez fájlletöltéseknél és örökölt rendszerekben.
SHA-1 (1995)
- Kimenet: 160 bit (40 hexadecimális karakter)
- Állapot: Elavult biztonsági szempontból. A Google 2017-ben bemutatta a gyakorlati ütközést (a „SHAttered" támadás).
- Még használatos: Régebbi Git repozitóriumokban, néhány örökölt tanúsítványban.
SHA-256 (2001)
- Kimenet: 256 bit (64 hexadecimális karakter)
- Állapot: Jelenlegi szabvány. Nincsenek ismert gyakorlati támadások.
- Felhasználás: TLS tanúsítványok, Bitcoin, jelszó-hash-elés, digitális aláírások, fájlintegritás-ellenőrzés.
SHA-3 (2015)
- Kimenet: Változó (általában 256 bit)
- Állapot: Legújabb szabvány, teljesen más belső felépítésre épül (Keccak szivacs konstrukció), mint a SHA-2 család.
- Felhasználás: Jövőbe tekintő rendszerek, Ethereum, olyan helyzetek, ahol algoritmus-diverzitás szükséges.
| Algoritmus | Kimenet mérete | Biztonságos? | Sebesség |
|---|---|---|---|
| MD5 | 128 bit | Nem | Nagyon gyors |
| SHA-1 | 160 bit | Nem | Gyors |
| SHA-256 | 256 bit | Igen | Mérsékelt |
| SHA-3-256 | 256 bit | Igen | Mérsékelt |
Hol használják a kriptográfiai hash-elést
Jelszótárolás
Amikor fiókot hozol létre, egy jól tervezett rendszer soha nem tárolja a jelszavadat egyszerű szövegként. A hash-t tárolja. Amikor bejelentkezel, a rendszer hash-eli amit beírsz, és összehasonlítja a tárolt értékkel. Még ha az adatbázist feltörik is, a támadók hash-eket kapnak — nem jelszavakat.
A modern rendszerek tovább mennek: véletlenszerű sót (extra adat, amelyet a hash-elés előtt fűznek hozzá) adnak hozzá, és szándékosan lassú algoritmusokat használnak, mint a bcrypt, scrypt vagy Argon2, hogy a brute-force próbálkozásokat kivitelezhetetlenné tegyék.
Fájlintegritás-ellenőrzés
A szoftverforgalmazók SHA-256 ellenőrző összegeket tesznek közzé a letöltések mellett. Letöltés után kiszámítod a fájl hash-ét a gépeden és összehasonlítod. Az egyezés bizonyítja, hogy a fájl nem sérült meg és nem hamisították meg az átvitel során.
Digitális aláírások
Amikor digitálisan aláírsz egy dokumentumot, a rendszer először hash-eli a dokumentumot, majd a privát kulcsoddal titkosítja a hash-t. A címzett a publikus kulcsoddal visszafejti, és összehasonlítja a dokumentum saját hash-ével. Ez sokkal hatékonyabb, mint az egész dokumentum titkosítása, és bizonyítja mind a szerzőséget, mind az integritást.
Blokklánc
Egy blokklánc minden blokkja tartalmazza az előző blokk hash-ét, így egy megváltoztathatatlan láncot hoz létre. Bármely korábbi tranzakció megváltoztatása megváltoztatja annak blokkjának hash-ét, ami megtöri a láncot ettől a ponttól, és a hamisítás azonnal láthatóvá válik.
Miért tekintik feltörtnek az MD5-öt és a SHA-1-et
Egy hash algoritmus „feltört", ha valaki szándékosan képes két különböző bemenetet létrehozni, amelyek ugyanazt a hash-t adják (ez az ütközés). Ez aláássa minden olyan felhasználási esetet, amely az egyediségre épít.
- MD5: Ütközések másodpercek alatt generálhatók. Kutatók két különböző PDF fájlt hoztak létre azonos MD5 hash-sel.
- SHA-1: A SHAttered támadás 2017-ben két különböző PDF-et hozott létre azonos SHA-1 hash-sel, ami körülbelül 6500 évnyi egyprocesszoros számítást igényelt (felhő erőforrásokkal megvalósítható).
Gyakorlati szabály: Soha ne használj MD5-öt vagy SHA-1-et semmihez, ami biztonsággal kapcsolatos — jelszavak, tanúsítványok, digitális aláírások vagy integritás-ellenőrzés, ahol támadó is érintett lehet. Használj helyette SHA-256-ot vagy SHA-3-at.
Tovább
A hash-elés azok közé a fogalmak közé tartozik, amelyek intuitívvá válnak, ha kísérletezel vele. Próbálj meg hash-elni egy mondatot, majd változtass meg egy karaktert, és figyeld meg a lavinahatást saját szemeddel.
- Hogyan generálj és ellenőrizz hash-eket — lépésről lépésre útmutató
- Hash generátor — SHA-256, MD5, SHA-512 és más hash-ek azonnali kiszámítása a böngésződben
- Hash azonosító — illeszd be az ismeretlen hash-t és azonosítsd az algoritmusát
