如何找出在Linux系统上启用的AES-NI(高级加密)
英特尔高级加密标准(AES)或新指令(AES-NI)引擎可对OpenSSL,ssh,VPN,Linux/Unix/OSX全盘加密等进行高速硬件加密和解密。
如何在基于Linux的系统(包括OpenSSL)中检查对运行的Linux中加载的Intel或AMD AES-NI的支持?
Advanced Encryption Standard指令集和Intel Advanced Encryption Standard新指令允许特定的Intel/AMD和其他CPU进行极其快速的硬件加密和解密。
请注意,如果检测到的处理器在上述支持列表中,则会自动启用AES-NI支持。
有关支持AES-NI引擎的处理器列表,请参阅Intel ARK/AMD/ARM(供应商)/VIA挂锁站点和文档。
AES-NI是x86指令集体系结构的扩展,用于Intel和AMD的微处理器。
它提高了使用AES执行加密和解密的应用程序的速度。
一些服务器和笔记本电脑供应商已经出厂了禁用AES-NI扩展名的BIOS配置。
该页面向您展示如何在Linux上检查CPU是否支持AES-NI。
您可能需要更新BIOS才能启用AES/AES-NI或更改BIOS设置。
支持以下CPU:
- Intel Westmere/Westmere-EP(Xeon 56xx)/Clarkdale(Core i3,奔腾和赛扬除外)/Arrandale(Celeron,Pentium,Core i3,Core i5-4XXM除外)。
- 英特尔Sandy Bridge cpus(奔腾,赛扬,Core i3除外)。
- 英特尔移动酷睿i7和酷睿i5。
- Intel Ivy Bridge处理器仅适用于所有i5,i7,Xeon和i3-2115C。
- 英特尔Haswell处理器(除i3-4000m,奔腾和赛扬之外的所有处理器)。
- 英特尔Coffee Lake/Kaby Lake等
- 基于AMD Bulldozer/Piledriver/Steamroller/Jaguar/Puma/Ryzen的处理器。
- AMD Geode LX处理器。
- 威盛PadLock(与Intel AES-NI不同的指令集,但在一天结束时执行相同的操作)。
- ARM选择使用安全处理器的Allwinner和Broadcom。基于ARM的处理器很少。
如何找出在Linux系统上启用的AES-NI(高级加密)
使用lscpu命令可以发现处理器具有AES/AES-NI指令集:
# lscpu
执行以下命令,以确保处理器已设置AES指令并已在BIOS中启用:
# grep -o aes /proc/cpuinfo
或者
# grep -m1 -o aes /proc/cpuinfo
Linux验证处理器/CPU是否具有AES-NI指令
检查是否在使用cpuid的Linux上启用了AES-NI
另一种选择是使用cpuid命令:
# cpuid | grep -i aes | sort | uniq
输出示例:
AES instruction = true
如何确认我所有的CPU都支持AES NI?
以下两个命令的输出应相同:
# lscpu | grep '^CPU(s):' `32`
和:
# grep -o aes /proc/cpuinfo | wc -l `32`
是否为Linux服务器/笔记本电脑/台式机加载了英特尔AES-NI指令优化驱动程序?
执行以下命令以检查处理器上的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
来自基于Intel的系统的另一个支持AES-NI的输出:
$ openssl engine
sh(aesni)英特尔AES-NI引擎(动态)动态引擎加载支持
测试:AES-NI CPU与不支持AES-NI/Packlock的普通CPU
在此示例中,serverA具有AES-NI,而serverB不支持硬件加密:
$ dd if=/dev/zero count=1000 bs=1M | ssh -l Hyman -c aes128-cbc serverA "cat >/dev/null"
sh密码:1000 + 0条记录中的1000 + 0条记录输出1048576000字节(1.0 GB)已复制,10.6691 s,98.3 MB/s
$ dd if=/dev/zero count=1000 bs=1M | ssh -l Hyman -c aes128-cbc serverB "cat >/dev/null"
sh Hyman @ localhost的密码:1000 + 0条记录中的1000 + 0条记录已复制1048576000字节(1.0 GB),31.6675 s,33.1 MB/s
测试:如何对我的openssl性能进行基准测试?
在两个系统上再次运行以下命令:
$ openssl speed
或者
$ openssl speed aes-128-cbc
对于最新版本的openssl,请尝试以下两个命令(第二个命令应具有比第一个更大的数字(感谢EntropyZer0):
$ openssl speed aes-256-cbc $ openssl speed -evp aes-256-cbc