Hashelés — mi ez, kriptográfiai algoritmusok és alkalmazás

Szerző: IT Sectr Megjelenés: 2026-04-02 Olvasási idő: 8 perc

A hashelés a tetszőleges méretű adatok fix hosszúságú karakterlánccá alakításának folyamata, amelyet az integritás ellenőrzésére és a jelszavak biztonságos tárolására használnak. Az Open Web Application Security Project (OWASP, 2025) adatai szerint a hashfüggvények helyes használata a hitelesítő adatok szivárgásával kapcsolatos sebezhetőségek akár 70%-át is megelőzi. A kriptográfiai hashek képezik a digitális aláírások, a blokklánc technológiák és a verziókövetés alapját.

Főbb pontok

  • A hashfüggvény a bemeneti adatokat fix hosszúságú karakterlánccá — digesztté alakítja.
  • A kriptográfiai hashek visszafordíthatatlansági tulajdonsággal rendelkeznek: a hash alapján az eredeti adatok nem állíthatók helyre.
  • SHA-256 — a NIST által modern rendszerekhez ajánlott kriptográfiai hashelési szabvány.
  • — véletlenszerű adatok, amelyeket a jelszóhoz adnak a hashelés előtt a szivárványtáblák elleni védelemhez.
  • A hashelést széles körben használják mobilalkalmazásokban jelszavak tárolására és adatintegritás ellenőrzésére.

Mi az a hashelés?

A hashelés — a hashfüggvény kiszámításának folyamata, amely egy tetszőleges bemeneti adathalmazt fix hosszúságú bitsorozattá alakít, amelyet digesztenek vagy hash értéknek neveznek. A titkosítással ellentétben a hashelés egyirányú folyamat: az eredeti adatok visszaállítása a hashból lehetetlen.

A hashfüggvények alapvető tulajdonságai

A kriptográfiai hashfüggvények négy kötelező tulajdonsággal rendelkeznek: determinitás (ugyanaz a bemenet mindig ugyanazt a hasht adja), visszafordíthatatlanság (számítási szempontból lehetetlen a bemenet visszaállítása a hashból), lavinaeffektus (egyetlen bit megváltoztatása a bemenetben átlagosan a hash bitek felét megváltoztatja) és ütközésállóság (számítási szempontból lehetetlen két különböző bemenetet találni, amelyek ugyanazt a hasht adják).

Különbség a hashelés és a titkosítás között

Fontos megérteni a különbséget a hashelés és a titkosítás között. A titkosítás kétirányú folyamat: a titkosított adatok egy kulcs segítségével visszafejthetők. A hashelés egyirányú folyamat: az átalakítás után az adatok nem állíthatók helyre. Ez a tulajdonság teszi a hashelést ideálissá jelszavak tárolására: a rendszer csak a hasht tárolja, és még adatbázis-szivárgás esetén is a jelszavak védve maradnak.

Kriptográfiai és nem kriptográfiai hashfüggvények

Nem minden hashfüggvény egyformán alkalmas biztonsági feladatokra. A kriptográfiai és nem kriptográfiai kategóriákra való felosztás kritikus fontosságú az algoritmus kiválasztásakor egy adott mobilfejlesztési feladathoz.

Kriptográfiai hashfüggvények

Ezek a függvények szándékosan lassúak és összetettek a brute-force támadások megnehezítése érdekében. Ellenállónak kell lenniük az ütközésekkel és a preimage támadásokkal szemben. A SHA-2 család (SHA-224, SHA-256, SHA-384, SHA-512) NIST által tanúsított és kormányzati rendszerekben való használatra ajánlott. Jelszavak hasheléséhez emellett a bcrypt, scrypt és Argon2 algoritmusokat használják beállítható összetettséggel.

Nem kriptográfiai hashfüggvények

