К концу 1990-х годов криптографическое сообщество столкнулось с очевидной проблемой: широко используемый стандарт DES перестал обеспечивать достаточный уровень стойкости. Ограничение на длину ключа в 56 бит делало его уязвимым к перебору, а развитие вычислительных мощностей только ускоряло момент, когда полный перебор становился практической атакой. В этих условиях Национальный институт стандартов и технологий США (NIST) инициировал процесс поиска нового симметричного алгоритма шифрования, который должен был стать федеральным стандартом.
Процесс отбора получил название AES (Advanced Encryption Standard). Он не предполагал создание алгоритма с нуля в рамках одного института: был объявлен открытый международный конкурс, куда могли быть поданы криптографические системы от исследовательских групп и компаний со всего мира. Основные требования включали высокую стойкость к известным видам криптоанализа, эффективность как в программной, так и в аппаратной реализации, а также гибкость при работе с различными длинами ключей.
В 1998 году был сформирован список финалистов конкурса AES. Из множества предложений особое внимание привлек алгоритм Rijndael, разработанный бельгийскими криптографами Винсентом Рейменом и Йоаном Дайменом. Он отличался строгой математической структурой, высокой скоростью и простотой реализации.
Rijndael представлял собой блочный шифр с переменной длиной блока и ключа, однако в процессе стандартизации NIST зафиксировал параметры: блок 128 бит и ключи 128, 192 и 256 бит. Это решение позволило упростить стандарт и обеспечить унификацию.
В 2000 году Rijndael был выбран победителем конкурса AES. В 2001 году он был официально утверждён как федеральный стандарт США — FIPS-197.
AES относится к классу симметричных блочных шифров. Это означает, что один и тот же ключ используется как для шифрования, так и для расшифрования данных. В основе алгоритма лежит сеть подстановок и перестановок, обеспечивающая высокую степень диффузии и конфузии.
Основные параметры стандарта:
Каждый раунд преобразует входные данные с помощью набора операций, которые формируют устойчивую к анализу структуру.
Каждый раунд AES состоит из нескольких этапов преобразования состояния (state), представленного в виде матрицы байтов:
Первый этап всегда начинается с AddRoundKey, а последний раунд исключает MixColumns, что является особенностью конструкции стандарта.
Такая комбинация операций обеспечивает устойчивость к линейному и дифференциальному криптоанализу, а также затрудняет восстановление ключа даже при наличии большого количества известных пар «открытый текст — шифротекст».
AES построен на арифметике конечного поля GF(2^8). Каждый байт рассматривается как элемент поля, над которым выполняются операции сложения и умножения по модулю неприводимого многочлена.
S-box, используемый в SubBytes, формируется через обратные элементы в этом поле с последующим аффинным преобразованием. Такая конструкция делает замену нелинейной и устойчивой к аналитическим атакам.
MixColumns представляет собой умножение столбца матрицы на фиксированную матрицу в том же конечном поле, что обеспечивает перемешивание данных между байтами.
Сам по себе AES является блочным шифром и работает только с блоками фиксированного размера. Для обработки произвольных данных используются режимы работы:
ECB считается небезопасным для большинства практических задач, поскольку одинаковые блоки открытого текста дают одинаковые блоки шифротекста. CBC и CTR получили более широкое распространение благодаря лучшей криптографической стойкости.
Документ FIPS-197 фиксирует все ключевые аспекты алгоритма AES:
Стандартизация обеспечила единообразие реализации в различных системах, от аппаратных криптографических модулей до программных библиотек.
AES стал обязательным стандартом для защиты государственных данных в США и быстро получил международное признание. Его используют в банковских системах, сетевых протоколах, VPN, SSL/TLS и множестве программных библиотек.
В контексте JavaScript одной из наиболее известных библиотек, реализующих AES, является CryptoJS. Она предоставляет высокоуровневый интерфейс для шифрования и расшифрования данных без необходимости работы с низкоуровневыми операциями над блоками.
Внутри CryptoJS AES реализует стандартные режимы работы, чаще всего CBC, и использует PKCS7 padding для выравнивания данных до размера блока 128 бит.
Типичная структура использования включает:
Особое внимание уделяется режиму работы и вектору инициализации (IV), который критически важен для безопасности CBC и CTR. Отсутствие случайного IV приводит к повторяемости шифротекста и снижению стойкости системы.
AES считается устойчивым к большинству известных атак при корректной реализации. Его безопасность основана не на сложности математической задачи вроде факторизации или дискретного логарифма, а на структуре замены и перестановки.
Основные свойства:
При этом безопасность может быть нарушена не самим алгоритмом, а неправильным использованием: повтор IV, слабая генерация ключей, использование ECB.
После стандартизации AES стал базовым элементом современной криптографии. Он постепенно заменил DES и 3DES в большинстве систем. С увеличением вычислительных мощностей обсуждалась возможность атак на сокращённые версии AES, однако полная версия с 128-битным блоком и ключами 128+ бит остаётся криптографически устойчивой.
Аппаратные ускорения AES-NI в процессорах Intel и AMD сделали его выполнение практически бесплатным с точки зрения производительности, что дополнительно укрепило его роль как стандарта по умолчанию.
AES используется как основной симметричный алгоритм в гибридных схемах шифрования. В таких системах асимметричная криптография применяется только для обмена ключами, а само шифрование данных выполняется AES из-за его высокой скорости.
Он интегрирован в:
Широкое распространение делает AES фактическим стандартом де-факто для симметричного шифрования в современных программных системах.