AES: vad är det, den symmetriska krypteringsalgoritmen och var den tillämpas

Författare: IT Sectr Publicerad: 2026-04-02 Lästid: 9 min

AES (Advanced Encryption Standard) — är en symmetrisk blockkrypteringsalgoritm som antogs 2001 av USA:s nationella institut för standarder och teknik (NIST) som officiell standard. AES ersatte den föråldrade DES och har sedan dess blivit den mest utbredda krypteringsalgoritmen i världen, som används från banksystem till mobila applikationer. Enligt NIST-data (2023) ger AES ett motstånd som motsvarar 2^256 operationer för en nyckel på 256 bitar, vilket gör den oskadlig för moderna brute force-attacker. NIST FIPS 197, 2023

Huvudpunkter

  • AES — en symmetrisk blockkrypto med fast blockstorlek på 128 bitar och nycklar på 128, 192 eller 256 bitar.
  • GCM-läge — det rekommenderade driftläget för AES för mobila applikationer, som ger autentiserad kryptering.
  • AES-256 — versionen med maximal motståndsnivå, rekommenderad för att skydda högkänsliga data.
  • Hårdvaruacceleration — processorernas AES-NI-instruktioner möjliggör kryptering med hastigheter upp till 10 GB/s på moderna enheter.
  • Android och iOS tillhandahåller inbyggda API:er för AES: Android Keystore och iOS CryptoKit med stöd för hårdvaruacceleration.

Vad är AES?

AES (Advanced Encryption Standard) — är en symmetrisk blockkrypto utvecklad av de belgiska kryptograferna Joan Daemen och Vincent Rijmen under namnet Rijndael. År 2001 valde NIST Rijndael som vinnare av tävlingen om den nya amerikanska krypteringsstandarden efter fem års öppen testning och analys. AES arbetar med datablock av fast storlek (128 bitar) och stödjer tre nyckellängder: 128, 192 och 256 bitar. Antalet transformationsrundor beror på nyckellängden: 10 rundor för 128-bitars, 12 för 192-bitars och 14 för 256-bitars nyckel. Varje runda omfattar fyra operationer: SubBytes (olinjär bytesubstitution genom S-box), ShiftRows (cyklisk förskjutning av rader), MixColumns (blandning av kolumner) och AddRoundKey (applicering av rundnyckel).

AES-standardens historia

Utvecklingen av AES började 1997 när NIST utlyste en tävling för att ersätta DES, vars 56-bitarsnyckel knäcktes på 22 timmar 1998 på den specialiserade enheten Deep Crack. 15 algoritmer från olika länder deltog i tävlingen, inklusive Serpent (Storbritannien), Twofish (USA) och RC6 (USA). Till finalen 1999 återstod 5 kandidater. Rijndael vann tack vare en kombination av hög hastighet på alla plattformar (från 8-bitars mikrokontrollers till 64-bitars servrar), motståndskraft mot kryptoanalys och kompakt implementering i hårdvara. Sedan 2006 har AES använts för att kryptera data med klassificeringen SECRET och TOP SECRET i amerikanska statliga system. Idag är AES inbyggd i alla större protokoll: TLS 1.2/1.3, IPsec, SSH, Wi-Fi WPA2/WPA3 och Bluetooth BR/EDR.

Hur AES-kryptering fungerar

AES bearbetar data i block om 128 bitar (16 byte), organiserade i en 4x4 byte-matris som kallas state. Varje krypteringsrunda utför en serie deterministiska transformationer som tillsammans skapar en „lavineffekt“: ändring av en bit i indata ändrar cirka 50 % av bitarna i utdata. En sådan effekt gör AES motståndskraftig mot differentiell och linjär kryptoanalys — de viktigaste metoderna för att knäcka blockkrypton.

Processen börjar med AddRoundKey — applicering av den initiala nyckeln på state genom XOR-operation. Därefter utförs rundorna: SubBytes ersätter varje byte i state med värdet från S-box (ersättningstabell). ShiftRows förskjuter cykliskt andra raden med 1 position, tredje med 2, fjärde med 3 — detta säkerställer blandning mellan kolumner. MixColumns multiplicerar varje kolumn i state med en fast matris i Galoisfältet GF(2^8), vilket skapar beroende av varje utdatabyte på alla fyra indatabyte i kolumnen. AddRoundKey applicerar nästa rundnyckel, som erhålls från den initiala nyckeln genom Key Expansion-proceduren. Den sista rundan skiljer sig genom avsaknaden av MixColumns-operationen. Dekryptering använder de inversa operationerna InvSubBytes, InvShiftRows, InvMixColumns och AddRoundKey i omvänd ordning. För mobila utvecklare krävs inte förståelse av AES inre struktur — det räcker att veta hur man korrekt anropar plattformens inbyggda API:er med rätt parametrar.

Lavineffekt och kryptografisk motståndskraft hos AES

