SSL 接続を処理でき、AES-NI 命令をサポートする Java セキュリティ プロバイダはありますか?
Mozilla NSS で SunPKCS11 を使用しようとしましたが、AES 暗号化を使用する SSL 接続では機能しません。Java PKCS#11 Reference Guideによると、このプロバイダは SSLContext.* "algorithms" をサポートしていません:-(
SSL 接続を処理でき、AES-NI 命令をサポートする Java セキュリティ プロバイダはありますか?
Mozilla NSS で SunPKCS11 を使用しようとしましたが、AES 暗号化を使用する SSL 接続では機能しません。Java PKCS#11 Reference Guideによると、このプロバイダは SSLContext.* "algorithms" をサポートしていません:-(
x86 でAES-NIをサポートするために、2012 年 12 月にopenjdkでいくつかの最近の活動が行われました。JEPS-164を参照
この2012 年 12 月の jdk8 へのマージについては、ここで説明します。これには、AES-NI をサポートするためのアセンブリ コードの変更が含まれます。議論から、変更が jdk7u12 に移植される可能性があるようです。
2012 年 11 月のIBM JCE for Java V7 には、AES-NI のサポートが含まれています。
これらの新しい JRE のいずれかを使用する場合、Java SSL/TLS 実装はPKCS11 プロバイダーを使用せずにAES-NIを利用する必要があります。
BIOS をチェックして、AES-NIを有効/無効にできるかどうかを確認できます。可能であれば、AES 暗号化/復号化のマイクロベンチマークを実行して、違いを確認できます。
私は自分の質問に対する答えを見つけたと信じています。
まず、JCE(暗号化アルゴリズムの実装)とJSSE(セキュアソケットのサポート)という2つの異なるライブラリの「プロバイダー」を混合しています。
JavaTM Secure Socket Extension(JSSE)リファレンスガイドのセクションJCEおよびハードウェアアクセラレーション/スマートカードサポートによると、デフォルトのJSSEプロバイダー(SunJSSE)はすべての暗号化操作にJCEを使用します。
JCEは、ハードウェアアクセラレーションによるAESを使用するように構成できます。たとえば、この回答に記載されているように、SunPKCS11+mozilla-nssライブラリを使用します。
(私の場合)まだやるべきことは、SSLが適切な暗号で構成されていることを確認し、SunPKCS11が実際にSSL接続で使用されていることを確認することです。