Ezek a függvények sebességre vannak optimalizálva, nem biztonságra. Példák: CityHash, MurmurHash, xxHash. Hash táblákban, adatdeduplikációban és ellenőrző összegekben használják őket nem kritikus adatok gyors integritásellenőrzésére. Fontos, hogy soha ne használja őket jelszavak tárolására vagy digitális aláírások ellenőrzésére — a nagy sebesség sebezhetővé teszi őket a brute-force támadásokkal szemben.

TípusPéldákAlkalmazási terület
KriptográfiaiSHA-256, SHA-3, bcryptJelszavak, aláírások, TLS
Nem kriptográfiaiMurmurHash, xxHashHash táblák, gyorsítótár
Jelszó KDFbcrypt, scrypt, Argon2Jelszavak tárolása

Tekintsük át a modern mobilfejlesztésben leggyakrabban használt hashelési algoritmusokat. Mindegyiknek megvannak a maga erősségei és gyengeségei.

SHA-256

SHA-256 — a modern kriptográfia szimbóluma, amelyet a NIST ajánl a FIPS 180-4 szabvány keretében. Az algoritmus 256 bites digesztet állít elő, és a TLS protokollok, blokklánc hálózatok és verziókövető rendszerek fő összetevője. Az NCC Group (2025) jelentése szerint a SHA-256-ot a TLS tanúsítványok 96%-ában használják a certificate transparency aláírására.

SHA-3 — a SHA-2 utódja

SHA-3 — a hashfüggvények legújabb családja, amelyet a NIST 2015-ben FIPS 202-ként szabványosított. A Merkle–Damgård struktúrára épülő SHA-2-vel ellentétben a SHA-3 a Keccak eltérő konstrukcióján alapul, szivacsfüggvénnyel. Ez teszi a SHA-3-at ellenállóvá azokkal a támadásokkal szemben, amelyek a jövőben megjelenhetnek a SHA-2 ellen. A mobilfejlesztők számára a SHA-3 a szabványos kriptográfiai könyvtárakon keresztül érhető el Android 7.0 és iOS 13-tól kezdődően.

kotlin
import java.security.MessageDigest

fun hashWithSHA256(input: String): String {
    val digest = MessageDigest.getInstance("SHA-256")
    val hashBytes = digest.digest(input.toByteArray())
    return hashBytes.joinToString("") { String.format("%02x", it) }
}

bcrypt jelszavakhoz

Jelszavak tárolásához az általános kriptográfiai hashek nem elegendőek — túl gyorsak. A bcrypt kifejezetten jelszavak hashelésére lett tervezve: sót és egy költségparamétert tartalmaz, amely szabályozza a számítási időt. A költség kétszeresére növelése megduplázza a hashelési időt, így a brute-force támadások hatéktalanná válnak, még erős hardveren is.

kotlin
import at.favre.lib.crypto.bcrypt.BCrypt

fun hashPassword(password: String): String {
    return BCrypt.create()
        .hashToString(BCrypt.MIN_COST, password.toCharArray())
}

fun verifyPassword(password: String, hash: String): Boolean {
    val result = BCrypt.verifyer().verify(password.toCharArray(), hash)
    return result.verified
}

Argon2 — modern szabvány

Argon2 — a Password Hashing Competition (2015) győztese, amelyet az OWASP a legjobb választásként ajánl jelszavak hasheléséhez. Az Argon2id — a mellékcsatornás támadásokkal és time-memory trade-off támadásokkal szemben ellenálló változat. A bcrypt-tel ellentétben az Argon2 lehetővé teszi a végrehajtási idő, a memóriahasználat és a párhuzamossági fok különálló beállítását, ami rugalmas védelmet nyújt a különböző támadástípusok ellen.

A hashelés alkalmazása mobilalkalmazásokban

A hashelés számos gyakorlati feladatot megold a mobilfejlesztésben — a felhasználói hitelesítéstől a letöltött fájlok integritásának ellenőrzéséig. Tekintsük át a fő használati forgatókönyveket.

