4

在 C/C++ 中使用 OpenSSL 加密库时,EVP 接口是否自动支持 AES-NI 硬件加速(假设处理器支持)?参考this,看来命令行 OpenSSL 确实有支持。我想知道是否必须使用特定的函数调用来利用这种支持。

例如,如果我使用EVP_EncryptInit_ex(ctx, type, imp, key, iv),这些参数是否必须指定 NI 加速?即会EVP_EncryptInit_ex(ctx, EVP_aes_256_cbc(), NULL, key, iv)成功吗?

谢谢!

4

1 回答 1

8

在 C/C++ 中使用 OpenSSL 加密库时,EVP 接口是否自动支持 AES-NI

是的。EVP_*是确保使用 AES-NI 的官方/支持方式(如果可用)。事实上,EVP 通常是访问硬件加速的唯一途径。

EVP_*也是获得其他硬件加速的唯一途径,比如在Skylark下使用Intel的ia32的SHA加速;ARMv8 中可用的 ARM 加密扩展;以及威盛处理器上的 ia32 挂锁扩展。

使用低级 AES 例程(如AES_encryptAES_decrypt)是纯软件实现,它们永远不会使用像 AES-NI 这样的硬件加速。另请参阅在运行时验证 AES-NI 使用?.


相关问题是(1)如何确定是否正在使用AES-NI;(2) 基准测试结果是什么。为此,请参阅如何检查 OpenSSL 是否支持/使用英特尔 AES-NI?

于 2014-07-01T19:14:59.680 回答