Mi az a hash, és miért van mindenhol a technológiában?
Valószínűleg láttál már ilyen karakterláncokat:
e3b0c44298fc1c149afbf4c8996fb924
27ae41e4649b934ca495991b7852b855
Szoftverletöltésekben jelennek meg („ellenőrizd az SHA-256 hasht"), blockchain-beszélgetésekben, jelszóbiztonsági vitákban és számtalan fejlesztői eszközben. De mi is valójában a hash, és miért olyan alapvető a modern technológiában?
A fogalom közérthetően
A hash-függvény bármilyen bemenetet vesz — egy szót, egy mondatot, egy teljes fájlt —, és egy rögzített hosszúságú kimenetet állít elő, amelyet hash-értéknek (más névvel digest, ellenőrzőösszeg vagy ujjlenyomat) nevezünk. A kulcstulajdonságok a következők:
- Determinisztikus. Ugyanaz a bemenet mindig ugyanazt a kimenetet adja.
- Rögzített hosszúságú. Legyen a bemenet bármilyen nagy, a kimenet mindig ugyanakkora.
- Egyirányú. A hash kimenetéből nem lehet visszaállítani az eredeti bemenetet.
- Lavinahatás. A bemenet apró változása teljesen eltérő hasht eredményez.
Gondolj rá úgy, mint egy adatok ujjlenyomataként. Ahogy az ujjlenyomatod egyedileg azonosít téged, de nem használható az arcod rekonstruálásához, a hash egyedileg azonosítja az adatdarabot, de nem használható az eredeti adatok rekonstruálásához.
Egy egyszerű példa
Íme, mit csinál az SHA-256 hash-függvény két nagyon hasonló bemenettel:
| Bemenet | SHA-256 hash (első 16 karakter) |
|---|---|
| „Hello" | 185f8db32271fe25... |
| „hello" | 2cf24dba5fb0a30e... |
| „hello!" | ce06092fb948d9ff... |
Egyetlen karakter megváltoztatása (nagybetűs H kisbetűsre) vagy felkiáltójel hozzáadása teljesen eltérő hasht eredményez. Nincs minta, nincs kiszámítható összefüggés. Ez a lavinahatás a gyakorlatban.
Tudtad? Az üres bemenet (szó szerint semmi) SHA-256 hashje e3b0c44298fc1c14.... Ez egy jól ismert konstans. A világ összes SHA-256 implementációja pontosan ugyanezt a kimenetet állítja elő az üres bemenetre.
Gyakori hash-algoritmusok
MD5
- Kimenet: 128 bit (32 hexadecimális karakter)
- Állapot: Biztonsági célokra törött. Az ütközések (különböző bemenetek azonos hasht hoznak létre) másodpercek alatt generálhatók.
- Még mindig használják: Fájlintegritás-ellenőrzésnél, ahol a biztonság nem aggály (pl. letöltés sérülésének ellenőrzésére).
SHA-1
- Kimenet: 160 bit (40 hexadecimális karakter)
- Állapot: Biztonsági célra elavult. Ütközések demonstrálva lettek.
- Még mindig használják: Régi rendszerek, Git commit azonosítók.
SHA-256
- Kimenet: 256 bit (64 hexadecimális karakter)
- Állapot: Jelenlegi szabvány. Nem ismertek gyakorlati támadások ellene.
- Használják: Jelszótárolás, digitális aláírások, blockchain, fájlellenőrzés, TLS-tanúsítványok.
SHA-512
- Kimenet: 512 bit (128 hexadecimális karakter)
- Állapot: Jelenlegi szabvány. Az SHA-256-nál is nagyobb biztonsági tartalék.
- Használják: Nagy biztonságot igénylő alkalmazások, egyes jelszó-hash sémák.
Figyelmeztetés Az MD5 és SHA-1 soha nem szabad biztonsági célokra (jelszavak, digitális aláírások, tanúsítványok) használni. Kriptográfiai szempontból töröttek. Biztonsággal kapcsolatos mindennél az SHA-256-ot vagy az SHA-512-t kell használni.
Hol használnak hasheket?
Jelszótárolás
Amikor fiókot hozol létre, a webhely nem (vagy nem kellene) tárolnia a tényleges jelszavadat. Ehelyett a jelszavad hashjét tárolja. Bejelentkezéskor a rendszer hasheli a megadott jelszót, és összehasonlítja a tárolt hashsel. Ha egyeznek, be vagy engedve.
Ez azt jelenti, hogy még ha feltörik is az adatbázist, a támadók hasheket kapnak, nem jelszavakat. Nem tudják visszafejteni a hasht a jelszó megtalálásához (bár próbálkozhatnak úgy, hogy gyakori jelszavakat hashelnek, és az eredményeket összehasonlítják a tárolt hashekkel).
A modern jelszó-hash algoritmusok, mint a bcrypt, scrypt és Argon2, tovább mennek azzal, hogy sót (véletlenszerű adatokat) adnak hozzá, és szándékosan lassúak, hogy a brute-force találgatást praktikátlanná tegyék.
Fájlellenőrzés
Szoftver letöltésekor a webhely gyakran megadja a fájl SHA-256 hashét. A letöltés után te magad hasheled a fájlt és összehasonlítod. Ha a hashek egyeznek, a fájl pontosan az, amit a kiadó szánt. Ha eltérnek, a fájl a letöltés során sérült vagy meghamisítottak.
Várt: a1b2c3d4e5f6...
Saját fájl: a1b2c3d4e5f6... ✓ Egyezés — a fájl hiteles
Blockchain és kriptovaluta
A blockchain minden blokkja tartalmazza az előző blokk hashét, törhetetlen láncot alkotva. Ha valaki megpróbál egy múltbeli tranzakciót módosítani, az adott blokk hashje megváltozik, ami megszakítja a láncot ettől a ponttól kezdve, így a hamisítás azonnal észlelhető.
A Bitcoin-bányászat lényegében verseny, hogy megtaláljanak egy bemenetet, amely bizonyos számú nullával kezdődő SHA-256 hasht állít elő.
Digitális aláírások
Digitális dokumentum aláírásakor nem titkosítod a teljes dokumentumot a privát kulcsoddal. Ehelyett a dokumentumot hashelik, és a hasht titkosítják. Ez sokkal gyorsabb, és kompakt aláírást eredményez.
Adatdeduplikáció
A felhőtárolási szolgáltatások hasheket használnak a duplikált fájlok észlelésére. Ha két felhasználó ugyanazt a fájlt tölti fel, annak ugyanaz a hashje, és a szolgáltatásnak csak egy másolatot kell tárolnia.
Git verziókövetés
A Git minden commitja, fájlja és fája az SHA-1 hashje alapján azonosítható. Így tudja a Git, hogy egy fájl megváltozott-e, és így követi nyomon a projekt teljes előzményét.
Tudtad? A Git fokozatosan migrál SHA-1-ről SHA-256-ra. Az átmenet azért kezdődött, mert 2017-ben demonstrálták az SHA-1 ütközéseket, ami elméletileg lehetővé teszi, hogy valaki két különböző commitot hozzon létre ugyanazzal az azonosítóval.
A visszafordíthatatlanság problémája (és miért fontos)
A hashek egyirányú természete egyszerre a legnagyobb erejük és a félreértések leggyakoribb forrása.
Nem lehet „visszafejteni" egy hasht. A hash nem titkosítás. A titkosítás kétirányú: titkosíts egy kulccsal, fejtsd vissza egy kulccsal. A hashelés egyirányú: kiszámíthatod a hasht a bemenetből, de nem számíthatod ki a bemenetet a hashből.
A hash „visszafordításának" egyetlen módja az eredeti bemenet kitalálása, a tipp hashelése és ellenőrzés, hogy egyezik-e. Rövid, egyszerű bemeneteknél (mint a közönséges jelszavak) ez megvalósítható. Hosszú, véletlenszerű bemeneteknél számítástechnikailag lehetetlen.
Ezért számít annyira a jelszó hossza. A „password123" hashét megtalálhatják a közönséges jelszavak kipróbálásával. A „j8#kL9$mN2@pQ5&" hashét az univerzum korát meghaladó ideig tartana megtalálni találgatással.
Próbáld ki te is
A hashek megértésének legjobb módja a kísérletezés. Hashelj egy szót, majd változtass meg egy karaktert, és nézd meg, hogyan változik teljesen a kimenet. Hashelj egy fájlt módosítás előtt és után, és nézd meg a különbséget.
Tipp Generálj és ellenőrizz hasheket bármilyen szöveghez vagy fájlhoz: Hogyan generálj és ellenőrizz hasheket. Próbáld ki az SHA-256-ot, MD5-öt, SHA-512-t és még többet — azonnal, ingyen, a böngésződben.
Fedezd fel a hasheket kézzel:
Ingyenes, azonnali, regisztráció nélkül.