AES: co to je, algoritmus symetrického šifrování a kde se používá

Autor: IT Sectr Publikováno: 2026-04-02 Doba čtení: 9 min

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 — symetrická bloková šifra s pevnou velikostí bloku 128 bitů a klíči 128, 192 nebo 256 bitů.
  • Režim GCM — doporučený režim práce AES pro mobilní aplikace, poskytující autentizované šifrování.
  • AES-256 — verze s maximální úrovní odolnosti, doporučená pro ochranu vysoce citlivých dat.
  • Hardwarové zrychlení — instrukce AES-NI procesoru umožňují provádět šifrování rychlostí až 10 GB/s na moderních zařízeních.
  • Android a iOS poskytují vestavěná API pro AES: Android Keystore a iOS CryptoKit s podporou hardwarového zrychlení.

Co je AES?

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).

Historie standardu AES

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.

Jak funguje šifrování AES

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.

Lavinový efekt a kryptografická odolnost AES

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í.

Velikosti klíčů AES a úrovně zabezpečení

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íčePočet kolÚroveň zabezpečeníPoužití
AES-12810128 bitůKomerční aplikace, TLS
AES-19212192 bitůVládní systémy (SECRET)
AES-25614256 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.

Režimy práce AES

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.

  • ECB (Electronic Codebook) — nejjednodušší a nejnebezpečnější režim. Každý blok je šifrován nezávisle stejným klíčem. Identické bloky otevřeného textu poskytují identické bloky šifrového textu, což umožňuje obnovit strukturu dat. Zakázán ve všech moderních bezpečnostních standardech. NIKDY nepoužívejte ECB v mobilních aplikacích.
  • CBC (Cipher Block Chaining) — každý předchozí blok šifrového textu je použit jako inicializační vektor (IV) pro následující. Vyžaduje náhodný IV pro každou zprávu. Zranitelný vůči útokům padding oracle při nesprávné implementaci. Vhodný pro šifrování souborů, ale vyžaduje MAC (HMAC) pro zajištění integrity dat.
  • GCM (Galois/Counter Mode) — doporučený režim pro mobilní aplikace. Poskytuje autentizované šifrování (AEAD): šifrování + kontrola integrity v jedné operaci. Používá čítač pro generování klíčového proudu a násobení v Galoisově poli pro autentizaci. GCM vyžaduje jedinečný nonce (12 bajtů) pro každou zprávu. Doporučen NIST, používán v TLS 1.2/1.3 a Android Keystore.
  • CCM (Counter with CBC-MAC) — alternativní režim AEAD založený na CTR + CBC-MAC. Pomalejší než GCM a nepodporuje paralelní zpracování. Používán v protokolech ZigBee a 802.11 (Wi-Fi). Pro mobilní aplikace je preferován GCM.

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.

Implementace AES v mobilních aplikacích

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).

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)
}

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.

AES na iOS přes CryptoKit

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

Co je AES jednoduchými slovy?

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.

Čím se liší AES-128 od AES-256?

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.

Který režim AES je nejbezpečnější?

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.

Lze AES prolomit?

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é.

Jak používat AES v mobilní aplikaci na Androidu?

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í

  • AES — nejrozšířenější a prověřený symetrický šifrovací algoritmus, standardizovaný NIST v roce 2001.
  • AES-256 poskytuje maximální úroveň odolnosti s rezervou na kvantové útoky příštích 20–30 let.
  • Režim GCM — jediný doporučený režim pro mobilní aplikace: šifrování + autentizace v jedné operaci.
  • Android Keystore a iOS Secure Enclave — hardwarová úložiště izolující klíče AES od aplikace.
  • Jetpack Security (Android) a CryptoKit (iOS) poskytují bezpečné implementace AES-256-GCM bez ruční kryptografie.
  • Nonce (IV) pro GCM musí být pro každé šifrování jedinečný — opakování zcela ničí bezpečnost.
  • Doporučení: používejte AES-256-GCM přes EncryptedSharedPreferences na Androidu a CryptoKit na iOS pro všechna důvěrná data.

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í.

Prodiskutovat projekt

Přečtěte si také