AES: mi ez, a szimmetrikus titkosítási algoritmus és hol alkalmazzák

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

AES (Advanced Encryption Standard) — egy szimmetrikus blokk-titkosítási algoritmus, amelyet 2001-ben fogadott el az Egyesült Államok Nemzeti Szabványügyi és Technológiai Intézete (NIST) hivatalos szabványként. Az AES a régi DES-t váltotta fel, és azóta a világ legelterjedtebb titkosítási algoritmusává vált, amelyet bankrendszerektől a mobilalkalmazásokig használnak. A NIST (2023) adatai szerint az AES 2^256 műveletnek megfelelő ellenállást biztosít egy 256 bites kulcs esetén, ami sebezhetetlenné teszi a modern brute force támadásokkal szemben. NIST FIPS 197, 2023

Főbb pontok

  • AES — szimmetrikus blokk-rejtjel rögzített 128 bites blokkmérettel és 128, 192 vagy 256 bites kulcsokkal.
  • GCM mód — az AES ajánlott üzemmódja mobilalkalmazásokhoz, hitelesített titkosítást biztosítva.
  • AES-256 — a maximális ellenállási szintű verzió, magas érzékenységű adatok védelmére ajánlva.
  • Hardveres gyorsítás — a processzor AES-NI utasításai lehetővé teszik a titkosítást akár 10 GB/s sebességgel a modern eszközökön.
  • Android és iOS beépített API-kat biztosítanak az AES-hez: Android Keystore és iOS CryptoKit hardveres gyorsítás támogatásával.

Mi az AES?

AES (Advanced Encryption Standard) — egy szimmetrikus blokk-rejtjel, amelyet Joan Daemen és Vincent Rijmen belga kriptográfusok fejlesztettek ki Rijndael néven. 2001-ben a NIST öt évnyi nyílt tesztelés és elemzés után a Rijndaelet választotta az USA új titkosítási szabványának verseny győzteseként. Az AES rögzített méretű (128 bites) adatblokkokkal dolgozik, és három kulcshosszt támogat: 128, 192 és 256 bitet. Az átalakítási körök száma a kulcs hosszától függ: 10 kör a 128 bites, 12 a 192 bites és 14 a 256 bites kulcs esetén. Minden kör négy műveletet foglal magában: SubBytes (bájtok nemlineáris helyettesítése S-box segítségével), ShiftRows (sorok ciklikus eltolása), MixColumns (oszlopok összekeverése) és AddRoundKey (a körkulcs alkalmazása).

Az AES szabvány története

Az AES fejlesztése 1997-ben kezdődött, amikor a NIST versenyt hirdetett a DES leváltására, amelynek 56 bites kulcsát 1998-ban 22 óra alatt feltörték a Deep Crack nevű speciális eszközzel. A versenyen 15 algoritmus vett részt különböző országokból, köztük a Serpent (Nagy-Britannia), a Twofish (USA) és az RC6 (USA). 1999-re 5 jelölt maradt a döntőben. A Rijndael a magas sebesség, a kriptoanalízissel szembeni ellenállás és a hardverben való kompakt megvalósítás kombinációjának köszönhetően győzött minden platformon (a 8 bites mikrokontrollerektől a 64 bites szerverekig). 2006 óta az AES-t használják a SECRET és TOP SECRET besorolású adatok titkosítására az amerikai kormányzati rendszerekben. Ma az AES be van építve az összes fő protokollba: TLS 1.2/1.3, IPsec, SSH, Wi-Fi WPA2/WPA3 és Bluetooth BR/EDR.

Hogyan működik az AES titkosítás

Az AES 128 bites (16 bájtos) blokkokban dolgozza fel az adatokat, amelyek egy 4x4 bájtos mátrixba, az úgynevezett state-be vannak szervezve. Minden titkosítási kör determinisztikus transzformációk sorozatát hajtja végre, amelyek együttesen „lavinahatást“ hoznak létre: a bemeneti adatok egy bitjének megváltoztatása a kimeneti adatok körülbelül 50%-ának bitjét megváltoztatja. Ez a hatás teszi az AES-t ellenállóvá a differenciális és lineáris kriptoanalízissel — a blokk-rejtjelek feltörésének fő módszereivel — szemben.

