如何找出在Linux系统上启用的AES-NI(高级加密)

时间:2020-01-09 14:17:10  来源:igfitidea点击:

英特尔高级加密标准(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