openjdk.ruOpenJDK на русском

JEP 164: Leverage CPU Instructions for AES Cryptography

Использование инструкций процессора для шифрования AES

ОтветственныйVladimir Kozlov
ТипFeature
ОбластьImplementation
СтатусClosed / Delivered
Выпуск8
Компонентhotspot / compiler
Обсуждениеhotspot dash compiler dash dev at openjdk dot java dot net
ТрудоёмкостьXS
ДлительностьXS
РецензентыMikael Vidstedt
ОдобренMikael Vidstedt
Создан2012/08/22 20:00
Обновлён2026/01/09 22:14
Задача8046154

Аннотация

Повысить производительность шифрования AES «из коробки» за счёт использования инструкций AES процессоров x86, если они доступны, и за счёт отказа от ненужного повторного расширения ключа AES.

Мотивация

Шифрование AES широко используется в приложениях, и от таких приложений ожидают хорошей производительности. Нам следует сделать так, чтобы эту хорошую производительность было легко получить «из коробки» на процессорах, которые аппаратно поддерживают инструкции AES.

Описание

Цель этого изменения — повысить производительность «из коробки» у приложений, которые используют шифрование AES. Изменение в компиляторе HotSpot (7184394) и изменение в библиотеке безопасности (7185471) на самом деле полностью независимы, если не считать того, что оба связаны с производительностью AES.

Компилятор HotSpot генерирует инструкции AES автоматически, если процессор x86 поддерживает такие инструкции (при желании это можно отключить с помощью флага). Эти инструкции могут генерироваться как на 64-битных, так и на 32-битных системах x86. Процессоры других типов это не затрагивает.

Изменение в библиотеке помогает приложениям, которые используют один и тот же ключ, но повторно инициализируют объект Cipher, переключаясь между шифрованием и расшифровкой. Отказ от повторного расширения ключа (7185471) меняет только закрытые переменные внутри класса com.sun.crypto.provider.AESCrypt. Другие классы это не затрагивает.

Тестирование

Это изменение можно протестировать стандартными бенчмарками и наборами тестов серверов приложений как на системах, которые поддерживают инструкции AES x86, так и на системах, которые не поддерживают инструкции AES x86, чтобы убедиться в отсутствии непредвиденных побочных эффектов.

Влияние

  • Безопасность: влияния нет, изменения только повышают производительность
  • Производительность и масштабируемость: необходимо проверить производительность новой реализации