AES (Advanced Encryption Standard) — је симетрични блоковски алгоритам шифровања, усвојен 2001. године од стране Националног института за стандарде и технологију САД (NIST) као званични стандард. AES је заменио застарели DES и од тада је постао најраспрострањенији алгоритам шифровања на свету, који се користи од банкарских система до мобилних апликација. Према подацима NIST (2023), AES обезбеђује отпорност еквивалентну 2^256 операција за кључ дужине 256 бита, што га чини нерањивим на савремене нападе грубом силом. NIST FIPS 197, 2023
Главно
AES (Advanced Encryption Standard) — је симетрични блоковски шифрар који су развили белгијски криптографи Joan Daemen и Vincent Rijmen под називом Rijndael. Године 2001, NIST је изабрао Rijndael као победника конкурса за нови стандард шифровања САД након пет година отвореног тестирања и анализе. AES ради са блоковима података фиксне величине (128 бита) и подржава три дужине кључа: 128, 192 и 256 бита. Број рунди трансформације зависи од дужине кључа: 10 рунди за 128-битни, 12 за 192-битни и 14 за 256-битни кључ. Свака рунда укључује четири операције: SubBytes (нелинеарна замена бајтова кроз S-box), ShiftRows (циклични померај редова), MixColumns (мешање колона) и AddRoundKey (наношење кључа рунде).
Развој AES-а је започео 1997. године, када је NIST расписао конкурс за замену DES-а, чији је 56-битни кључ разбијен за 22 сата 1998. године на специјализованом уређају Deep Crack. На конкурсу је учествовало 15 алгоритама из различитих земаља, укључујући Serpent (Велика Британија), Twofish (САД) и RC6 (САД). До финала 1999. године остало је 5 кандидата. Rijndael је победио захваљујући комбинацији високе брзине на свим платформама (од 8-битних микроконтролера до 64-битних сервера), отпорности на криптоанализу и компактне имплементације у хардверу. Од 2006. године, AES се користи за шифровање података са ознакама SECRET и TOP SECRET у владиним системима САД. Данас је AES уграђен у све главне протоколе: TLS 1.2/1.3, IPsec, SSH, Wi-Fi WPA2/WPA3 и Bluetooth BR/EDR.
AES обрађује податке у блоковима од 128 бита (16 бајтова), организованим у матрицу 4x4 бајта, названу state. Свака рунда шифровања изводи низ детерминистичких трансформација које заједно стварају ефекат «лавине»: промена једног бита улазних података мења око 50% битова излазних података. Такав ефекат чини AES отпорним на диференцијалну и линеарну криптоанализу — главне методе разбијања блоковских шифара.
Процес почиње са AddRoundKey — наношењем почетног кључа на state кроз операцију XOR. Затим се извршавају рунде: SubBytes замењује сваки бајт state вредношћу из S-box (табеле замене). ShiftRows цикличнo помера други ред за 1 позицију, трећи за 2, четврти за 3 — ово обезбеђује мешање између колона. MixColumns множи сваку колону state фиксном матрицом у Галоасовом пољу GF(2^8), стварајући зависност сваког излазног бајта од сва четири улазна бајта колоне. AddRoundKey наноси следећи кључ рунде, добијен из почетног кључа кроз процедуру Key Expansion. Последња рунда се разликује по одсуству операције MixColumns. Дешифровање користи инверзне операције InvSubBytes, InvShiftRows, InvMixColumns и AddRoundKey обрнутим редоследом. За мобилне програмере разумевање унутрашње структуре AES-а није потребно — довољно је знати како правилно позвати уграђене API-је платформе са одговарајућим параметрима.
Кључна карактеристика AES-а која обезбеђује његову криптоотпорност је лавински ефекат (avalanche effect). Промена једног бита у отвореном тексту или кључу доводи до промене приближно 50% битова шифрата, што чини AES изузетно отпорним на диференцијалну и линеарну криптоанализу. Комбинација операција SubBytes (нелинеарност кроз S-box) и MixColumns (дифузија кроз множење у Галоасовом пољу) ствара математичку сложеност при којој чак и познавање дела шифрата не омогућава обнављање кључа брже од потпуног претраживања. Према анализи NIST (2018), најбољи познати напад на AES-128 — biclique attack — смањује ефективну дужину кључа за само 2 бита (на 126.2 бита), што не даје практичну предност нападачу. За AES-256 не постоји ниједан практично изводљив напад који превазилази потпуно претраживање.
AES подржава три величине кључа, од којих свака одговара одређеном нивоу криптоотпорности. Избор величине кључа утиче на безбедност, перформансе и захтеве за ресурсима уређаја.
| Величина кључа | Број рунди | Ниво безбедности | Примена |
|---|---|---|---|
| AES-128 | 10 | 128 бита | Комерцијалне апликације, TLS |
| AES-192 | 12 | 192 бита | Владини системи (SECRET) |
| AES-256 | 14 | 256 бита | TOP SECRET, финансијски сектор |
Практично правило: у мобилним апликацијама подразумевано користите AES-256. Разлика у перформансама између AES-128 и AES-256 на савременим уређајима са подршком за AES-NI не прелази 10–15%, али ниво безбедности се удвостручује. Према квантној анализи (Grassl et al., 2016), за разбијање AES-128 потребно је 2^77 квантних операција кроз Гроверов алгоритам, а за AES-256 — 2^149, што чини AES-256 отпорним на квантне нападе у наредних 20–30 година. Чак и AES-128 пружа довољну заштиту за огромну већину комерцијалних сценарија: за потпуно претраживање 128-битног кључа потребно је више енергије него што постоји у Универзуму према процени Бруса Шнајера. Међутим, безбедносни стандарди (GDPR, HIPAA, PCI DSS) често изричито захтевају AES-256, зато се у продукционим пројектима препоручује коришћење максималне дужине кључа.
AES као блоковска шифра шифрује блокове фиксне величине (128 бита). За шифровање података произвољне дужине користе се режими рада (modes of operation). Избор режима критично утиче на безбедност: неправилан режим може поништити отпорност AES-а.
За мобилне пројекте користите AES-256-GCM са nonce дужине 12 бајтова. GCM решава два проблема истовремено: шифровање података и проверу аутентичности, што спречава нападе типа padding oracle и chosen ciphertext. Android Keystore и iOS CryptoKit подржавају AES-GCM из кутије без потребе за имплементацијом додатних криптографских примитива. При раду са GCM-ом важно је да никада не понављате nonce са истим кључем — то потпуно уништава безбедност шифровања. Генеришите нови случајни nonce за свако шифровање и чувајте га заједно са шифратом.
Размотримо пример безбедне имплементације AES-256-GCM на Android-у коришћењем Jetpack Security. Код испод демонстрира пуни циклус: креирање AES-256 кључа кроз MasterKey, шифровање и дешифровање низа са додатним аутентификованим подацима (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)
}
Кључна карактеристика овог решења је коришћење AES-256-GCM на два нивоа: за шифровање парова кључ-вредност (PrefValueEncryptionScheme) и за заштиту самих назива кључева (PrefKeyEncryptionScheme користи AES-256-SIV, отпоран на понављање nonce-а). MasterKey се генерише коришћењем алгоритма AES-256-GCM и чува се у Android Keystore, заштићеном хардверски на уређајима са Trusted Execution Environment. На уређајима без хардверске подршке (TEE), кључ се шифрује кроз Bouncy Castle, што је и даље безбедније од чувања у SharedPreferences.
За директно шифровање великих количина података (нпр. слика или датотека) користите AES-256-GCM кроз EncryptedFile из AndroidX Security. За извоз кључева (нпр. за прављење резервне копије) користите додатно шифровање корисничком лозинком кроз PBKDF2 са 100000+ итерација.
На iOS-у рад са AES-ом је организован кроз оквир CryptoKit (Swift 5.0+). AES-256 кључ се креира кроз SymmetricKey(size: .bits256) и чува у Secure Enclave — хардверском криптопроцесору изолованом од главног CPU-а и оперативног система. CryptoKit пружа две имплементације AES-а: AES.GCM (препоручени) и AES.CBC (за уназадну компатибилност са застарелим форматима). Шифровање се врши кроз метод seal(), који прима податке, кључ и nonce (12 бајтова), а враћа AES.GCM.SealedBox — структуру која садржи шифрат и аутентификациони tag. Дешифровање — кроз open(). Apple снажно не препоручује директно коришћење CommonCrypto: CryptoKit аутоматски бира оптималне параметре, штити од side-channel напада и користи хардверско убрзање AES-NI на Apple Silicon процесорима. На уређајима са Secure Enclave, кључеви никада не напуштају хардверски модул, што искључује њихову крађу чак и при потпуној компромитацији апликације. За серијализацију кључа користи се метод withUnsafeBytes са накнадним чувањем у Keychain кроз SecItemAdd са атрибутом kSecAttrAccessible = kSecAttrAccessibleWhenUnlockedThisDeviceOnly.
Често постављана питања
AES је алгоритам који претвара читљиве податке у нечитљив скуп бајтова помоћу тајног кључа. Исти кључ је потребан да се подаци врате у првобитни облик. AES је толико поуздан да се користи за шифровање тајних докумената владе САД.
AES-128 користи кључ дужине 128 бита и изводи 10 рунди шифровања. AES-256 користи 256-битни кључ и 14 рунди, што га чини 2^128 пута тежим за разбијање. За мобилне апликације препоручује се AES-256 због минималне разлике у перформансама.
AES-256-GCM — најбезбеднији и препоручени режим. GCM обезбеђује аутентификовано шифровање (шифровање + провера интегритета). ECB режим је забрањен, CBC захтева посебан MAC. GCM је де факто стандард за мобилне апликације.
Теоријски AES може бити разбијен потпуним претраживањем, али за AES-256 потребно је 2^256 покушаја — више него атома у видљивом Универзуму. Практични напади на AES-256 не постоје. Side-channel напади (Spectre, Meltdown) не разбијају AES, већ краду кључеве из меморије, зато је хардверско чување кључева критично важно.
Користите библиотеку AndroidX Security: MasterKey.Builder са KeyScheme.AES256_GCM креира заштићени кључ у Android Keystore, а EncryptedSharedPreferences аутоматски шифрује све податке кроз AES-256-GCM. Никакве ручне криптографије — API је безбедан подразумевано, без ризика од грешака програмера.
Резиме
Развићемо мобилну апликацију под кључ
IT Sectr креира iOS и Android апликације за стартапе и предузећа од 2017. године. Саветоваћемо вас и предложити најбоље решење.
Прочитајте такође