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, чтобы убедиться в отсутствии непредвиденных побочных эффектов.
Влияние
- Безопасность: влияния нет, изменения только повышают производительность
- Производительность и масштабируемость: необходимо проверить производительность новой реализации