AES: ce este, algoritmul de criptare simetrică și unde se aplică

Autor: IT Sectr Publicat: 2026-04-02 Timp de citire: 9 min

AES (Advanced Encryption Standard) — este un algoritm de criptare simetrică în bloc, adoptat în 2001 de către Institutul Național de Standarde și Tehnologie al SUA (NIST) ca standard oficial. AES a înlocuit DES-ul învechit și de atunci a devenit cel mai răspândit algoritm de criptare din lume, utilizat de la sisteme bancare până la aplicații mobile. Conform datelor NIST (2023), AES asigură o rezistență echivalentă cu 2^256 de operații pentru o cheie de 256 de biți, ceea ce îl face invulnerabil la atacurile moderne prin forță brută. NIST FIPS 197, 2023

Principalele

  • AES — un cifru simetric în bloc cu dimensiunea fixă a blocului de 128 de biți și chei de 128, 192 sau 256 de biți.
  • Modul GCM — modul de operare recomandat al AES pentru aplicațiile mobile, care asigură criptare autentificată.
  • AES-256 — versiunea cu nivel maxim de rezistență, recomandată pentru protejarea datelor cu grad înalt de sensibilitate.
  • Accelerare hardware — instrucțiunile AES-NI ale procesorului permit executarea criptării cu viteza de până la 10 GB/s pe dispozitivele moderne.
  • Android și iOS oferă API-uri încorporate pentru AES: Android Keystore și iOS CryptoKit cu suport pentru accelerare hardware.

Ce este AES?

AES (Advanced Encryption Standard) — este un cifru simetric în bloc dezvoltat de criptografii belgieni Joan Daemen și Vincent Rijmen sub numele de Rijndael. În 2001, NIST l-a selectat pe Rijndael ca câștigător al concursului pentru noul standard de criptare al SUA după cinci ani de testare și analiză deschisă. AES operează cu blocuri de date de dimensiune fixă (128 de biți) și suportă trei lungimi de cheie: 128, 192 și 256 de biți. Numărul de runde de transformare depinde de lungimea cheii: 10 runde pentru cheia de 128 de biți, 12 pentru cea de 192 de biți și 14 pentru cheia de 256 de biți. Fiecare rundă include patru operații: SubBytes (înlocuirea neliniară a octeților prin S-box), ShiftRows (deplasarea ciclică a rândurilor), MixColumns (amestecarea coloanelor) și AddRoundKey (aplicarea cheii de rundă).

Istoria standardului AES

Dezvoltarea AES a început în 1997, când NIST a anunțat un concurs pentru înlocuirea DES, a cărui cheie de 56 de biți a fost spartă în 22 de ore în 1998 pe dispozitivul specializat Deep Crack. La concurs au participat 15 algoritmi din diferite țări, inclusiv Serpent (Marea Britanie), Twofish (SUA) și RC6 (SUA). Până la finala din 1999 au rămas 5 candidați. Rijndael a câștigat datorită combinației de viteză ridicată pe toate platformele (de la microcontrolere de 8 biți până la servere de 64 de biți), rezistenței la criptoanaliză și implementării compacte în hardware. Din 2006, AES este utilizat pentru criptarea datelor cu nivelurile SECRET și TOP SECRET în sistemele guvernamentale ale SUA. Astăzi, AES este integrat în toate protocoalele principale: TLS 1.2/1.3, IPsec, SSH, Wi-Fi WPA2/WPA3 și Bluetooth BR/EDR.

Cum funcționează criptarea AES

AES procesează datele în blocuri de 128 de biți (16 octeți), organizate într-o matrice 4x4 de octeți, numită state. Fiecare rundă de criptare execută o secvență de transformări deterministe care, împreună, creează efectul de «avalanșă»: modificarea unui bit al datelor de intrare schimbă aproximativ 50% din biții datelor de ieșire. Un astfel de efect face AES rezistent la criptoanaliza diferențială și liniară — principalele metode de spargere a cifrurilor în bloc.

