AES: wat is het, het symmetrische versleutelingsalgoritme en waar het wordt toegepast

Auteur: IT Sectr Gepubliceerd: 2026-04-02 Leestijd: 9 min

AES (Advanced Encryption Standard) — is een symmetrisch blokversleutelingsalgoritme, dat in 2001 door het National Institute of Standards and Technology van de VS (NIST) werd aangenomen als officiële standaard. AES verving de verouderde DES en is sindsdien het meest voorkomende versleutelingsalgoritme ter wereld geworden, gebruikt van banksystemen tot mobiele apps. Volgens NIST-gegevens (2023) biedt AES een weerstand equivalent aan 2^256 bewerkingen voor een sleutel van 256 bits, waardoor het onkwetsbaar is voor moderne brute force-aanvallen. NIST FIPS 197, 2023

Belangrijkste punten

  • AES — een symmetrisch blokcijfer met een vaste blokgrootte van 128 bits en sleutels van 128, 192 of 256 bits.
  • GCM-modus — de aanbevolen werkingsmodus van AES voor mobiele apps, die geverifieerde versleuteling biedt.
  • AES-256 — de versie met het maximale weerstandsniveau, aanbevolen voor de bescherming van zeer gevoelige gegevens.
  • Hardwareversnelling — AES-NI-instructies van de processor maken versleuteling mogelijk met snelheden tot 10 GB/s op moderne apparaten.
  • Android en iOS bieden ingebouwde API's voor AES: Android Keystore en iOS CryptoKit met ondersteuning voor hardwareversnelling.

Wat is AES?

AES (Advanced Encryption Standard) — is een symmetrisch blokcijfer ontwikkeld door de Belgische cryptografen Joan Daemen en Vincent Rijmen onder de naam Rijndael. In 2001 selecteerde NIST Rijndael als winnaar van de wedstrijd voor de nieuwe versleutelingsstandaard van de VS na vijf jaar open testen en analyse. AES werkt met datablokken van vaste grootte (128 bits) en ondersteunt drie sleutellengtes: 128, 192 en 256 bits. Het aantal transformatieronden hangt af van de sleutellengte: 10 ronden voor 128-bits, 12 voor 192-bits en 14 voor 256-bits sleutels. Elke ronde omvat vier operaties: SubBytes (niet-lineaire vervanging van bytes via S-box), ShiftRows (cyclische verschuiving van rijen), MixColumns (menging van kolommen) en AddRoundKey (toepassing van de rondsleutel).

Geschiedenis van de AES-standaard

De ontwikkeling van AES begon in 1997, toen NIST een wedstrijd aankondigde ter vervanging van DES, waarvan de 56-bits sleutel in 1998 in 22 uur werd gekraakt op het gespecialiseerde apparaat Deep Crack. Aan de wedstrijd deden 15 algoritmen uit verschillende landen mee, waaronder Serpent (VK), Twofish (VS) en RC6 (VS). Tegen de finale van 1999 bleven er 5 kandidaten over. Rijndael won vanwege een combinatie van hoge snelheid op alle platforms (van 8-bits microcontrollers tot 64-bits servers), weerstand tegen cryptanalyse en compacte implementatie in hardware. Sinds 2006 wordt AES gebruikt voor het versleutelen van gegevens met het niveau SECRET en TOP SECRET in Amerikaanse overheidsystemen. Tegenwoordig is AES ingebouwd in alle belangrijke protocollen: TLS 1.2/1.3, IPsec, SSH, Wi-Fi WPA2/WPA3 en Bluetooth BR/EDR.

Hoe AES-versleuteling werkt

AES verwerkt gegevens in blokken van 128 bits (16 bytes), georganiseerd in een 4x4 bytematrix, de zogenaamde state. Elke versleutelingsronde voert een reeks deterministische transformaties uit die samen een „lawine-effect“ creëren: het wijzigen van één bit van de invoergegevens verandert ongeveer 50% van de bits van de uitvoergegevens. Dit effect maakt AES bestand tegen differentiële en lineaire cryptanalyse — de belangrijkste methoden om blokcijfers te kraken.

