plaintext0123456789ABCDEF14 roundsSubBytesShiftRowsMixColumnsciphertext????????????????????????????????AES-256: 14 rounds of confusion + diffusion

Шифрування AES

11 хв. читанняКриптографія

AES — це алгоритм шифрування. Вибраний урядом США в 2001 році після багаторічного відкритого конкурсу, він був робочою конячкою криптографії протягом усієї сучасної ери Інтернету. TLS, WireGuard, BitLocker, FileVault, шифрування пам’яті вашого телефону — усі вони, під капотом, є AES.

Повний текст статті подано англійською мовою нижче.

AES (Advanced Encryption Standard) — це симетричний блоковий шифр, обраний NIST у 2001 році після п’ятирічного відкритого конкурсу, у якому протистояли п’ятнадцять дизайнів. Переможець — спочатку названий Rijndael, розроблений бельгійськими криптографами Джоаном Деменом і Вінсентом Рейменом — став стандартом шифрування для федеральних даних США і швидко став стандартом для майже всіх комерційних систем.

Що означає «симетричний блоковий шифр»

Симетричний: шифрує і розшифровує той самий ключ. Порівняйте з криптографією з відкритим ключем (RSA, ECDH), де існують окремі ключі для кожного напрямку.

Блочний шифр: шифрує фрагменти даних фіксованого розміру за раз. AES використовує 128-бітний (16-байтний) розмір блоку незалежно від розміру ключа.

Відкритий текст розбивається на блоки, і кожен блок перетворюється серією математичних операцій із використанням ключа. Вихідні дані є зашифрованим текстом такої ж довжини, що й вхідні.

Розміри ключів

AES підтримує три розміри ключів:

  • AES-128 — 128-бітний ключ, 10 раундів внутрішнього операції
  • AES-192 — 192-бітний ключ, 12 раундів
  • AES-256 — 256-бітний ключ, 14 раундів

Усі три вважаються безпечними. AES-128 має 2^128 можливих ключів, що значно перевищує діапазон грубої сили — при одному трильйоні спроб на секунду вичерпання ключового простору займає близько 10 сексдецильйонів років. AES-256 вибрано для номінального додаткового запасу захисту від майбутніх криптографічних досягнень, особливо квантових (алгоритм Гровера зменшує ефективну міцність ключа вдвічі порівняно з квантовими комп’ютерами, тому AES-256 забезпечує постквантовий рівень безпеки 128 біт).

Як AES насправді працює всередині

Для кожного блоку AES виконує послідовність операції в кількох раундах:

  • SubBytes — замінити кожен байт за допомогою таблиці нелінійної підстановки (S-box).
  • ShiftRows — циклічно зсунути кожен рядок стану 4x4 matrix.
  • MixColumns — помножити кожен стовпець на фіксовану матрицю (у спеціальному скінченному полі).
  • AddRoundKey — XOR з ключем раунду, отриманим із головного key.

Поєднання підстановки та перестановки забезпечує як плутанину (кожен вихідний біт залежить від багатьох ключових бітів), так і розповсюдження (кожен біт відкритого тексту впливає на багато вихідних бітів) — дві властивості, які Шеннон визначив як важливі для безпечного шифру.

Режими роботи

AES шифрує по одному блоку за раз. Щоб зашифрувати довші дані, режим роботи визначає, як ланцюжок блоків. Важливі режими:

  • ECB (Електронна кодова книга) — кожен блок шифрується окремо. Ні для чого не використовувати; ідентичні блоки відкритого тексту створюють ідентичний зашифрований текст, розкриваючи структуру.
  • CBC (Cipher Block Chaining) — кожен блок виконує XOR з попереднім зашифрованим текстом перед шифруванням. Стандарт на багато років; вразливий до атак padding-oracle, якщо не пройшов автентифікацію.
  • CTR (Лічильник) — шифрує лічильник збільшення та XOR за допомогою відкритого тексту. Ефективно перетворює AES на потоковий шифр.
  • GCM (режим Галуа/лічильник) — CTR + тег автентифікації за один прохід. Домінуючий сучасний режим; використовується TLS 1.3, WireGuard і більшістю нових протоколів. AEAD (Authenticated Encryption with Associated Data) — офіційна назва цього класу.