Procesul începe cu AddRoundKey — aplicarea cheii inițiale asupra state prin operația XOR. Apoi se execută rundele: SubBytes înlocuiește fiecare octet al state cu valoarea din S-box (tabelul de înlocuire). ShiftRows deplasează ciclic al doilea rând cu 1 poziție, al treilea cu 2, al patrulea cu 3 — aceasta asigură amestecarea între coloane. MixColumns înmulțește fiecare coloană a state cu o matrice fixă în câmpul Galois GF(2^8), creând dependența fiecărui octet de ieșire de toți cei patru octeți de intrare ai coloanei. AddRoundKey aplică următoarea cheie de rundă, obținută din cheia inițială prin procedura Key Expansion. Ultima rundă se deosebește prin absența operației MixColumns. Decriptarea folosește operațiile inverse InvSubBytes, InvShiftRows, InvMixColumns și AddRoundKey în ordine inversă. Pentru dezvoltatorii mobile, înțelegerea structurii interne a AES nu este necesară — este suficient să știi cum să apelezi corect API-urile încorporate ale platformei cu parametrii corespunzători.

Efectul de avalanșă și rezistența criptografică a AES

Caracteristica cheie a AES care asigură rezistența sa criptografică este efectul de avalanșă (avalanche effect). Modificarea unui bit în textul clar sau în cheie duce la schimbarea a aproximativ 50% din biții textului criptat, ceea ce face AES extrem de rezistent la criptoanaliza diferențială și liniară. Combinația operațiilor SubBytes (nonlinearitate prin S-box) și MixColumns (difuzie prin înmulțire în câmpul Galois) creează o complexitate matematică la care chiar și cunoașterea unei părți a textului criptat nu permite recuperarea cheii mai rapid decât prin căutare completă. Conform analizei NIST (2018), cel mai bun atac cunoscut asupra AES-128 — biclique attack — reduce lungimea efectivă a cheii cu doar 2 biți (la 126.2 biți), ceea ce nu oferă un avantaj practic atacatorului. Pentru AES-256 nu există niciun atac practic fezabil care să depășească căutarea completă.

Dimensiunile cheilor AES și nivelurile de securitate

AES suportă trei dimensiuni de cheie, fiecare corespunzând unui anumit nivel de rezistență criptografică. Alegerea dimensiunii cheii influențează securitatea, performanța și cerințele de resurse ale dispozitivului.

Dimensiunea cheiiNumărul de rundeNivelul de securitateUtilizare
AES-12810128 de bițiAplicații comerciale, TLS
AES-19212192 de bițiSisteme guvernamentale (SECRET)
AES-25614256 de bițiTOP SECRET, sector financiar

Regula practică: în aplicațiile mobile utilizați AES-256 în mod implicit. Diferența de performanță între AES-128 și AES-256 pe dispozitivele moderne cu suport AES-NI nu depășește 10–15%, dar nivelul de securitate se dublează. Conform analizei cuantice (Grassl et al., 2016), pentru spargerea AES-128 sunt necesare 2^77 de operații cuantice prin algoritmul lui Grover, iar pentru AES-256 — 2^149, ceea ce face AES-256 rezistent la atacurile cuantice pentru următorii 20–30 de ani. Chiar și AES-128 asigură protecție suficientă pentru marea majoritate a scenariilor comerciale: pentru căutarea completă a unei chei de 128 de biți este necesară mai multă energie decât există în Univers, conform estimării lui Bruce Schneier. Cu toate acestea, standardele de securitate (GDPR, HIPAA, PCI DSS) solicită adesea explicit AES-256, de aceea în proiectele de producție se recomandă utilizarea lungimii maxime a cheii.

Modurile de operare AES

