如何检查 Linux 上的 OpenSSL 是否启用了 AES-NI
问题:我有一台具有 Intel AES-NI 硬件功能的 Linux 服务器。我想检查当前安装的 OpenSSL 是否可以使用 AES-NI 加速。
英特尔高级加密标准新指令(AES-NI)是针对 x86 处理器的特殊指令集,旨在加速 AES 算法的执行。基于 AES 的对称加密广泛应用于各种安全应用和协议实现(例如 IPSec、SSL/TLS、HTTPS、SSH)。 OpenSSL 加密库也支持基于 AES 的密码。
为了支持可用的硬件扩展,OpenSSL 提供了所谓的 EVP 加密 API(例如 EVP_Decrypt/EVP_Encrypt),它可以通过单个接口自动利用 AES-NI(如果可用)等硬件加速并回退到软件实现(如果不可用)。如果您想检查当前安装的 OpenSSL 是否支持 AES-NI 硬件加速,可以使用 OpenSSL 的 EVP API 进行测试。
检查 AES-NI 在 CPU 处理器上是否可用
在继续之前,首先验证当前的 CPU 是否具有 AES 指令集。为此,您可以按如下方式检查 CPU 标志。
$ grep -m1 -o aes /proc/cpuinfo
aes
如果输出显示 aes
,则表示 AES-NI 引擎可在当前 CPU 上使用。
检查是否为 OpenSSL 启用了 AES-NI
要检查 OpenSSL 是否可以利用 AES 指令集,您可以使用 OpenSSL 的 EVP API。当调用 EVP API 时,它们可以自动检测 AES-NI 的存在,并使用 AES 指令集加速 AES 加密计算。因此,您可以比较带或不带 EVP 功能的 AES 性能。如果 AES-NI 可用于 OpenSSL,则使用 EVP 函数时您将看到性能显着提升。
让我们使用 OpenSSL 的内置速度测试。
要在没有 AES-NI 加速的情况下测量 AES 算法速度:
$ openssl speed -elapsed aes-128-cbc

要使用 AES-NI 加速测量 AES 算法速度(通过 EVP API):
$ openssl speed -elapsed -evp aes-128-cbc

上面的两个示例输出显示了不同块大小的加密率。您可以看到,采用 AES-NI 加速的 AES 速度比未加速的大约高出五倍。这确认已为 OpenSSL 启用 AES-NI。如果 OpenSSL 因任何原因无法利用 AES-NI,则两个输出将显示相同的性能。