AES (Advanced Encryption Standard) — je symetrický blokový šifrovací algoritmus, přijatý v roce 2001 Národním institutem standardů a technologie USA (NIST) jako oficiální standard. AES nahradil zastaralý DES a od té doby se stal nejrozšířenějším šifrovacím algoritmem na světě, používaným od bankovních systémů po mobilní aplikace. Podle údajů NIST (2023) poskytuje AES odolnost ekvivalentní 2^256 operacím pro klíč o délce 256 bitů, což jej činí nezranitelným vůči moderním útokům hrubou silou. NIST FIPS 197, 2023
Hlavní body
AES (Advanced Encryption Standard) — je symetrická bloková šifra vyvinutá belgickými kryptografy Joanem Daemenem a Vincentem Rijmenem pod názvem Rijndael. V roce 2001 NIST vybral Rijndael jako vítěze soutěže o nový šifrovací standard USA po pěti letech otevřeného testování a analýzy. AES pracuje s datovými bloky pevné velikosti (128 bitů) a podporuje tři délky klíče: 128, 192 a 256 bitů. Počet transformačních kol závisí na délce klíče: 10 kol pro 128bitový, 12 pro 192bitový a 14 pro 256bitový klíč. Každé kolo zahrnuje čtyři operace: SubBytes (nelineární nahrazení bajtů přes S-box), ShiftRows (cyklický posun řádků), MixColumns (promíchání sloupců) a AddRoundKey (aplikace klíče kola).
Vývoj AES začal v roce 1997, kdy NIST vyhlásil soutěž o nahrazení DES, jehož 56bitový klíč byl prolomen za 22 hodin v roce 1998 na specializovaném zařízení Deep Crack. Soutěže se zúčastnilo 15 algoritmů z různých zemí, včetně Serpent (Velká Británie), Twofish (USA) a RC6 (USA). Do finále v roce 1999 zbylo 5 kandidátů. Rijndael zvítězil díky kombinaci vysoké rychlosti na všech platformách (od 8bitových mikrokontrolerů po 64bitové servery), odolnosti vůči kryptoanalýze a kompaktní implementaci v hardwaru. Od roku 2006 se AES používá pro šifrování dat stupně SECRET a TOP SECRET ve vládních systémech USA. Dnes je AES zabudován do všech hlavních protokolů: TLS 1.2/1.3, IPsec, SSH, Wi-Fi WPA2/WPA3 a Bluetooth BR/EDR.
AES zpracovává data v blocích po 128 bitech (16 bajtů), uspořádaných do matice 4x4 bajtů, nazývané state. Každé šifrovací kolo provádí sekvenci deterministických transformací, které dohromady vytvářejí „lavinový efekt“: změna jednoho bitu vstupních dat změní přibližně 50 % bitů výstupních dat. Takový efekt činí AES odolným vůči diferenciální a lineární kryptoanalýze — hlavním metodám prolomení blokových šifer.
Proces začíná AddRoundKey — aplikací počátečního klíče na state pomocí operace XOR. Poté se provádějí kola: SubBytes nahrazuje každý bajt state hodnotou z S-box (substituční tabulky). ShiftRows cyklicky posouvá druhý řádek o 1 pozici, třetí o 2, čtvrtý o 3 — to zajišťuje promíchání mezi sloupci. MixColumns násobí každý sloupec state pevnou maticí v Galoisově poli GF(2^8), čímž vytváří závislost každého výstupního bajtu na všech čtyřech vstupních bajtech sloupce. AddRoundKey aplikuje další klíč kola, získaný z původního klíče procedurou Key Expansion. Poslední kolo se liší absencí operace MixColumns. Dešifrování používá inverzní operace InvSubBytes, InvShiftRows, InvMixColumns a AddRoundKey v opačném pořadí. Pro mobilní vývojáře není porozumění vnitřní struktuře AES vyžadováno — stačí vědět, jak správně volat vestavěná API platformy s odpovídajícími parametry.
Klíčovou charakteristikou AES zajišťující jeho kryptografickou odolnost je lavinový efekt (avalanche effect). Změna jednoho bitu v otevřeném textu nebo klíči vede ke změně přibližně 50 % bitů šifrového textu, což činí AES extrémně odolným vůči diferenciální a lineární kryptoanalýze. Kombinace operací SubBytes (nelinearita přes S-box) a MixColumns (difuze násobením v Galoisově poli) vytváří matematickou složitost, při které ani znalost části šifrového textu neumožňuje obnovit klíč rychleji než úplným prohledáváním. Podle analýzy NIST (2018) snižuje nejlepší známý útok na AES-128 — biclique attack — efektivní délku klíče pouze o 2 bity (na 126,2 bitů), což útočníkovi neposkytuje praktickou výhodu. Pro AES-256 neexistuje jediný prakticky proveditelný útok převyšující úplné prohledávání.
AES podporuje tři velikosti klíče, z nichž každá odpovídá určité úrovni kryptografické odolnosti. Volba velikosti klíče ovlivňuje zabezpečení, výkon a požadavky na zdroje zařízení.
| Velikost klíče | Počet kol | Úroveň zabezpečení | Použití |
|---|---|---|---|
| AES-128 | 10 | 128 bitů | Komerční aplikace, TLS |
| AES-192 | 12 | 192 bitů | Vládní systémy (SECRET) |
| AES-256 | 14 | 256 bitů | TOP SECRET, finanční sektor |
Praktické pravidlo: v mobilních aplikacích používejte standardně AES-256. Rozdíl ve výkonu mezi AES-128 a AES-256 na moderních zařízeních s podporou AES-NI nepřesahuje 10–15 %, ale úroveň zabezpečení se zdvojnásobuje. Podle kvantové analýzy (Grassl et al., 2016) je k prolomení AES-128 zapotřebí 2^77 kvantových operací pomocí Groverova algoritmu, a pro AES-256 — 2^149, což činí AES-256 odolným vůči kvantovým útokům na dalších 20–30 let. Dokonce i AES-128 poskytuje dostatečnou ochranu pro drtivou většinu komerčních scénářů: k úplnému prohledání 128bitového klíče je zapotřebí více energie, než existuje ve vesmíru podle odhadu Bruce Schneiera. Bezpečnostní standardy (GDPR, HIPAA, PCI DSS) však často výslovně vyžadují AES-256, proto se v produkčních projektech doporučuje používat maximální délku klíče.
AES jako bloková šifra šifruje bloky pevné velikosti (128 bitů). Pro šifrování dat libovolné délky se používají režimy práce (modes of operation). Volba režimu kriticky ovlivňuje zabezpečení: nesprávný režim může anulovat odolnost AES.
Pro mobilní projekty používejte AES-256-GCM s nonce o délce 12 bajtů. GCM řeší dva problémy současně: šifrování dat a ověření pravosti, což brání útokům typu padding oracle a chosen ciphertext. Android Keystore a iOS CryptoKit podporují AES-GCM ihned po vybalení bez nutnosti implementace dalších kryptografických primitiv. Při práci s GCM je důležité nikdy neopakovat nonce se stejným klíčem — to zcela ničí bezpečnost šifrování. Generujte nový náhodný nonce pro každé šifrování a ukládejte jej spolu se šifrovým textem.
Podívejme se na příklad bezpečné implementace AES-256-GCM na Androidu pomocí Jetpack Security. Níže uvedený kód demonstruje celý cyklus: vytvoření klíče AES-256 pomocí MasterKey, šifrování a dešifrování řetězce s dodatečnými autentizovanými daty (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)
}
Klíčovým rysem tohoto řešení je použití AES-256-GCM na dvou úrovních: pro šifrování párů klíč-hodnota (PrefValueEncryptionScheme) a pro ochranu samotných názvů klíčů (PrefKeyEncryptionScheme používá AES-256-SIV, odolný vůči opakování nonce). MasterKey je generován pomocí algoritmu AES-256-GCM a uložen v Android Keystore, který je hardwarově chráněn na zařízeních s Trusted Execution Environment. Na zařízeních bez hardwarové podpory (TEE) je klíč šifrován pomocí Bouncy Castle, což je stále bezpečnější než ukládání v SharedPreferences.
Pro přímé šifrování velkých objemů dat (např. obrázků nebo souborů) používejte AES-256-GCM pomocí EncryptedFile z AndroidX Security. Pro export klíčů (např. pro zálohu) použijte dodatečné šifrování uživatelským heslem pomocí PBKDF2 s 100000+ iteracemi.
Na iOS je práce s AES organizována přes framework CryptoKit (Swift 5.0+). Klíč AES-256 je vytvářen pomocí SymmetricKey(size: .bits256) a uložen v Secure Enclave — hardwarovém kryptoprocesoru izolovaném od hlavního CPU a operačního systému. CryptoKit poskytuje dvě implementace AES: AES.GCM (doporučená) a AES.CBC (pro zpětnou kompatibilitu se zastaralými formáty). Šifrování se provádí pomocí metody seal(), která přijímá data, klíč a nonce (12 bajtů) a vrací AES.GCM.SealedBox — strukturu obsahující šifrový text a autentizační tag. Dešifrování — přes open(). Apple důrazně nedoporučuje přímé používání CommonCrypto: CryptoKit automaticky vybírá optimální parametry, chrání před útoky postranním kanálem a využívá hardwarové zrychlení AES-NI na procesorech Apple Silicon. Na zařízeních s Secure Enclave klíče nikdy neopouštějí hardwarový modul, což znemožňuje jejich krádež i při úplném kompromitování aplikace. Pro serializaci klíče se používá metoda withUnsafeBytes s následným uložením v Keychain přes SecItemAdd s atributem kSecAttrAccessible = kSecAttrAccessibleWhenUnlockedThisDeviceOnly.
Často kladené otázky
AES je algoritmus, který přeměňuje čitelná data na nečitelnou sadu bajtů pomocí tajného klíče. Stejný klíč je potřebný k navrácení dat do původní podoby. AES je tak spolehlivý, že se používá k šifrování tajných dokumentů vlády USA.
AES-128 používá klíč o délce 128 bitů a provádí 10 šifrovacích kol. AES-256 používá 256bitový klíč a 14 kol, což jej činí 2^128krát obtížnějším k prolomení. Pro mobilní aplikace se doporučuje AES-256 kvůli minimálnímu rozdílu ve výkonu.
AES-256-GCM — nejbezpečnější a doporučený režim. GCM poskytuje autentizované šifrování (šifrování + kontrola integrity). Režim ECB je zakázán, CBC vyžaduje samostatný MAC. GCM je de facto standardem pro mobilní aplikace.
Teoreticky lze AES prolomit úplným prohledáváním, ale pro AES-256 je zapotřebí 2^256 pokusů — více než atomů v pozorovatelném vesmíru. Praktické útoky na AES-256 neexistují. Útoky postranním kanálem (Spectre, Meltdown) neprolamují AES, ale kradou klíče z paměti, proto je hardwarové ukládání klíčů kriticky důležité.
Použijte knihovnu AndroidX Security: MasterKey.Builder s KeyScheme.AES256_GCM vytváří chráněný klíč v Android Keystore a EncryptedSharedPreferences automaticky šifruje všechna data pomocí AES-256-GCM. Žádná ruční kryptografie — API je standardně bezpečné, bez rizika chyb vývojáře.
Shrnutí
Vyvineme mobilní aplikaci na klíč
IT Sectr vytváří aplikace pro iOS a Android pro startupy a podniky od roku 2017. Poradíme vám a navrhneme nejlepší řešení.
Přečtěte si také