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 (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 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.
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.
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 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érete | Körök száma | Biztonsági szint | Alkalmazás |
|---|---|---|---|
| AES-128 | 10 | 128 bit | Kereskedelmi alkalmazások, TLS |
| AES-192 | 12 | 192 bit | Kormányzati rendszerek (SECRET) |
| AES-256 | 14 | 256 bit | TOP 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 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.
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.
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).
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.
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
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.
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.
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.
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ú.
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
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.
Olvassa el is