Het proces begint met AddRoundKey — het toepassen van de initiële sleutel op de state via een XOR-operatie. Vervolgens worden de ronden uitgevoerd: SubBytes vervangt elke byte van de state door een waarde uit de S-box (vervangingstabel). ShiftRows verschuift de tweede rij cyclisch met 1 positie, de derde met 2, de vierde met 3 — dit zorgt voor menging tussen kolommen. MixColumns vermenigvuldigt elke kolom van de state met een vaste matrix in het Galois-veld GF(2^8), waardoor elke uitvoerbyte afhankelijk wordt van alle vier invoerbytes van de kolom. AddRoundKey past de volgende rondsleutel toe, verkregen uit de initiële sleutel via de Key Expansion-procedure. De laatste ronde onderscheidt zich door het ontbreken van de MixColumns-operatie. Ontsleuteling gebruikt de inverse operaties InvSubBytes, InvShiftRows, InvMixColumns en AddRoundKey in omgekeerde volgorde. Voor mobiele ontwikkelaars is begrip van de interne structuur van AES niet vereist — het is voldoende om te weten hoe je de ingebouwde API's van het platform correct aanroept met de juiste parameters.

Lawine-effect en cryptografische weerstand van AES

Het belangrijkste kenmerk van AES dat zijn cryptografische weerstand garandeert, is het lawine-effect (avalanche effect). Het wijzigen van één bit in de leesbare tekst of sleutel leidt tot een verandering van ongeveer 50% van de bits van de cijfertekst, wat AES uiterst bestand maakt tegen differentiële en lineaire cryptanalyse. De combinatie van SubBytes (niet-lineariteit via S-box) en MixColumns (diffusie via vermenigvuldiging in het Galois-veld) creëert een wiskundige complexiteit waarbij zelfs kennis van een deel van de cijfertekst het niet mogelijk maakt de sleutel sneller te herstellen dan door volledige doorzoeking. Volgens NIST-analyse (2018) vermindert de beste bekende aanval op AES-128 — biclique attack — de effectieve sleutellengte met slechts 2 bits (tot 126,2 bits), wat de aanvaller geen praktisch voordeel biedt. Voor AES-256 bestaat er geen enkele praktisch uitvoerbare aanval die volledige doorzoeking overtreft.

AES-sleutelgroottes en beveiligingsniveaus

AES ondersteunt drie sleutelgroottes, die elk overeenkomen met een bepaald niveau van cryptografische weerstand. De keuze van de sleutelgrootte beïnvloedt de beveiliging, prestaties en vereisten voor apparaatbronnen.

SleutelgrootteAantal rondenBeveiligingsniveauToepassing
AES-12810128 bitsCommerciële apps, TLS
AES-19212192 bitsOverheidssystemen (SECRET)
AES-25614256 bitsTOP SECRET, financiële sector

Praktische regel: gebruik in mobiele apps standaard AES-256. Het prestatieverschil tussen AES-128 en AES-256 op moderne apparaten met AES-NI-ondersteuning is niet meer dan 10–15%, maar het beveiligingsniveau verdubbelt. Volgens kwantumanalyse (Grassl et al., 2016) zijn er 2^77 kwantumbewerkingen via het algoritme van Grover nodig om AES-128 te kraken, en voor AES-256 — 2^149, wat AES-256 bestand maakt tegen kwantumaanvallen voor de komende 20–30 jaar. Zelfs AES-128 biedt voldoende bescherming voor de overgrote meerderheid van commerciële scenario's: voor volledige doorzoeking van een 128-bits sleutel is meer energie nodig dan er in het heelal bestaat, volgens de schatting van Bruce Schneier. Beveiligingsnormen (GDPR, HIPAA, PCI DSS) vereisen echter vaak expliciet AES-256, daarom wordt in productieprojecten aanbevolen de maximale sleutellengte te gebruiken.

AES-werkingsmodi

