【问题标题】:Does Java use AES-NI when available? [duplicate]Java 是否在可用时使用 AES-NI? [复制]
【发布时间】:2014-08-26 12:29:29
【问题描述】:

我刚刚听说了指令集扩展 AES-NI。如果可以提高性能,Java 的 JIT 编译器是否会将应用程序编译为使用 AES-NI?

如果是,如果不确定是否会使用 AES(例如使用 TLS 时),它是否也会这样做?

【问题讨论】:

  • 我觉得没有捆绑JDK,要自己下载构建software.intel.com/en-us/articles/…
  • @Leo 值得回答。
  • @Leo 我同意。很遗憾我不能接受评论作为答案:P
  • 如果你只是因为听上去有道理就接受答案,你就会做出不正确的假设。

标签: java cryptography aes instruction-set aes-ni


【解决方案1】:

Java 87u40 及更高版本包括对内置 SunJCE 提供程序的 x86 AES 内在函数的支持,但默认情况下不启用该功能(它是)。

globals.hpp 中搜索“AES”:

product(bool, UseAES, false,                                              \
        "Control whether AES instructions can be used on x86/x64")        \
...
product(bool, UseAESIntrinsics, false,                                    \
        "Use intrinsics for AES versions of crypto")                      \

您可以通过将-XX:+UseAES -XX:+UseAESIntrinsics 选项传递给虚拟机来启用该功能。

【讨论】:

  • 你确定吗?对以前版本的测试表明它已打开。如果你是对的,那么 Oracle 换了策略。请注意我对欺骗的密切投票。
  • @owlstead 我刚刚使用-XX:+PrintFlagsFinal 进行了测试,默认情况下确实启用了它。标志可能在代码中的其他地方被修改,覆盖这里初始化的值。不过,这个问题绝对是个骗局。
  • 我认为在检测到 AES-NI 的存在后它们会发生变化。请注意,在包含指令的第一个 CPU 上,检测可能会失败...
  • 注意:您需要使用 Java 服务器 VM 来启用内在函数。
【解决方案2】:

【讨论】:

  • 这适用于某种第三方基于 NSS 的安全提供商。 SunJCE 提供程序也支持 AES 内在函数。
猜你喜欢
  • 2014-10-06
  • 1970-01-01
  • 2017-10-07
  • 1970-01-01
  • 2012-09-20
  • 2015-03-31
  • 2012-12-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多