AES: шта је то, алгоритам симетричног шифровања и где се примењује

Аутор: IT Sectr Објављено: 2026-04-02 Време читања: 9 мин

AES (Advanced Encryption Standard) — је симетрични блоковски алгоритам шифровања, усвојен 2001. године од стране Националног института за стандарде и технологију САД (NIST) као званични стандард. AES је заменио застарели DES и од тада је постао најраспрострањенији алгоритам шифровања на свету, који се користи од банкарских система до мобилних апликација. Према подацима NIST (2023), AES обезбеђује отпорност еквивалентну 2^256 операција за кључ дужине 256 бита, што га чини нерањивим на савремене нападе грубом силом. NIST FIPS 197, 2023

Главно

  • AES — симетрични блоковски шифрар са фиксном величином блока 128 бита и кључевима 128, 192 или 256 бита.
  • Режим GCM — препоручени режим рада AES-а за мобилне апликације, који обезбеђује аутентификовано шифровање.
  • AES-256 — верзија са максималним нивоом отпорности, препоручена за заштиту података високе осетљивости.
  • Хардверско убрзање — AES-NI инструкције процесора омогућавају извођење шифровања брзином до 10 GB/s на савременим уређајима.
  • Android и iOS пружају уграђене API-је за AES: Android Keystore и iOS CryptoKit са подршком за хардверско убрзање.

Шта је AES?

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

Развој 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 шифровање

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-а

Кључна карактеристика AES-а која обезбеђује његову криптоотпорност је лавински ефекат (avalanche effect). Промена једног бита у отвореном тексту или кључу доводи до промене приближно 50% битова шифрата, што чини AES изузетно отпорним на диференцијалну и линеарну криптоанализу. Комбинација операција SubBytes (нелинеарност кроз S-box) и MixColumns (дифузија кроз множење у Галоасовом пољу) ствара математичку сложеност при којој чак и познавање дела шифрата не омогућава обнављање кључа брже од потпуног претраживања. Према анализи NIST (2018), најбољи познати напад на AES-128 — biclique attack — смањује ефективну дужину кључа за само 2 бита (на 126.2 бита), што не даје практичну предност нападачу. За AES-256 не постоји ниједан практично изводљив напад који превазилази потпуно претраживање.

Величине кључева AES-а и нивои безбедности

AES подржава три величине кључа, од којих свака одговара одређеном нивоу криптоотпорности. Избор величине кључа утиче на безбедност, перформансе и захтеве за ресурсима уређаја.

Величина кључаБрој рундиНиво безбедностиПримена
AES-12810128 битаКомерцијалне апликације, TLS
AES-19212192 битаВладини системи (SECRET)
AES-25614256 бита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-а

AES као блоковска шифра шифрује блокове фиксне величине (128 бита). За шифровање података произвољне дужине користе се режими рада (modes of operation). Избор режима критично утиче на безбедност: неправилан режим може поништити отпорност AES-а.

  • ECB (Electronic Codebook) — најједноставнији и најнебезбеднији режим. Сваки блок се шифрује независно истим кључем. Идентични блокови отвореног текста дају идентичне блокове шифрата, што омогућава обнављање структуре података. Забрањен за употребу у свим савременим безбедносним стандардима. НИКАДА не користите ECB у мобилним апликацијама.
  • CBC (Cipher Block Chaining) — сваки претходни блок шифрата се користи као иницијализациони вектор (IV) за следећи. Захтева случајни IV за сваку поруку. Рањив на padding oracle нападе при неправилној имплементацији. Погодан за шифровање датотека, али захтева MAC (HMAC) за обезбеђивање интегритета података.
  • GCM (Galois/Counter Mode) — препоручени режим за мобилне апликације. Обезбеђује аутентификовано шифровање (AEAD): шифровање + провера интегритета у једној операцији. Користи бројач за генерисање кључног тока и множење у Галоасовом пољу за аутентификацију. GCM захтева јединствени nonce (12 бајтова) за сваку поруку. Препоручен од стране NIST-а, користи се у TLS 1.2/1.3 и Android Keystore.
  • CCM (Counter with CBC-MAC) — алтернативни AEAD режим заснован на CTR + CBC-MAC. Спорији од GCM-а и не подржава паралелну обраду. Користи се у протоколима ZigBee и 802.11 (Wi-Fi). За мобилне апликације GCM је пожељнији.