IЯкщо ви сьогодні вибираєте режим AES, використовуйте AES-GCM, якщо у вас немає певних причин цього не робити. Звичайний AES-CBC без HMAC — це пістолет.

Апаратне прискорення

IIntel представила набір інструкцій AES-NI у 2010 році; Кілька років потому ARM зробила те саме. Сучасні процесори шифрують AES зі швидкістю понад 10 ГБ/с на ядро. Шифр фактично безкоштовний щодо вартості ЦП; вузьким місцем для зашифрованого зв’язку рідко є сам AES.

Ось чому AES-GCM є типовим у сучасних протоколах: він і безпечний, і фактично безкоштовний для апаратного забезпечення. Без апаратної підтримки ChaCha20-Poly1305 є кращою альтернативою, оскільки він швидший, ніж програмний AES на простих процесорах і ядрах ARM.

Де AES не використовується

У деяких місцях явно уникають AES. WireGuard використовує ChaCha20, оскільки протокол націлений на вбудовані пристрої та мінімальне розмаїття шифрів. Старіші протоколи (застарілий SSH, старіший OpenVPN) все ще використовують інші шифри для сумісності. Tor використовує суміш шифрів, обраних для різноманітності, а не продуктивності. Але для нового загального шифрування — шифрування дисків, підключень TLS, шифрування файлів — AES є типовим і безпечним вибором.

Математика витримує

Після більш ніж двох десятиліть криптоаналізу AES не має практичних атак. Найкраща академічна атака на повний шифр зменшує вартість грубої сили приблизно в 4 рази — це означає, що ефективний захист AES-128 становить близько 126 біт, і все ще абсолютно непрактично зламати. Атаки побічних каналів (час, аналіз потужності) можуть виявити ключі, коли реалізація є простою, але реалізації постійного часу з апаратним прискоренням закривають цю діру. Шифр, за будь-якими розумними мірками, безпечний.

Часті запитання

Чи AES-256 кращий за AES-128?
Номінально більш безпечний, на практиці обидва далеко за межами практичної грубої сили. Основною причиною вибору AES-256 є постквантова стійкість — алгоритм Гровера вдвічі знижує ефективний захист від квантових зловмисників, тому AES-256 забезпечує 128-бітний постквантовий захист проти 64-бітного AES-128 (що починає бути незручним). Для більшості контекстів обидва підходять.
Чи можна зламати AES?
Не грубою силою в будь-який реалістичний час. Атаки побічних каналів на погано реалізований AES відновили ключі; існують криптоаналітичні атаки на AES зі скороченим раундом; але повний 10/12/14-раундовий AES із реалізацією постійного часу не має відомої практичної перерви. Сам шифр є звуковим.
Чому деякі системи використовують ChaCha20 замість AES?
Продуктивність на обладнанні без AES-NI (вбудовані пристрої, старіші ядра ARM, прості мікроконтролери). ChaCha20 реалізовано в програмному забезпеченні з конкурентоспроможною швидкістю з апаратним прискоренням AES. На сучасних x86 і ARM з AES-NI AES зазвичай швидше. WireGuard вибрав ChaCha20, щоб забезпечити стабільну продуктивність усього обладнання.
Що таке AES-GCM проти AES-CBC?
Обидва є режимами роботи AES. AES-GCM — це автентифіковане шифрування — воно шифрує та створює тег перевірки за один прохід, запобігаючи підробці. AES-CBC – це просто шифрування; якщо вам потрібна автентифікація, вам доведеться додати HMAC окремо, а правильну комбінацію легко зіпсувати. Використовуйте GCM для нових дизайнів.
Чи захищає AES від квантових комп’ютерів?
Симетричні шифри, такі як AES, набагато більш квантово стійкі, ніж RSA або ECDH. Алгоритм Гровера зменшує ефективну міцність ключа вдвічі — AES-256 стає еквівалентним 128-бітному класичному ключу, що все ще є нездійсненним. AES-128 стає 64-бітним, що незручно. Постквантовою рекомендацією є AES-256 плюс великі розміри тегів MAC.
Пояснення шифрування AES: шифр, що стоїть за майже всім зашифрованим