如何检测处理器是否支持AES-NI指令集

3,279 阅读3分钟

AES-NI指令集

        AES (Advanced Encryption Standard)是美国政府从2001年开始采用的加密标准。AES是一种对称的块密码,通过几轮对数据进行加密/解密。

        AES-NI(Advanced Encryption Standard - New Instructions )即高级加密标准新指令:是一个x86指令集架构的扩展,用于Intel和AMD微处理器。目的是改进应用程序使用高级加密标准(AES)执行加密和解密的速度。AES-NI可用于将AES实现的性能比完全的软件实现提高3到10倍。

备注:AES算法工作原理是分组加密固定块大小128位纯文本,以产生最终加密的密文。分组(10、12或14)取决于密钥长度(128b、192b或256b)。每一组都根据输入状态执行一系列步骤,然后进入下一组。每一组都使用一个子密钥进行加密,该子密钥是使用密钥计划生成的。

        AES-NI指令集由6条新指令组成,它们执行AES算法的若干计算密集型部分。与软件解决方案相比,这些指令可以使用更少的时钟周期执行。其中四条新指令用于加速加密/解密,两条新指令用于密钥生成。以下是对新指令的描述:

  • AESENC 单轮加密指令,该指令将AES算法的四个步骤-ShiftRows,SubBytes,MixColumns和AddroundKey组合成一条指令
  • AESENCLAST 最后一轮加密指令,将ShiftRows,SubBytes和AddRoundKey步骤组合成一条指令
  • AESDEC 单轮解密指令,该指令将AES算法四个步骤-InvShiftRows,InvSubBytes,InvMixColumns,AddRoundKey组合成一条指令
  • AESDECLAST 最后一轮解密指令,将InvShiftRows,InvSubBytes,AddRoundKey步骤组合成一条指令
  • AESKEYGENASSIST 用于生成加密密钥
  • AESIMC 用于将加密密钥转换为可用来使用等效逆密码进行解密的形式

检测处理器是否支持AES-NI指令集

Linux

使用命令【grep aes /proc/cpuinfo】即可查看,当此命令能返回内容,说明此服务器的处理器是支持AES-NI的。

root@36075e7e4fec:/# grep aes /proc/cpuinfo
flags		: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss ht pbe syscall nx pdpe1gb lm constant_tsc rep_good nopl xtopology nonstop_tsc cpuid pni pclmulqdq dtes64 ds_cpl ssse3 sdbg fma cx16 xtpr pcid sse4_1 sse4_2 movbe popcnt aes xsave avx f16c rdrand hypervisor lahf_lm abm 3dnowprefetch fsgsbase bmi1 avx2 bmi2 erms xsaveopt arat
flags		: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss ht pbe syscall nx pdpe1gb lm constant_tsc rep_good nopl xtopology nonstop_tsc cpuid pni pclmulqdq dtes64 ds_cpl ssse3 sdbg fma cx16 xtpr pcid sse4_1 sse4_2 movbe popcnt aes xsave avx f16c rdrand hypervisor lahf_lm abm 3dnowprefetch fsgsbase bmi1 avx2 bmi2 erms xsaveopt arat

Mac

使用命令【sysctl -n machdep.cpu | grep -i aes】即可查看,当此命令能返回内容,说明此服务器的处理器是支持AES-NI的。

james@JamesYins-MBP workspace % sysctl -n machdep.cpu | grep -i aes
FPU VME DE PSE TSC MSR PAE MCE CX8 APIC SEP MTRR PGE MCA CMOV PAT PSE36 CLFSH DS ACPI MMX FXSR SSE SSE2 SS HTT TM PBE SSE3 PCLMULQDQ DTES64 MON DSCPL VMX EST TM2 SSSE3 FMA CX16 TPR PDCM SSE4.1 SSE4.2 x2APIC MOVBE POPCNT AES PCID XSAVE OSXSAVE SEGLIM64 TSCTMR AVX1.0 RDRAND F16C

image.png

Windows

Windows服务器没有命令可以直观的查看当前处理器支持的指令集,需要借助第三方工具,我这里使用的是 CPU-Z,

CPU-Z下载地址: www.cpuid.com/softwares/c…

image.png

附录-参考文章

Jeffrey Keith Rott 撰写:Intel Advanced Encryption Standard Instructions(AES-NI)
Intel Advanced Encryption Standard (AES) 指令集
Breakthrough AES Performance with Intel® AES New Instructions White Paper