A folyamat az AddRoundKey — a kezdeti kulcs alkalmazása a state-re XOR művelettel — kezdődik. Ezután a körök következnek: a SubBytes a state minden bájtját az S-box (helyettesítési tábla) értékével cseréli ki. A ShiftRows ciklikusan eltolja a második sort 1 pozícióval, a harmadikat 2-vel, a negyediket 3-mal — ez biztosítja az oszlopok közötti keveredést. A MixColumns a state minden oszlopát megszorozza egy rögzített mátrixszal a Galois-testben GF(2^8), létrehozva minden kimeneti bájt függőségét az oszlop mind a négy bemeneti bájtjától. Az AddRoundKey alkalmazza a következő körkulcsot, amelyet a Key Expansion eljárással nyertek a kezdeti kulcsból. Az utolsó kör a MixColumns művelet hiányában különbözik. A visszafejtés az InvSubBytes, InvShiftRows, InvMixColumns és AddRoundKey inverz műveleteket használja fordított sorrendben. Mobilfejlesztők számára az AES belső szerkezetének megértése nem szükséges — elég tudni, hogyan kell helyesen meghívni a platform beépített API-jait a megfelelő paraméterekkel.

Lavinahatás és az AES kriptográfiai ellenállása

Az AES kriptográfiai ellenállását biztosító kulcsjellemző a lavinahatás (avalanche effect). Egy bit megváltoztatása a nyílt szövegben vagy a kulcsban a titkosított szöveg körülbelül 50%-ának bitjét megváltoztatja, ami rendkívül ellenállóvá teszi az AES-t a differenciális és lineáris kriptoanalízissel szemben. A SubBytes (nemlinearitás az S-box segítségével) és a MixColumns (diffúzió a Galois-testben való szorzással) műveleteinek kombinációja olyan matematikai komplexitást hoz létre, hogy még a titkosított szöveg egy részének ismerete sem teszi lehetővé a kulcs gyorsabb visszanyerését, mint a teljes keresés. A NIST (2018) elemzése szerint az AES-128 elleni legismertebb támadás — biclique attack — mindössze 2 bittel csökkenti a hatékony kulcshosszt (126,2 bitre), ami nem ad gyakorlati előnyt a támadónak. Az AES-256 esetében nincs egyetlen gyakorlatilag megvalósítható támadás sem, amely meghaladná a teljes keresést.

Az AES kulcsméretei és biztonsági szintjei

Az AES három kulcsméretet támogat, amelyek mindegyike egy adott kriptográfiai ellenállási szintnek felel meg. A kulcsméret kiválasztása befolyásolja a biztonságot, a teljesítményt és az eszköz erőforrásigényét.

Kulcs méreteKörök számaBiztonsági szintAlkalmazás
AES-12810128 bitKereskedelmi alkalmazások, TLS
AES-19212192 bitKormányzati rendszerek (SECRET)
AES-25614256 bitTOP SECRET, pénzügyi szektor

Gyakorlati szabály: a mobilalkalmazásokban alapértelmezetten használjon AES-256-ot. Az AES-128 és AES-256 közötti teljesítménykülönbség a modern AES-NI-t támogató eszközökön nem haladja meg a 10–15%-ot, de a biztonsági szint megduplázódik. A kvantumelemzés (Grassl et al., 2016) szerint az AES-128 feltöréséhez 2^77 kvantumművelet szükséges Grover algoritmusával, az AES-256-hoz pedig 2^149, ami az AES-256-ot ellenállóvá teszi a kvantumtámadásokkal szemben a következő 20–30 évben. Még az AES-128 is elegendő védelmet nyújt a kereskedelmi forgatókönyvek túlnyomó többségéhez: egy 128 bites kulcs teljes kereséséhez Bruce Schneier becslése szerint több energiára van szükség, mint amennyi az univerzumban létezik. A biztonsági szabványok (GDPR, HIPAA, PCI DSS) azonban gyakran kifejezetten megkövetelik az AES-256-ot, ezért termelési projektekben ajánlott a maximális kulcshossz használata.

Az AES üzemmódjai