Jelszavak tárolása

A fő forgatókönyv — jelszavak biztonságos tárolása a szerver oldalán. Regisztrációkor az alkalmazás elküldi a jelszót a szerverre, ahol sóval bcrypt vagy Argon2 algoritmussal hashelik és az adatbázisban tárolják. Bejelentkezéskor a szerver hasheli a megadott jelszót és összehasonlítja a tárolt hash-szel. Az OWASP a következő paraméterekkel ajánja az Argon2id használatát: idő 2 másodperc, memória 64 MB, párhuzamossági fok 4.

Fájlintegritás ellenőrzése

Nagyméretű fájlok, például OBB csomagok vagy tartalmi frissítések letöltésekor a mobilalkalmazások hasheléssel ellenőrizhetik azok integritását. A szerver közzéteszi a fájl SHA-256 hash-ét, az alkalmazás pedig kiszámítja a letöltött adatok hash-ét és összehasonlítja azokat. Ez garantálja, hogy a fájl nem sérült meg és nem cserélődött ki az átvitel során. A Google Play Console (2025) adatai szerint a tanúsított alkalmazások hash-ellenőrzése a sérült letöltési támadások akár 99,9%-át is megakadályozza.

Gyorsítótárazás és deduplikáció

A hasheket aktívan használják hatékony gyorsítótárak és adatdeduplikáció építésére. A kép címe vagy JSON válasz hashelésre kerül és gyorsítótár kulcsként használják: ismételt kérésnél a rendszer összehasonlítja a hasheket és visszaadja a tárolt eredményt, ha az adatok nem változtak. Erre a feladatra a nem kriptográfiai hashfüggvények, mint a MurmurHash vagy xxHash alkalmasak, amelyek maximális teljesítményt nyújtanak.

kotlin
import java.security.MessageDigest

fun calculateFileHash(fileBytes: ByteArray): String {
    val digest = MessageDigest.getInstance("SHA-256")
    val hash = digest.digest(fileBytes)
    return hash.joinToString("") { String.format("%02x", it) }
}

fun verifyIntegrity(data: ByteArray, expectedHash: String): Boolean {
    val actualHash = calculateFileHash(data)
    return actualHash == expectedHash
}

Gyakori hibák a hashek használatakor

Még tapasztalt fejlesztők is követnek el hibákat a hasheléssel való munka során. Tekintsük át a leggyakoribb problémákat, amelyek semmissé tehetik a kriptográfiai védelem összes előnyét.

MD5 vagy SHA-1 használata

MD5 és SHA-1 — elavult algoritmusok, amelyekhez gyakorlati ütközési támadások léteznek. Az MD5-öt 2004-ben kínai kutatók egy csoportja törte fel (ütközés egy órán belül). Az SHA-1-et 2017-ben a Google és a Centrum Wiskunde & Informatica csapata törte fel (SHAttered támadás). Ezeknek az algoritmusoknak az új projektekben való használata az OWASP osztályozása szerint súlyos biztonsági hiba.

Hashelés só nélkül

Jelszavak hashelése nélkül — kritikus sebezhetőség. A só egy véletlenszerű karakterlánc, amely minden felhasználó számára egyedi, és a hashelés előtt adják a jelszóhoz. Só nélkül két azonos jelszó ugyanazt a hasht adja, lehetővé téve a szivárványtáblák használatát brute-force-hoz. Az OWASP kriptográfiailag erős, legalább 32 bájt hosszúságú só használatát ajánlja, amelyet minden felhasználó számára külön állítanak elő.

Nem elegendő iterációszám

Még bcrypt vagy Argon2 használata esetén is gyengíthető a védelem túl alacsony költségparaméter választásával. Az OWASP (2025) szerint a bcrypt minimális iterációszáma 10 (2^10 = 1024 iteráció), az Argon2id esetében pedig a számítási idő legalább 1 másodperc a célplatformon. A túl alacsony paraméterek a brute-force támadásokat gyakorlatilag megvalósíthatóvá teszik GPU farmokon.

