在Linux系统上如何检查是否支持AES-NI(高级加密)

时间:2019-11-20 08:53:53  来源:igfitidea点击:

英特尔高级加密标准(AES)或新指令(AES-NI)引擎可对OpenSSL,ssh,VPN,Linux/Unix/OSX全盘加密等进行高速硬件加密和解密。
AES-NI是x86指令集体系结构的扩展,用于Intel和AMD的微处理器。它提高了使用AES执行加密和解密的应用程序的速度。
一些服务器和笔记本电脑供应商已经出厂了禁用AES-NI扩展名的BIOS配置。
可能需要更新BIOS或者更改设置,才能启用AES/AES-NI。

在Linux上,如何检测是否支持Intel或AMD AES-NI的?
在Linux上如何检查CPU是否支持AES-NI?

在Linux系统上检测是否支持AES-NI(高级加密)

使用lscpu命令可以检查处理器是否具有AES/AES-NI指令集:

# lscpu

检查处理器是否有AES指令并已在BIOS中启用:

# grep -o aes /proc/cpuinfo

或者

# grep -m1 -o aes /proc/cpuinfo

使用cpuid检查在Linux上是否启用了AES-NI

另一种方法是使用cpuid命令:

# cpuid | grep -i aes | sort | uniq

输出示例:

AES instruction                         = true

如何检测是否所有的CPU都支持AES NI?

下面这两个命令的输出结果应该一样:

# lscpu | grep '^CPU(s):'
# grep -o aes /proc/cpuinfo | wc -l

检查系统是否加载了英特尔AES-NI指令优化驱动程序?

# sort -u /proc/crypto | grep module

输出示例:

module       : aesni_intel
module       : aes_x86_64
module       : crc32_pclmul
module       : crct10dif_pclmul
module       : ghash_clmulni_intel
module       : kernel

检查是否为openssl启用了Intel AES-NI?

是否支持AES-NI/VIA挂锁引擎?

$ openssl engine

支持AES的基于VIA的cpu的输出示例:

(padlock) VIA PadLock (no-RNG, no-ACE)
(dynamic) Dynamic engine loading support

另一个服务器的输出

(aesni) Intel AES-NI engine (dynamic) Dynamic engine loading support

支持AES-NI的CPU和普通CPU比较

服务器A支持AES-NI,

$ dd if=/dev/zero count=1000 bs=1M | ssh -l Hyman -c aes128-cbc serverA "cat >/dev/null"

结果:
Password: 1000+0 records in 1000+0 records out 1048576000 bytes (1.0 GB) copied, 10.6691 s, 98.3 MB/s

服务器B不支持硬件加密:

$ dd if=/dev/zero count=1000 bs=1M | ssh -l Hyman -c aes128-cbc serverB "cat >/dev/null"

结果:
Hyman@localhost's password: 1000+0 records in 1000+0 records out 1048576000 bytes (1.0 GB) copied, 31.6675 s, 33.1 MB/s

测试openssl性能

在上面的两个系统上,运行下面的命令进行比较:

$ openssl speed

或者

$ openssl speed aes-128-cbc

对于最新版本的openssl,可以试试更长的密钥:

$ openssl speed aes-256-cbc
$ openssl speed -evp aes-256-cbc