AES als blokcijfer versleutelt blokken van vaste grootte (128 bits). Voor het versleutelen van gegevens van willekeurige lengte worden werkingsmodi (modes of operation) gebruikt. De keuze van de modus heeft een kritieke invloed op de beveiliging: een verkeerde modus kan de weerstand van AES tenietdoen.

  • ECB (Electronic Codebook) — de eenvoudigste en meest onveilige modus. Elk blok wordt onafhankelijk versleuteld met dezelfde sleutel. Identieke blokken leesbare tekst geven identieke blokken cijfertekst, waardoor de gegevensstructuur kan worden hersteld. Verboden in alle moderne beveiligingsnormen. Gebruik NOOIT ECB in mobiele apps.
  • CBC (Cipher Block Chaining) — elk vorig cijfertekstblok wordt gebruikt als initialisatievector (IV) voor het volgende. Vereist een willekeurige IV voor elk bericht. Kwetsbaar voor padding oracle-aanvallen bij onjuiste implementatie. Geschikt voor bestandsversleuteling, maar vereist MAC (HMAC) voor gegevensintegriteit.
  • GCM (Galois/Counter Mode) — de aanbevolen modus voor mobiele apps. Biedt geverifieerde versleuteling (AEAD): versleuteling + integriteitscontrole in één bewerking. Gebruikt een teller voor het genereren van de sleutelstroom en vermenigvuldiging in het Galois-veld voor authenticatie. GCM vereist een unieke nonce (12 bytes) voor elk bericht. Aanbevolen door NIST, gebruikt in TLS 1.2/1.3 en Android Keystore.
  • CCM (Counter with CBC-MAC) — een alternatieve AEAD-modus op basis van CTR + CBC-MAC. Langzamer dan GCM en ondersteunt geen parallelle verwerking. Gebruikt in ZigBee- en 802.11 (Wi-Fi)-protocollen. Voor mobiele apps heeft GCM de voorkeur.

Gebruik voor mobiele projecten AES-256-GCM met een nonce van 12 bytes. GCM lost twee problemen tegelijk op: gegevensversleuteling en authenticiteitscontrole, wat padding oracle- en chosen ciphertext-aanvallen voorkomt. Android Keystore en iOS CryptoKit ondersteunen AES-GCM out-of-the-box zonder dat er aanvullende cryptografische primitieven hoeven te worden geïmplementeerd. Bij het werken met GCM is het belangrijk om nooit een nonce met dezelfde sleutel te herhalen — dit vernietigt de versleutelingsbeveiliging volledig. Genereer een nieuwe willekeurige nonce voor elke versleuteling en bewaar deze samen met de cijfertekst.

Implementatie van AES in mobiele apps

Laten we een voorbeeld bekijken van een veilige implementatie van AES-256-GCM op Android met behulp van Jetpack Security. De onderstaande code demonstreert de volledige cyclus: het maken van een AES-256-sleutel via MasterKey, het versleutelen en ontsleutelen van een tekenreeks met aanvullende geverifieerde gegevens (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)
}

Het belangrijkste kenmerk van deze oplossing is het gebruik van AES-256-GCM op twee niveaus: voor het versleutelen van sleutel-waardeparen (PrefValueEncryptionScheme) en voor de bescherming van de sleutelnamen zelf (PrefKeyEncryptionScheme gebruikt AES-256-SIV, bestand tegen nonce-herhaling). MasterKey wordt gegenereerd met het AES-256-GCM-algoritme en opgeslagen in Android Keystore, dat hardwarematig wordt beschermd op apparaten met Trusted Execution Environment. Op apparaten zonder hardwareondersteuning (TEE) wordt de sleutel versleuteld via Bouncy Castle, wat nog steeds veiliger is dan opslag in SharedPreferences.

Voor directe versleuteling van grote hoeveelheden gegevens (bijvoorbeeld afbeeldingen of bestanden) gebruikt u AES-256-GCM via EncryptedFile van AndroidX Security. Voor het exporteren van sleutels (bijvoorbeeld voor back-up) gebruikt u extra versleuteling met een gebruikerswachtwoord via PBKDF2 met 100000+ iteraties.

AES op iOS via CryptoKit