Den viktigaste egenskapen hos AES som säkerställer dess kryptografiska motståndskraft är lavineffekten (avalanche effect). Ändring av en bit i klartexten eller nyckeln leder till ändring av cirka 50 % av bitarna i chiffertexten, vilket gör AES extremt motståndskraftig mot differentiell och linjär kryptoanalys. Kombinationen av SubBytes (olinjäritet genom S-box) och MixColumns (diffusion genom multiplikation i Galoisfältet) skapar en matematisk komplexitet där även kännedom om en del av chiffertexten inte tillåter återställning av nyckeln snabbare än fullständig sökning. Enligt NIST-analys (2018) minskar den bästa kända attacken mot AES-128 — biclique attack — den effektiva nyckellängden med endast 2 bitar (till 126,2 bitar), vilket inte ger angriparen någon praktisk fördel. För AES-256 finns det ingen praktiskt genomförbar attack som överträffar fullständig sökning.

AES-nyckelstorlekar och säkerhetsnivåer

AES stödjer tre nyckelstorlekar, som var och en motsvarar en viss nivå av kryptografisk motståndskraft. Valet av nyckelstorlek påverkar säkerheten, prestandan och kraven på enhetens resurser.

NyckelstorlekAntal rundorSäkerhetsnivåAnvändning
AES-12810128 bitarKommersiella applikationer, TLS
AES-19212192 bitarStatliga system (SECRET)
AES-25614256 bitarTOP SECRET, finanssektorn

Praktisk regel: i mobila applikationer använd AES-256 som standard. Prestandaskillnaden mellan AES-128 och AES-256 på moderna enheter med AES-NI-stöd överstiger inte 10–15 %, men säkerhetsnivån fördubblas. Enligt kvantanalys (Grassl et al., 2016) krävs 2^77 kvantoperationer genom Grovers algoritm för att knäcka AES-128, och för AES-256 — 2^149, vilket gör AES-256 motståndskraftig mot kvantattacker under de kommande 20–30 åren. Även AES-128 ger tillräckligt skydd för de allra flesta kommersiella scenarier: för fullständig sökning av en 128-bitars nyckel krävs mer energi än vad som finns i universum enligt Bruce Schneiers uppskattning. Säkerhetsstandarder (GDPR, HIPAA, PCI DSS) kräver dock ofta uttryckligen AES-256, därför rekommenderas att använda maximal nyckellängd i produktionsprojekt.

AES-driftlägen

AES som blockkrypto krypterar block av fast storlek (128 bitar). För att kryptera data av godtycklig längd används driftlägen (modes of operation). Valet av läge påverkar säkerheten kritiskt: ett felaktigt läge kan upphäva AES motståndskraft.

  • ECB (Electronic Codebook) — det enklaste och mest osäkra läget. Varje block krypteras oberoende med samma nyckel. Identiska klartextblock ger identiska chiffertextblock, vilket möjliggör återställning av datastrukturen. Förbjudet i alla moderna säkerhetsstandarder. Använd ALDRIG ECB i mobila applikationer.
  • CBC (Cipher Block Chaining) — varje tidigare chiffertextblock används som initialiseringsvektor (IV) för nästa. Kräver slumpmässig IV för varje meddelande. Sårbar för padding oracle-attacker vid felaktig implementering. Lämplig för filkryptering men kräver MAC (HMAC) för dataintegritet.
  • GCM (Galois/Counter Mode) — det rekommenderade läget för mobila applikationer. Ger autentiserad kryptering (AEAD): kryptering + integritetskontroll i en operation. Använder en räknare för att generera nyckelström och multiplikation i Galoisfältet för autentisering. GCM kräver unik nonce (12 byte) för varje meddelande. Rekommenderas av NIST, används i TLS 1.2/1.3 och Android Keystore.
  • CCM (Counter with CBC-MAC) — ett alternativt AEAD-läge baserat på CTR + CBC-MAC. Långsammare än GCM och stödjer inte parallellbearbetning. Används i ZigBee- och 802.11 (Wi-Fi)-protokoll. För mobila applikationer är GCM att föredra.

För mobila projekt, använd AES-256-GCM med nonce på 12 byte. GCM löser två problem samtidigt: datakryptering och autenticitetsverifiering, vilket förhindrar padding oracle- och chosen ciphertext-attacker. Android Keystore och iOS CryptoKit stödjer AES-GCM direkt utan att ytterligare kryptografiska primitiver behöver implementeras. När du arbetar med GCM är det viktigt att aldrig upprepa nonce med samma nyckel — detta förstör helt krypteringssäkerheten. Generera en ny slumpmässig nonce för varje kryptering och spara den tillsammans med chiffertexten.

Implementering av AES i mobila applikationer

Låt oss titta på ett exempel på säker implementering av AES-256-GCM på Android med Jetpack Security. Koden nedan visar hela cykeln: skapande av AES-256-nyckel via MasterKey, kryptering och dekryptering av en sträng med ytterligare autentiserade data (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)
}

