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 циклично измества втория ред с 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 — структура, съдържаща шифрования текст и маркер за удостоверяване. Дешифрирането — чрез 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 г. Ще ви консултираме и ще предложим най-доброто решение.

Обсъдете проекта

Прочетете също