Intel AES-NI¶
Intel AES-NI (Advanced Encryption Standard New Instructions) — это набор инструкций для процессоров архитектуры x86, разработанный корпорацией Intel. Он предназначен для аппаратного ускорения выполнения алгоритма симметричного шифрования AES (Advanced Encryption Standard). Набор инструкций позволяет значительно повысить скорость операций шифрования и дешифрования по сравнению с программной реализацией, а также снизить нагрузку на центральный процессор.
¶История
Разработка инструкций AES-NI была начата Intel в ответ на растущие потребности в производительном шифровании в различных сферах — от защиты данных на жёстких дисках до обеспечения безопасности сетевых протоколов. Первыми процессорами, поддерживающими AES-NI, стали чипы на микроархитектуре Westmere, выпущенные в 2010 году. К ним относятся процессоры Intel Core i5 и i7 серий 6xx и 7xx (для настольных ПК), а также серверные процессоры Intel Xeon серии 5600.
С момента появления поддержка AES-NI стала стандартной для большинства процессоров Intel, за исключением некоторых бюджетных моделей (например, Pentium, Celeron и Atom определённых поколений). В 2012 году компания AMD также внедрила аналогичный набор инструкций в свои процессоры на микроархитектуре Bulldozer.
¶Архитектура и набор инструкций
AES-NI включает в себя шесть новых инструкций, которые выполняют ключевые операции алгоритма AES на аппаратном уровне. Эти инструкции работают с 128-битными регистрами XMM (расширение SSE) и не требуют сложного микрокода.
¶Основные инструкции
- AESENC (Perform One Round of an AES Encryption Flow) — выполняет один раунд шифрования AES. Она включает операции SubBytes (замена байтов), ShiftRows (сдвиг строк), MixColumns (смешивание столбцов) и AddRoundKey (добавление раундового ключа).
- AESENCLAST (Perform Last Round of an AES Encryption Flow) — выполняет последний раунд шифрования, который отличается от обычных раундов отсутствием операции MixColumns.
- AESDEC (Perform One Round of an AES Decryption Flow) — выполняет один раунд дешифрования AES, включая обратные операции InvSubBytes, InvShiftRows, InvMixColumns и AddRoundKey.
- AESDECLAST (Perform Last Round of an AES Decryption Flow) — выполняет последний раунд дешифрования.
- AESKEYGENASSIST (Assist in AES Round Key Generation) — используется для генерации раундовых ключей из исходного ключа шифрования. Эта инструкция упрощает процесс расширения ключа (key expansion).
- PCLMULQDQ (Carry-Less Multiplication Quadword) — хотя формально не входит в AES-NI, но часто упоминается вместе с ним. Эта инструкция выполняет умножение без переноса (carry-less multiplication), которое используется в режимах работы AES, таких как GCM (Galois/Counter Mode), для вычисления кодов аутентификации.
¶Принцип работы
Алгоритм AES работает с блоками данных размером 128 бит. Ключи шифрования могут быть длиной 128, 192 или 256 бит. Каждый размер ключа определяет количество раундов шифрования: 10, 12 или 14 соответственно.
При использовании AES-NI процессор выполняет каждый раунд AES за один такт (или несколько тактов), тогда как программная реализация требует десятков и сотен тактов. Инструкции AESENC и AESDEC обрабатывают один раунд за раз, а AESENCLAST и AESDECLAST — последний раунд. Генерация раундовых ключей выполняется с помощью AESKEYGENASSIST.
Процесс шифрования с AES-NI выглядит следующим образом:
- Исходный ключ загружается в регистр XMM.
- С помощью AESKEYGENASSIST генерируются все необходимые раундовые ключи.
- Блок открытого текста загружается в другой регистр XMM.
- Выполняется начальная операция AddRoundKey (обычно через инструкцию XOR).
- Для каждого раунда (кроме последнего) вызывается AESENC.
- Для последнего раунда вызывается AESENCLAST.
- Результат (шифротекст) сохраняется из регистра в память.
¶Производительность и преимущества
Использование AES-NI даёт значительный прирост производительности по сравнению с чисто программной реализацией. По данным Intel, скорость шифрования может увеличиться в 3–10 раз в зависимости от размера данных и используемого режима работы AES.
¶Ключевые преимущества
- Высокая скорость: Аппаратное выполнение раундов AES сокращает задержки и увеличивает пропускную способность.
- Низкое энергопотребление: Выполнение операций на аппаратном уровне требует меньше энергии, чем программная эмуляция, что особенно важно для мобильных устройств и серверов.
- Устойчивость к атакам по времени: Аппаратная реализация менее подвержена атакам по сторонним каналам (timing attacks), которые основаны на анализе времени выполнения операций.
- Снижение нагрузки на процессор: Освобождаются ресурсы процессора для выполнения других задач, что повышает общую производительность системы.
¶Применение
AES-NI широко используется в различных программных и аппаратных решениях, где требуется производительное шифрование.
¶Операционные системы
- Windows: В ОС Windows, начиная с версии 7, используется BitLocker — функция шифрования дисков. BitLocker активно использует AES-NI для ускорения шифрования и дешифрования данных.
- Linux: В ядре Linux поддержка AES-NI реализована в криптографическом API (crypto subsystem). Многие дистрибутивы, включая Ubuntu, Fedora и Debian, используют AES-NI для ускорения шифрования дисков (LUKS/DM-Crypt), сетевых протоколов (IPsec, TLS/SSL) и файловых систем (eCryptfs, fscrypt).
- macOS: Операционная система macOS от Apple также использует AES-NI для шифрования дисков (FileVault 2) и других криптографических операций.
¶Прикладное программное обеспечение
- Виртуализация: Гипервизоры, такие как VMware ESXi, Microsoft Hyper-V и KVM, используют AES-NI для ускорения шифрования виртуальных машин и сетевого трафика.
- Базы данных: Системы управления базами данных (СУБД), например, Microsoft SQL Server и Oracle Database, могут использовать AES-NI для шифрования данных (Transparent Data Encryption, TDE).
- Веб-серверы: Веб-серверы, такие как Nginx и Apache, используют AES-NI для ускорения обработки HTTPS-соединений (TLS/SSL). Это особенно важно для высоконагруженных сайтов.
- Архиваторы: Программы для сжатия и шифрования данных, например, 7-Zip и WinRAR, поддерживают AES-NI для ускорения создания зашифрованных архивов.
- Криптографические библиотеки: Популярные библиотеки, такие как OpenSSL, LibreSSL, GnuTLS и Crypto++, включают оптимизированные реализации AES, использующие AES-NI.
¶Сетевые протоколы
- IPsec: Протокол защиты сетевого трафика на уровне IP.
- TLS/SSL: Протоколы, обеспечивающие безопасность соединений в интернете (например, HTTPS).
- SSH: Протокол для удалённого управления компьютерами.
¶Критика и ограничения
Несмотря на очевидные преимущества, AES-NI имеет и некоторые ограничения.
- Зависимость от аппаратного обеспечения: Для использования AES-NI требуется процессор с поддержкой этих инструкций. В старых или бюджетных процессорах эта функция может отсутствовать.
- Уязвимости: В прошлом были обнаружены уязвимости, связанные с атаками по сторонним каналам на аппаратную реализацию AES-NI. Например, атака на кэш (cache-timing attack) может позволить злоумышленнику восстановить ключ шифрования. Однако Intel и AMD выпускали исправления микрокода для смягчения таких атак.
- Сложность реализации: Разработчикам программного обеспечения необходимо корректно использовать инструкции AES-NI, что требует определённых знаний и навыков. Неправильное использование может привести к снижению производительности или ошибкам.
¶Будущее развитие
AES-NI остаётся актуальным и широко используемым набором инструкций. С развитием технологий и появлением новых угроз безопасности, Intel и AMD продолжают совершенствовать аппаратную поддержку шифрования. В более новых процессорах появились дополнительные инструкции, такие как VAES (Vector AES), которые расширяют возможности AES-NI для работы с большими векторами данных (256-бит и 512-бит). Это позволяет ещё больше увеличить пропускную способность шифрования, особенно в высокопроизводительных вычислениях и облачных средах.
¶Источники
- Intel Corporation. "Intel® 64 and IA-32 Architectures Software Developer's Manual". Volume 2: Instruction Set Reference.
- Intel Corporation. "Intel® Advanced Encryption Standard (AES) New Instructions Set".
- Gueron, S. "Intel® AES-NI: A Performance and Security Perspective". Intel Technology Journal, 2010.
- Bernstein, D. J. "Cache-timing attacks on AES". 2005.
- Документация по криптографическому API ядра Linux.