Az AES blokk-rejtjelként rögzített méretű (128 bites) blokkokat titkosít. Tetszőleges hosszúságú adatok titkosításához üzemmódokat (modes of operation) használnak. Az üzemmód kiválasztása kritikusan befolyásolja a biztonságot: a rossz üzemmód semmissé teheti az AES ellenállását.

  • ECB (Electronic Codebook) — a legegyszerűbb és legbiztonságosabb üzemmód. Minden blokk függetlenül van titkosítva ugyanazzal a kulccsal. A nyílt szöveg azonos blokkjai azonos titkosított szövegblokkokat eredményeznek, lehetővé téve az adatstruktúra visszanyerését. Minden modern biztonsági szabványban tilos. SOHA ne használja az ECB-t mobilalkalmazásokban.
  • CBC (Cipher Block Chaining) — minden előző titkosított szövegblokk inicializációs vektorként (IV) szolgál a következőhöz. Véletlenszerű IV-t igényel minden üzenethez. Sebezhető a padding oracle támadásokkal szemben helytelen implementáció esetén. Alkalmas fájlok titkosítására, de az adatok integritásának biztosításához MAC-re (HMAC) van szükség.
  • GCM (Galois/Counter Mode) — a mobilalkalmazásokhoz ajánlott üzemmód. Hitelesített titkosítást (AEAD) biztosít: titkosítás + integritásellenőrzés egy műveletben. Számlálót használ a kulcsfolyam előállításához és szorzást a Galois-testben a hitelesítéshez. A GCM egyedi nonce-t (12 bájt) igényel minden üzenethez. A NIST ajánlja, a TLS 1.2/1.3-ban és az Android Keystore-ban használják.
  • CCM (Counter with CBC-MAC) — egy alternatív AEAD üzemmód CTR + CBC-MAC alapján. Lassabb, mint a GCM, és nem támogatja a párhuzamos feldolgozást. A ZigBee és 802.11 (Wi-Fi) protokollokban használják. Mobilalkalmazásokhoz a GCM előnyösebb.

A mobil projektekhez használjon AES-256-GCM-et 12 bájtos nonce-val. A GCM két problémát old meg egyszerre: az adatok titkosítását és a hitelesség ellenőrzését, ami megakadályozza a padding oracle és a chosen ciphertext támadásokat. Az Android Keystore és az iOS CryptoKit out-of-the-box támogatja az AES-GCM-et anélkül, hogy további kriptográfiai primitívek implementálására lenne szükség. GCM-mel dolgozva fontos, hogy soha ne ismételje meg a nonce-t ugyanazzal a kulccsal — ez teljesen tönkreteszi a titkosítás biztonságát. Minden titkosításhoz generáljon új véletlenszerű nonce-t, és tárolja azt a titkosított szöveggel együtt.

Az AES megvalósítása mobilalkalmazásokban

Nézzünk egy példát az AES-256-GCM biztonságos megvalósítására Androidon a Jetpack Security használatával. Az alábbi kód a teljes ciklust mutatja be: az AES-256 kulcs létrehozása MasterKey segítségével, egy karakterlánc titkosítása és visszafejtése további hitelesített adatokkal (AAD).

kotlin
import androidx.security.crypto.MasterKey
import androidx.security.crypto.EncryptedSharedPreferences

val masterKey = MasterKey.Builder(context)
    .setKeyScheme(MasterKey.KeyScheme.AES256_GCM)
    .build()

val securePrefs = EncryptedSharedPreferences.create(
    context,
    "secure_prefs",
    masterKey,
    EncryptedSharedPreferences.PrefKeyEncryptionScheme.AES256_SIV,
    EncryptedSharedPreferences.PrefValueEncryptionScheme.AES256_GCM
)

fun storeSecureData(key: String, value: String) {
    securePrefs.edit().putString(key, value).apply()
}

fun readSecureData(key: String): String? {
    return securePrefs.getString(key, null)
}

A megoldás kulcsjellemzője az AES-256-GCM két szinten történő használata: a kulcs-érték párok titkosítására (PrefValueEncryptionScheme) és maguknak a kulcsneveknek a védelmére (a PrefKeyEncryptionScheme AES-256-SIV-et használ, amely ellenáll a nonce ismétlődésének). A MasterKey az AES-256-GCM algoritmussal jön létre, és az Android Keystore-ban tárolódik, amely hardveresen védett a Trusted Execution Environment-nel rendelkező eszközökön. A hardvertámogatás (TEE) nélküli eszközökön a kulcs a Bouncy Castle segítségével titkosítva van, ami még mindig biztonságosabb, mint a SharedPreferences-ban való tárolás.

Nagy mennyiségű adat (például képek vagy fájlok) közvetlen titkosításához használja az AES-256-GCM-et az AndroidX Security EncryptedFile segítségével. Kulcsok exportálásához (például biztonsági mentéshez) használjon további titkosítást a felhasználói jelszóval PBKDF2 segítségével 100000+ iterációval.

AES iOS-en a CryptoKit segítségével

