Java SSL провайдер с поддержкой AES-NI
Существует ли поставщик безопасности Java, который может обрабатывать соединения SSL и поддерживает инструкции AES-NI?
Я пытался использовать SunPKCS11 с Mozilla NSS, но он не работает для соединений SSL, которые используют шифрование AES. Согласно справочному руководству по Java PKCS#11, этот провайдер не поддерживает SSLContext.* "Алгоритмы":-(
2 ответа
В декабре 2012 года была предпринята некоторая активность на openjdk для поддержки AES-NI на x86. Смотрите JEPS-164
Это слияние в декабре 2012 года с jdk8, обсуждаемое здесь, включает изменения кода сборки для поддержки AES-NI. Из обсуждения похоже, что изменение может быть снова портировано на jdk7u12.
IBM JCE для Java V7 в ноябре 2012 года включает поддержку AES-NI.
Если используется один из этих новых JRE, ваша реализация java SSL/TLS должна использовать преимущества AES-NI без использования поставщика PKCS11.
Вы можете проверить свой BIOS, чтобы увидеть, можно ли включить / отключить AES-NI. Если это возможно, вы можете запустить микро-тест AES шифрования / дешифрования, чтобы увидеть, в чем разница.
Я считаю, что я нашел ответ на свой вопрос.
Прежде всего, я смешиваю "провайдеров" для двух разных библиотек: JCE (реализации криптоалгоритмов) и JSSE (поддержка безопасных сокетов).
Согласно Справочному руководству по JavaSM Secure Socket Extension (JSSE), раздел JCE и Аппаратное ускорение / Поддержка смарт-карт, поставщик JSSE по умолчанию (SunJSSE) использует JCE для всех операций шифрования.
JCE может быть настроен для использования аппаратно-ускоренного AES, например, с помощью библиотеки SunPKCS11 + mozilla-nss, как описано, например, в этом ответе.
Что остается сделать (в моем случае), это убедиться, что SSL настроен с правильными шифрами, и убедиться, что SunPKCS11 действительно используется ssl-соединениями.