hash function (tsz. hash functions)
A hash függvény (más néven kivonatoló függvény) egy olyan matematikai algoritmus, amely egy tetszőleges hosszúságú bemeneti adatból egy rögzített hosszúságú kimenetet, úgynevezett hash értéket vagy kivonatot (angolul: digest) állít elő.
Ez a hash érték jellemzően hexadecimális számjegyekből áll (pl. e3b0c442...
) és teljesen egyedi módon azonosítja a bemenetet – legalábbis elméletben. Nézzük meg részletesen, mit jelent ez és hogyan működik.
Egy jó hash függvény a következő tulajdonságokkal rendelkezik:
Ugyanaz a bemenet mindig ugyanazt a hash értéket adja. > Pl. ha „alma” → 9c56cc51...
, akkor bármikor, bárhol, mindig ez lesz az eredmény.
A hash érték kiszámítása nagyon gyors, még nagy adatok esetén is.
Két különböző bemenet sosem (vagy extrém ritkán) adhatja ugyanazt a hash-t. Ezt nevezzük ütközésmentességnek (collision resistance).
A hash értékből nem lehet visszafejteni az eredeti adatot. Ez egyirányú (one-way) művelet.
Egyetlen karakter megváltoztatása a bemenetben teljesen más hash-t eredményez. Ezt nevezik avalanche effect-nek.
Ha egy fájlhoz vagy üzenethez tartozik egy hash érték, és később újraszámítjuk ezt a hash-t, akkor összehasonlíthatjuk az eredeti hash-sel. Ha megegyezik, biztosak lehetünk benne, hogy az adat nem módosult.
Példa: - Fájl letöltésekor a weboldalon látod: SHA256: 1a79a4d60...
- Letöltés után te is kiszámítod a hash-t: ha egyezik → fájl sértetlen.
A jelszavakat nem célszerű titkosítva tárolni — helyette hash-elve szokás: - Felhasználó beírja: macskafogo2025
- A rendszer hash-eli, pl. SHA-256-al - Az adatbázis csak a hash értéket tárolja - Bejelentkezéskor újra hash-el, összehasonlítja a tárolttal
Így ha valaki feltöri az adatbázist, nem jut hozzá közvetlenül a jelszavakhoz.
Egy digitális dokumentumhoz tartozik egy hash, amit az aláíró privát kulccsal titkosít. Ez lesz a digitális aláírás. A vevő oldal a dokumentumból újra kiszámítja a hash-t, és összehasonlítja az aláírt változattal (amit a nyilvános kulccsal dekódol).
A blokkláncokban minden blokk hash-t használ: - Minden blokk tartalmazza az előző blokk hash-ét → így láncolódnak - Ha bármelyik adat megváltozik, az összes következő blokk érvénytelen lesz - Ez biztosítja a visszamenőleges manipuláció elleni védelmet
Algoritmus | Kimenet hossza | Jellemzők |
---|---|---|
MD5 | 128 bit (32 karakter) | Gyors, de nem biztonságos – ütközés lehetséges |
SHA-1 | 160 bit (40 karakter) | Már elavult, nem ajánlott |
SHA-256 | 256 bit (64 karakter) | Biztonságos, elterjedt |
SHA-3 | Változó | Modern, ütközésálló, újabb generáció |
BLAKE2 / BLAKE3 | Gyorsabb és biztonságos | Egyre népszerűbb |
Tulajdonság | Hash | Titkosítás |
---|---|---|
Egyirányú? | ✅ | ❌ (visszafejthető) |
Visszafejthető? | ❌ | ✅ |
Cél | Azonosítás, integritás | Titkosság, olvashatatlanság |
Példa | Jelszóellenőrzés | Adatátvitel titkosítása (VPN, HTTPS) |
Nézzük meg a következő bemenetet:
alma
5bfa1f8e4e0f16f9d99e7a3b28c6f1bf
25ab7f8c55e4d3f4a1134e4eb1c1ea58a9c3b1664a2ce04a7087d07087f3aa6c
Most változtassunk egy karaktert:
almafa
b57c234a12fe7c3654c1538d44f8e28f5e1db5c41d8c9b95adfcb40f9e2d0a02
Látható: teljesen más hash lett → ez az avalanche effect.
A hash függvény egy gyors, egyirányú, fix hosszú eredményt adó algoritmus, amit jellemzően: - Adatintegritás ellenőrzésre - Jelszóellenőrzésre - Digitális aláírásokhoz - Blockchainhez használunk.
A jó hash algoritmus ütközésálló, visszafejthetetlen, és kisebb bemeneti változásokra is radikálisan más kimenetet ad.