Op iOS is het werken met AES georganiseerd via het CryptoKit-framework (Swift 5.0+). De AES-256-sleutel wordt gemaakt via SymmetricKey(size: .bits256) en opgeslagen in Secure Enclave — een hardware-cryptoprocessor die geïsoleerd is van de hoofd-CPU en het besturingssysteem. CryptoKit biedt twee AES-implementaties: AES.GCM (aanbevolen) en AES.CBC (voor achterwaartse compatibiliteit met verouderde formaten). Versleuteling gebeurt via de methode seal(), die gegevens, sleutel en nonce (12 bytes) ontvangt en een AES.GCM.SealedBox retourneert — een structuur met de cijfertekst en de authenticatietag. Ontsleuteling — via open(). Apple raadt het direct gebruik van CommonCrypto ten zeerste af: CryptoKit kiest automatisch de optimale parameters, beschermt tegen side-channel-aanvallen en gebruikt hardwareversnelling AES-NI op Apple Silicon-processors. Op apparaten met Secure Enclave verlaten sleutels nooit de hardwaremodule, waardoor diefstal zelfs bij volledige compromittering van de app onmogelijk is. Voor serialisatie van de sleutel wordt de methode withUnsafeBytes gebruikt, gevolgd door opslag in Keychain via SecItemAdd met het attribuut kSecAttrAccessible = kSecAttrAccessibleWhenUnlockedThisDeviceOnly.

Veelgestelde vragen

Wat is AES in eenvoudige woorden?

AES is een algoritme dat leesbare gegevens omzet in een onleesbare reeks bytes met behulp van een geheime sleutel. Dezelfde sleutel is nodig om de gegevens in hun oorspronkelijke vorm te herstellen. AES is zo betrouwbaar dat het wordt gebruikt voor het versleutelen van geheime documenten van de Amerikaanse overheid.

Wat is het verschil tussen AES-128 en AES-256?

AES-128 gebruikt een sleutel van 128 bits en voert 10 versleutelingsronden uit. AES-256 gebruikt een 256-bits sleutel en 14 ronden, waardoor het 2^128 keer moeilijker te kraken is. Voor mobiele apps wordt AES-256 aanbevolen vanwege het minimale prestatieverschil.

Welke AES-modus is het veiligst?

AES-256-GCM — de veiligste en aanbevolen modus. GCM biedt geverifieerde versleuteling (versleuteling + integriteitscontrole). De ECB-modus is verboden, CBC vereist een aparte MAC. GCM is de de facto standaard voor mobiele apps.

Kan AES worden gekraakt?

Theoretisch kan AES worden gekraakt door volledige doorzoeking, maar voor AES-256 zijn 2^256 pogingen nodig — meer dan atomen in het waarneembare heelal. Praktische aanvallen op AES-256 bestaan niet. Side-channel-aanvallen (Spectre, Meltdown) kraken AES niet, maar stelen sleutels uit het geheugen, daarom is hardwarematige sleutelopslag van cruciaal belang.

Hoe gebruik ik AES in een mobiele app op Android?

Gebruik de bibliotheek AndroidX Security: MasterKey.Builder met KeyScheme.AES256_GCM maakt een beveiligde sleutel aan in Android Keystore, en EncryptedSharedPreferences versleutelt automatisch alle gegevens via AES-256-GCM. Geen handmatige cryptografie — de API is standaard veilig, zonder risico op ontwikkelaarsfouten.

Samenvatting

  • AES — het meest voorkomende en bewezen symmetrische versleutelingsalgoritme, gestandaardiseerd door NIST in 2001.
  • AES-256 biedt het maximale weerstandsniveau met reserve voor kwantumaanvallen in de komende 20–30 jaar.
  • GCM-modus — de enige aanbevolen modus voor mobiele apps: versleuteling + authenticatie in één bewerking.
  • Android Keystore en iOS Secure Enclave — hardware-opslag die AES-sleutels isoleert van de app.
  • Jetpack Security (Android) en CryptoKit (iOS) bieden veilige implementaties van AES-256-GCM zonder handmatige cryptografie.
  • Nonce (IV) voor GCM moet uniek zijn voor elke versleuteling — herhaling vernietigt de beveiliging volledig.
  • Aanbeveling: gebruik AES-256-GCM via EncryptedSharedPreferences op Android en CryptoKit op iOS voor alle vertrouwelijke gegevens.

We ontwikkelen een mobiele applicatie turnkey

IT Sectr creëert sinds 2017 iOS- en Android-applicaties voor startups en bedrijven. We adviseren u en stellen de beste oplossing voor.

Bespreek het project

Lees ook