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 (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ă).
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.
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.
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ă.
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 cheii | Numărul de runde | Nivelul de securitate | Utilizare |
|---|---|---|---|
| AES-128 | 10 | 128 de biți | Aplicații comerciale, TLS |
| AES-192 | 12 | 192 de biți | Sisteme guvernamentale (SECRET) |
| AES-256 | 14 | 256 de biți | TOP 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.
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.
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.
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).
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.
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
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.
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ță.
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.
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ă.
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
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.
Citiți și