За мобилне пројекте користите AES-256-GCM са nonce дужине 12 бајтова. GCM решава два проблема истовремено: шифровање података и проверу аутентичности, што спречава нападе типа padding oracle и chosen ciphertext. Android Keystore и iOS CryptoKit подржавају AES-GCM из кутије без потребе за имплементацијом додатних криптографских примитива. При раду са GCM-ом важно је да никада не понављате nonce са истим кључем — то потпуно уништава безбедност шифровања. Генеришите нови случајни nonce за свако шифровање и чувајте га заједно са шифратом.

Имплементација AES-а у мобилним апликацијама

Размотримо пример безбедне имплементације AES-256-GCM на Android-у коришћењем Jetpack Security. Код испод демонстрира пуни циклус: креирање AES-256 кључа кроз MasterKey, шифровање и дешифровање низа са додатним аутентификованим подацима (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)
}

Кључна карактеристика овог решења је коришћење 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+ итерација.

AES на iOS-у кроз CryptoKit

На 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 је толико поуздан да се користи за шифровање тајних докумената владе САД.

По чему се AES-128 разликује од AES-256?

AES-128 користи кључ дужине 128 бита и изводи 10 рунди шифровања. AES-256 користи 256-битни кључ и 14 рунди, што га чини 2^128 пута тежим за разбијање. За мобилне апликације препоручује се AES-256 због минималне разлике у перформансама.

Који режим AES-а је најбезбеднији?

AES-256-GCM — најбезбеднији и препоручени режим. GCM обезбеђује аутентификовано шифровање (шифровање + провера интегритета). ECB режим је забрањен, CBC захтева посебан MAC. GCM је де факто стандард за мобилне апликације.

Може ли се AES разбити?

Теоријски AES може бити разбијен потпуним претраживањем, али за AES-256 потребно је 2^256 покушаја — више него атома у видљивом Универзуму. Практични напади на AES-256 не постоје. Side-channel напади (Spectre, Meltdown) не разбијају AES, већ краду кључеве из меморије, зато је хардверско чување кључева критично важно.

Како користити AES у мобилној апликацији на Android-у?

Користите библиотеку AndroidX Security: MasterKey.Builder са KeyScheme.AES256_GCM креира заштићени кључ у Android Keystore, а EncryptedSharedPreferences аутоматски шифрује све податке кроз AES-256-GCM. Никакве ручне криптографије — API је безбедан подразумевано, без ризика од грешака програмера.

Резиме

  • AES — најраспрострањенији и проверени симетрични алгоритам шифровања, стандардизован од стране NIST-а 2001. године.
  • AES-256 обезбеђује максимални ниво отпорности са резервом за квантне нападе у наредних 20–30 година.
  • Режим GCM — једини препоручени режим за мобилне апликације: шифровање + аутентификација у једној операцији.
  • Android Keystore и iOS Secure Enclave — хардверска складишта која изолују AES кључеве од апликације.
  • Jetpack Security (Android) и CryptoKit (iOS) пружају безбедне имплементације AES-256-GCM без ручне криптографије.
  • Nonce (IV) за GCM мора бити јединствен за свако шифровање — понављање потпуно уништава безбедност.
  • Препорука: користите AES-256-GCM кроз EncryptedSharedPreferences на Android-у и CryptoKit на iOS-у за све поверљиве податке.

Развићемо мобилну апликацију под кључ

IT Sectr креира iOS и Android апликације за стартапе и предузећа од 2017. године. Саветоваћемо вас и предложити најбоље решење.

Разговарајте о пројекту

Прочитајте такође