AES ca cifru în bloc criptează blocuri de dimensiune fixă (128 de biți). Pentru criptarea datelor de lungime arbitrară se utilizează modurile de operare (modes of operation). Alegerea modului influențează critic securitatea: un mod incorect poate anula rezistența AES.

  • ECB (Electronic Codebook) — cel mai simplu și cel mai nesigur mod. Fiecare bloc este criptat independent cu aceeași cheie. Blocurile identice de text clar produc blocuri identice de text criptat, ceea ce permite recuperarea structurii datelor. Interzis în toate standardele moderne de securitate. NU utilizați niciodată ECB în aplicațiile mobile.
  • CBC (Cipher Block Chaining) — fiecare bloc anterior de text criptat este utilizat ca vector de inițializare (IV) pentru următorul. Necesită un IV aleator pentru fiecare mesaj. Vulnerabil la atacurile padding oracle în cazul implementării incorecte. Potrivit pentru criptarea fișierelor, dar necesită MAC (HMAC) pentru asigurarea integrității datelor.
  • GCM (Galois/Counter Mode) — modul recomandat pentru aplicațiile mobile. Asigură criptare autentificată (AEAD): criptare + verificare integritate într-o singură operație. Utilizează un contor pentru generarea fluxului de cheie și înmulțirea în câmpul Galois pentru autentificare. GCM necesită un nonce unic (12 octeți) pentru fiecare mesaj. Recomandat de NIST, utilizat în TLS 1.2/1.3 și Android Keystore.
  • CCM (Counter with CBC-MAC) — un mod AEAD alternativ bazat pe CTR + CBC-MAC. Mai lent decât GCM și nu suportă procesarea paralelă. Utilizat în protocoalele ZigBee și 802.11 (Wi-Fi). Pentru aplicațiile mobile, GCM este preferat.

Pentru proiectele mobile utilizați AES-256-GCM cu un nonce de 12 octeți. GCM rezolvă două probleme simultan: criptarea datelor și verificarea autenticității, ceea ce previne atacurile de tip padding oracle și chosen ciphertext. Android Keystore și iOS CryptoKit suportă AES-GCM din cutie, fără a necesita implementarea de primitive criptografice suplimentare. Când lucrați cu GCM, este important să nu repetați niciodată nonce-ul cu aceeași cheie — aceasta distruge complet securitatea criptării. Generați un nou nonce aleator pentru fiecare criptare și păstrați-l împreună cu textul criptat.

Implementarea AES în aplicațiile mobile

Să examinăm un exemplu de implementare sigură a AES-256-GCM pe Android folosind Jetpack Security. Codul de mai jos demonstrează ciclul complet: crearea cheii AES-256 prin MasterKey, criptarea și decriptarea unui șir cu date autentificate suplimentare (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)
}

Caracteristica cheie a acestei soluții este utilizarea AES-256-GCM la două niveluri: pentru criptarea perechilor cheie-valoare (PrefValueEncryptionScheme) și pentru protejarea numelor cheilor în sine (PrefKeyEncryptionScheme utilizează AES-256-SIV, rezistent la repetarea nonce-ului). MasterKey este generat folosind algoritmul AES-256-GCM și stocat în Android Keystore, protejat hardware pe dispozitivele cu Trusted Execution Environment. Pe dispozitivele fără suport hardware (TEE), cheia este criptată prin Bouncy Castle, ceea ce este totuși mai sigur decât stocarea în SharedPreferences.

Pentru criptarea directă a volumelor mari de date (de exemplu, imagini sau fișiere) utilizați AES-256-GCM prin EncryptedFile din AndroidX Security. Pentru exportul cheilor (de exemplu, pentru backup) utilizați criptare suplimentară cu parola utilizatorului prin PBKDF2 cu 100000+ de iterații.

AES pe iOS prin CryptoKit