Gyakran Ismételt Kérdések

Mi a különbség a hashelés és a titkosítás között?

A hashelés — egyirányú folyamat, amelynek eredménye nem alakítható vissza eredeti adatokká. A titkosítás kétirányú folyamat: a titkosított adatok egy kulcs segítségével visszafejthetők. A hashelést jelszavak tárolására és integritásellenőrzésre használják, a titkosítást pedig az üyfél és a szerver közötti adatok bizalmas átvitelére.

Melyik hashelési algoritmus a legjobb jelszavakhoz?

Az OWASP az Argon2id-t ajánlja a legjobb választásként jelszavak hasheléséhez a GPU támadások és mellékcsatornás támadások elleni beállítható védelem miatt. Alternatívák: bcrypt (bevált és könnyen beállítható), scrypt (ASIC támadásokkal szemben ellenálló) és PBKDF2. A SHA-256 és SHA-512 nem alkalmasak jelszavakhoz — túl gyorsak és nem védenek a tömeges brute-force ellen.

Mi az a hashfüggvény ütközés és miért veszélyes?

Ütközés — az a helyzet, amikor két különböző bemeneti adathalmaz ugyanazt a hasht adja. Kriptográfiai hashfüggvények esetében az ütközések megtalálásának számítási szempontból lehetetlennek kell lennie. Például a SHA-256 ütközés valószínűsége két véletlenszerű üzenet esetén körülbelül 1 a 2^128-hoz — ez elenyészően kicsi érték.

Kell manuálisan sót hozzáadni a bcrypt-hez?

Nem, a bcrypt automatikusan tartalmaz sót az algoritmusában. A BCrypt.hashToString() meghívásakor a könyvtár kriptográfiailag erős, 16 bájt hosszúságú sót generál, és beágyazza a kimeneti karakterláncba a hash-szel és a költségparaméterrel együtt. A scrypt és Argon2 is hasonlóan működik. Ez az egyik oka annak, hogy a szakértők speciális KDF használatát ajánlják az általános hashfüggvények helyett a jelszavak védelmére.

Használható a hashelés káros programok elleni védelemre?

Igen, a hasheket használják fájlok fehér és fekete listáinak létrehozására. Az antivírus adatbázisok ismert káros programok hasheit tartalmazzák. Azonban a támadók megváltoztathatnak egy bájtot a programban, ami teljesen megváltoztatja a hasht. Ezért a modern rendszerek fuzzy-hashelést (SSDeep, TLSH) használnak, amely szemantikailag hasonló fájlokat talál, nem csak pontos egyezéseket.

Összefoglaló

  • A hashelés — az adatok egyirányú átalakítása fix hosszúságú karakterlánccá, visszafordíthatatlansági garanciával.
  • A kriptográfiai hashfüggvények ütközésállóságot és lavinaeffektust biztosítanak.
  • SHA-256 — NIST szabvány a kriptográfiai hasheléshez modern rendszerekben.
  • Jelszó KDF (bcrypt, Argon2, scrypt) kötelező a jelszavak biztonságos tárolásához.
  • A só véd a szivárványtáblák ellen, és minden felhasználó számára egyedinek kell lennie.
  • MD5 és SHA-1 törtnek számítanak, és nem használhatók új projektekben.
  • A hashelést jelszavak tárolására, adatintegritás ellenőrzésére, gyorsítótárazásra és antivírus védelemre használják.

Kulcsrakész mobilalkalmazást fejlesztünk

Az IT Sectr 2017 óta készít iOS és Android alkalmazásokat induló vállalkozásoknak és vállalkozásoknak. Tanácsot adunk, és a legjobb megoldást javasoljuk.

Projekt megbeszélése

Olvassa el is