iOS-en az AES-sel való munka a CryptoKit keretrendszeren (Swift 5.0+) keresztül szerveződik. Az AES-256 kulcs a SymmetricKey(size: .bits256) segítségével jön létre, és a Secure Enclave-ban — egy hardveres kriptoprocesszorban, amely el van szigetelve a fő CPU-tól és az operációs rendszertől — tárolódik. A CryptoKit két AES implementációt kínál: AES.GCM (ajánlott) és AES.CBC (a régi formátumokkal való visszafelé kompatibilitás érdekében). A titkosítás a seal() metódussal történik, amely fogadja az adatokat, a kulcsot és a nonce-t (12 bájt), és visszaad egy AES.GCM.SealedBox-ot — egy szerkezetet, amely a titkosított szöveget és a hitelesítési címkét tartalmazza. Visszafejtés — az open() segítségével. Az Apple erősen nem ajánlja a CommonCrypto közvetlen használatát: a CryptoKit automatikusan kiválasztja az optimális paramétereket, véd a side-channel támadások ellen, és hardveres AES-NI gyorsítást használ az Apple Silicon processzorokon. A Secure Enclave-val rendelkező eszközökön a kulcsok soha nem hagyják el a hardvermodult, ami lehetetlenné teszi azok ellopását még az alkalmazás teljes kompromittálása esetén sem. A kulcs sorosításához a withUnsafeBytes metódust használják, majd a Keychain-ben való tárolást a SecItemAdd segítségével a kSecAttrAccessible = kSecAttrAccessibleWhenUnlockedThisDeviceOnly attribútummal.

Gyakran Ismételt Kérdések

Mi az AES egyszerű szavakkal?

AES egy olyan algoritmus, amely a titkos kulcs segítségével az olvasható adatokat olvashatatlan bájtok halmazává alakítja. Ugyanerre a kulcsra van szükség az adatok eredeti formájába való visszaállításához. Az AES annyira megbízható, hogy az amerikai kormány titkos dokumentumainak titkosítására használják.

Miben különbözik az AES-128 az AES-256-tól?

AES-128 128 bites kulcsot használ és 10 titkosítási kört hajt végre. Az AES-256 256 bites kulcsot és 14 kört használ, ami 2^128-szor nehezebbé teszi a feltörését. Mobilalkalmazásokhoz az AES-256 ajánlott a minimális teljesítménykülönbség miatt.

Melyik AES üzemmód a legbiztonságosabb?

AES-256-GCM — a legbiztonságosabb és ajánlott üzemmód. A GCM hitelesített titkosítást (titkosítás + integritásellenőrzés) biztosít. Az ECB üzemmód használata tilos, a CBC külön MAC-et igényel. A GCM a de facto szabvány a mobilalkalmazásokban.

Fel lehet törni az AES-t?

Elméletileg az AES feltörhető teljes kereséssel, de az AES-256-hoz 2^256 próbálkozásra van szükség — több, mint ahány atom a megfigyelhető univerzumban van. Gyakorlati támadások az AES-256 ellen nem léteznek. A side-channel támadások (Spectre, Meltdown) nem törik fel az AES-t, hanem ellopják a kulcsokat a memóriából, ezért a kulcsok hardveres tárolása kritikus fontosságú.

Hogyan használjuk az AES-t egy Android mobilalkalmazásban?

Használja az AndroidX Security könyvtárat: a MasterKey.Builder a KeyScheme.AES256_GCM-mel védett kulcsot hoz létre az Android Keystore-ban, az EncryptedSharedPreferences pedig automatikusan titkosítja az összes adatot AES-256-GCM segítségével. Nincs kézi kriptográfia — az API alapértelmezés szerint biztonságos, fejlesztői hibák kockázata nélkül.

Összefoglalás

  • AES — a legelterjedtebb és leginkább bevált szimmetrikus titkosítási algoritmus, amelyet a NIST 2001-ben szabványosított.
  • AES-256 maximális ellenállási szintet biztosít tartalékkal a következő 20–30 év kvantumtámadásai ellen.
  • GCM mód — az egyetlen ajánlott üzemmód mobilalkalmazásokhoz: titkosítás + hitelesítés egy műveletben.
  • Android Keystore és iOS Secure Enclave — hardveres tárolók, amelyek elkülönítik az AES kulcsokat az alkalmazástól.
  • Jetpack Security (Android) és CryptoKit (iOS) biztonságos AES-256-GCM implementációkat kínálnak kézi kriptográfia nélkül.
  • Nonce (IV) a GCM-hez minden titkosításhoz egyedi kell legyen — az ismétlés teljesen tönkreteszi a biztonságot.
  • Javaslat: használjon AES-256-GCM-et az EncryptedSharedPreferences segítségével Androidon és a CryptoKit segítségével iOS-en minden bizalmas adathoz.

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