Den viktigaste egenskapen hos denna lösning är användningen av AES-256-GCM på två nivåer: för att kryptera nyckel-värdepar (PrefValueEncryptionScheme) och för att skydda själva nyckelnamnen (PrefKeyEncryptionScheme använder AES-256-SIV, som är resistent mot nonce-upprepning). MasterKey genereras med AES-256-GCM-algoritmen och lagras i Android Keystore, som är hårdvaruskyddat på enheter med Trusted Execution Environment. På enheter utan hårdvarustöd (TEE) krypteras nyckeln via Bouncy Castle, vilket fortfarande är säkrare än lagring i SharedPreferences.

För direkt kryptering av stora datamängder (t.ex. bilder eller filer) använd AES-256-GCM via EncryptedFile från AndroidX Security. För export av nycklar (t.ex. för säkerhetskopiering) använd ytterligare kryptering med användarens lösenord via PBKDF2 med 100000+ iterationer.

AES på iOS via CryptoKit

iOS är arbetet med AES organiserat via ramverket CryptoKit (Swift 5.0+). AES-256-nyckeln skapas via SymmetricKey(size: .bits256) och lagras i Secure Enclave — en hårdvarukryptoprocessor isolerad från huvud-CPU och operativsystem. CryptoKit tillhandahåller två AES-implementeringar: AES.GCM (rekommenderad) och AES.CBC (för bakåtkompatibilitet med föråldrade format). Kryptering utförs via metoden seal(), som tar emot data, nyckel och nonce (12 byte) och returnerar en AES.GCM.SealedBox — en struktur som innehåller chiffertext och autentiseringstagg. Dekryptering — via open(). Apple rekommenderar starkt att inte använda CommonCrypto direkt: CryptoKit väljer automatiskt optimala parametrar, skyddar mot side-channel-attacker och använder hårdvaruacceleration AES-NI på Apple Silicon-processorer. På enheter med Secure Enclave lämnar nycklarna aldrig hårdvarumodulen, vilket omöjliggör stöld även vid fullständig kompromettering av applikationen. För serialisering av nyckeln används metoden withUnsafeBytes med efterföljande lagring i Keychain via SecItemAdd med attributet kSecAttrAccessible = kSecAttrAccessibleWhenUnlockedThisDeviceOnly.

Vanliga frågor

Vad är AES i enkla ord?

AES är en algoritm som omvandlar läsbar data till en oläsbar uppsättning byte med hjälp av en hemlig nyckel. Samma nyckel behövs för att återställa data till sin ursprungliga form. AES är så pålitlig att den används för att kryptera hemliga dokument från USA:s regering.

Vad är skillnaden mellan AES-128 och AES-256?

AES-128 använder en 128-bitars nyckel och utför 10 krypteringsrundor. AES-256 använder en 256-bitars nyckel och 14 rundor, vilket gör den 2^128 gånger svårare att knäcka. För mobila applikationer rekommenderas AES-256 på grund av den minimala prestandaskillnaden.

Vilket AES-läge är säkrast?

AES-256-GCM — det säkraste och rekommenderade läget. GCM ger autentiserad kryptering (kryptering + integritetskontroll). ECB-läget är förbjudet, CBC kräver separat MAC. GCM är de facto-standarden för mobila applikationer.

Kan AES knäckas?

Teoretiskt kan AES knäckas genom fullständig sökning, men för AES-256 krävs 2^256 försök — fler än atomer i det observerbara universum. Praktiska attacker mot AES-256 finns inte. Side-channel-attacker (Spectre, Meltdown) knäcker inte AES utan stjäl nycklar från minnet, därför är hårdvarulagring av nycklar kritiskt viktig.

Hur använder jag AES i en mobil app på Android?

Använd biblioteket AndroidX Security: MasterKey.Builder med KeyScheme.AES256_GCM skapar en skyddad nyckel i Android Keystore, och EncryptedSharedPreferences krypterar automatiskt alla data via AES-256-GCM. Ingen manuell kryptografi — API:et är säkert som standard, utan risk för utvecklarfel.

Sammanfattning

  • AES — den mest utbredda och beprövade symmetriska krypteringsalgoritmen, standardiserad av NIST 2001.
  • AES-256 ger maximal motståndsnivå med marginal för kvantattacker under de kommande 20–30 åren.
  • GCM-läge — det enda rekommenderade läget för mobila applikationer: kryptering + autentisering i en operation.
  • Android Keystore och iOS Secure Enclave — hårdvarulager som isolerar AES-nycklar från applikationen.
  • Jetpack Security (Android) och CryptoKit (iOS) erbjuder säkra implementeringar av AES-256-GCM utan manuell kryptografi.
  • Nonce (IV) för GCM måste vara unik för varje kryptering — upprepning förstör helt säkerheten.
  • Rekommendation: använd AES-256-GCM via EncryptedSharedPreferences på Android och CryptoKit på iOS för alla konfidentiella data.

Vi utvecklar en mobil applikation nyckelfärdigt

IT Sectr skapar iOS- och Android-applikationer för startups och företag sedan 2017. Vi ger dig råd och föreslår den bästa lösningen.

Diskutera projektet

Läs också