Pe iOS, lucrul cu AES este organizat prin framework-ul CryptoKit (Swift 5.0+). Cheia AES-256 este creată prin SymmetricKey(size: .bits256) și stocată în Secure Enclave — un criptoprocesor hardware izolat de CPU-ul principal și de sistemul de operare. CryptoKit oferă două implementări AES: AES.GCM (recomandat) și AES.CBC (pentru compatibilitate cu formatele vechi). Criptarea se realizează prin metoda seal(), care primește datele, cheia și nonce-ul (12 octeți) și returnează AES.GCM.SealedBox — o structură care conține textul criptat și tag-ul de autentificare. Decriptarea — prin open(). Apple nu recomandă utilizarea directă a CommonCrypto: CryptoKit selectează automat parametrii optimi, protejează împotriva atacurilor side-channel și utilizează accelerarea hardware AES-NI pe procesoarele Apple Silicon. Pe dispozitivele cu Secure Enclave, cheile nu părăsesc niciodată modulul hardware, ceea ce exclude furtul lor chiar și în cazul compromiterii totale a aplicației. Pentru serializarea cheii se utilizează metoda withUnsafeBytes cu stocarea ulterioară în Keychain prin SecItemAdd cu atributul kSecAttrAccessible = kSecAttrAccessibleWhenUnlockedThisDeviceOnly.

Întrebări frecvente

Ce este AES în cuvinte simple?

AES este un algoritm care transformă datele lizibile într-un set ilizibil de octeți cu ajutorul unei chei secrete. Aceeași cheie este necesară pentru a readuce datele la forma originală. AES este atât de fiabil încât este utilizat pentru criptarea documentelor secrete ale guvernului SUA.

Cu ce se deosebește AES-128 de AES-256?

AES-128 folosește o cheie de 128 de biți și execută 10 runde de criptare. AES-256 folosește o cheie de 256 de biți și 14 runde, ceea ce îl face de 2^128 de ori mai greu de spart. Pentru aplicațiile mobile, se recomandă AES-256 datorită diferenței minime de performanță.

Care mod AES este cel mai sigur?

AES-256-GCM — cel mai sigur și recomandat mod. GCM asigură criptare autentificată (criptare + verificare integritate). Modul ECB este interzis, CBC necesită un MAC separat. GCM este standardul de facto pentru aplicațiile mobile.

Poate fi spart AES?

Teoretic, AES poate fi spart prin căutare completă, dar pentru AES-256 sunt necesare 2^256 de încercări — mai multe decât atomi în Universul observabil. Atacuri practice asupra AES-256 nu există. Atacurile side-channel (Spectre, Meltdown) nu sparg AES, ci fură cheile din memorie, de aceea stocarea hardware a cheilor este critic de importantă.

Cum se utilizează AES într-o aplicație mobilă pe Android?

Utilizați biblioteca AndroidX Security: MasterKey.Builder cu KeyScheme.AES256_GCM creează o cheie protejată în Android Keystore, iar EncryptedSharedPreferences criptează automat toate datele prin AES-256-GCM. Nici o criptografie manuală — API-ul este sigur implicit, fără riscul erorilor de dezvoltator.

Rezumat

  • AES — cel mai răspândit și verificat algoritm de criptare simetrică, standardizat de NIST în 2001.
  • AES-256 asigură nivelul maxim de rezistență cu rezervă pentru atacurile cuantice din următorii 20–30 de ani.
  • Modul GCM — singurul mod recomandat pentru aplicațiile mobile: criptare + autentificare într-o singură operație.
  • Android Keystore și iOS Secure Enclave — depozite hardware care izolează cheile AES de aplicație.
  • Jetpack Security (Android) și CryptoKit (iOS) oferă implementări sigure ale AES-256-GCM fără criptografie manuală.
  • Nonce (IV) pentru GCM trebuie să fie unic pentru fiecare criptare — repetarea distruge complet securitatea.
  • Recomandare: utilizați AES-256-GCM prin EncryptedSharedPreferences pe Android și CryptoKit pe iOS pentru toate datele confidențiale.

Vom dezvolta o aplicație mobilă la cheie

IT Sectr creează aplicații iOS și Android pentru startup-uri și afaceri din 2017. Vă vom consilia și vă vom propune cea mai bună soluție.

Discutați proiectul

Citiți și