AES-шифрование
AES — алгоритм шифрования. Выбранный правительством США в 2001 году после многолетнего открытого конкурса, он стал рабочей лошадкой криптографии на протяжении всей современной эпохи Интернета. TLS, WireGuard, BitLocker, FileVault, шифрование хранилища вашего телефона — все они внутри работают по стандарту AES.
Полный текст статьи на английском языке представлен ниже.
AES (расширенный стандарт шифрования) — это симметричный блочный шифр, выбранный NIST в 2001 году после пятилетнего открытого конкурса, в ходе которого пятнадцать проектов противопоставлялись друг другу. Победитель — первоначально названный Rijndael, разработанный бельгийскими криптографами Джоан Демен и Винсентом Райменом — стал стандартом шифрования для федеральных данных США и быстро стал стандартом по умолчанию почти для каждой коммерческой системы. Сравните с криптографией с открытым ключом (RSA, ECDH), где для каждого направления существуют отдельные ключи.
Блочный шифр: одновременно шифрует фрагменты данных фиксированного размера. AES использует размер блока 128 бит (16 байт) независимо от размера ключа.
Открытый текст разбивается на блоки, и каждый блок преобразуется с помощью серии математических операций с использованием ключа. Выходные данные представляют собой зашифрованный текст той же длины, что и входные.
Размеры ключей
AES поддерживает три размера ключей:
- AES-128 — 128-битный ключ, 10 внутренних циклов Operations
- AES-192 — 192-битный ключ, 12 раундов
- AES-256 — 256-битный ключ, 14 раундов
Все три считаются безопасными. AES-128 имеет 2^128 возможных ключей, что значительно превышает диапазон перебора — при одном триллионе попыток в секунду исчерпание пространства ключей занимает около 10 сексдемиллионов лет. AES-256 выбран из-за номинального дополнительного запаса безопасности против будущих криптографических достижений, особенно квантовых (алгоритм Гровера снижает эффективную стойкость ключа вдвое по сравнению с квантовыми компьютерами, поэтому AES-256 обеспечивает постквантовый уровень безопасности 128 бит).
Как AES на самом деле работает внутри
Для каждого блока AES выполняет последовательность операций над несколькими rounds:
- SubBytes — замените каждый байт, используя таблицу нелинейных замен (S-box).
- ShiftRows — циклически сдвигайте каждую строку состояния 4x4 матрица.
- MixColumns — умножение каждого столбца на фиксированную матрицу (в специальном конечном поле).
- AddRoundKey — XOR с ключом для конкретного раунда, полученным из главного ключа.
Комбинация подстановки и перестановки обеспечивает и путаница (каждый выходной бит зависит от многих ключевых битов), и диффузия (каждый бит открытого текста влияет на множество выходных битов) — два свойства, которые Шеннон определил как важные для безопасного шифра.
Режимы работы
AES шифрует один блок за раз. Для шифрования более длинных данных режим работы определяет способ цепочки блоков. Важные режимы:
- ECB (Электронная кодовая книга) — каждый блок шифруется независимо. Не используйте ни для чего; идентичные блоки открытого текста создают идентичный зашифрованный текст, раскрывая структуру. Стандарт на протяжении многих лет; уязвим для атак с использованием оракула заполнения, если не прошел аутентификацию.
- CTR (Счетчик) — зашифровать увеличивающийся счетчик и XOR с открытым текстом. Эффективно превращает AES в поточный шифр.
- GCM (режим Галуа/счетчика) — CTR + тег аутентификации за один проход. Доминирующий современный режим; используется TLS 1.3, WireGuard и большинством новых протоколов. AEAD (аутентифицированное шифрование со связанными данными) — официальное название этого класса.
. Если вы сегодня выбираете режим AES, используйте AES-GCM, если у вас нет особых причин не делать этого. Обычный AES-CBC без HMAC — это пустяк.
Аппаратное ускорение
Intel представила набор инструкций 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 с сокращенным циклом; но полный AES с 10/12/14 раундами и реализацией с постоянным временем не имеет известных практических перерывов. Сам шифр верный.
- Почему некоторые системы используют 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 большого размера.