使用CPU硬件指令对AES加解密进行加速

您所在的位置:网站首页 bios指令集 使用CPU硬件指令对AES加解密进行加速

使用CPU硬件指令对AES加解密进行加速

#使用CPU硬件指令对AES加解密进行加速| 来源: 网络整理| 查看: 265

概述

AES是世界上最安全、使用广泛的加密算法,很多安全合规要求里面都明确要求使用AES算法,只是相对于3des、rc4等加密算法,速度慢了很多,幸好有了AES-NI,这是针对AES加密算法的硬件加解密CPU指令集。

AES-NI的全称是:Advanced Encryption Standard New Instructions。指令集说明

更多详细的信息可以参考Intel发布的企业安全AES-NI白皮书,本文重点在目前阿里公有云上的主流机型上进行性能测试对比,用于RDS的SSL(链路加密)和TDE(透明加密)特性中。

支持AES-NI指令集的Intel CPU列表,基本上2010年之后的Intel CPU都支持,另外AMD和ARM的一些型号也支持。

支持AES-NI的安全和加密软件库

绝大多数现代编译器都支持AES-NI指令。常见的支持AES-NI的安全加密软件库:

Cryptography API: Next Generation (CNG) (requires Windows)[27] Linux's Crypto API Java 7 HotSpot Network Security Services (NSS) version 3.13 and above28 Solaris Cryptographic Framework[29] on Solaris 10 onwards FreeBSD's OpenCrypto API (aesni(4) driver)[30] OpenSSL 1.0.1 and above[31] FLAM®/FLUC® 5.1.08 (released 2015-08-24) and above 查看CPU信息

测试的目标机器是D13机型,具体CPU配置如下:

#lscpu Architecture: x86_64 CPU op-mode(s): 32-bit, 64-bit Byte Order: Little Endian CPU(s): 24 On-line CPU(s) list: 0-23 Thread(s) per core: 2 Core(s) per socket: 6 CPU socket(s): 2 NUMA node(s): 1 Vendor ID: GenuineIntel CPU family: 6 Model: 45 Stepping: 7 CPU MHz: 2194.853 BogoMIPS: 4388.87 Virtualization: VT-x L1d cache: 32K L1i cache: 32K L2 cache: 256K L3 cache: 15360K NUMA node0 CPU(s): 0-23 检查系统是否支持AES-NI指令

D13机型24个核都开启了AES-NI

#grep -m1 -o aes /proc/cpuinfo aes #grep -o aes /proc/cpuinfo|wc -l 24 openssl是否支持AES-NI指令

openssl从1.0.0版本之后开始支持aesni engine,但是在1.0.0版本中必须在代码中显式指定engine,如下:

EVP_CIPHER_CTX ctx; EVP_CIPHER_CTX_init(&ctx); ENGINE_load_builtin_engines(); ENGINE* engine=ENGINE_by_id("aesni"); if(engine==NULL){ printf("aesni not found\n"); } EVP_EncryptInit_ex(&ctx,EVP_aes_128_cbc(),engine,test_key_128,test_init_vector); int out; EVP_CipherUpdate(&ctx,output,&out, test_plain_text, inputlen);

openssl 1.0.1版本后,将这个engine去掉了,变成运行时期自动检测是否支持AES-NI,如下:

extern unsigned int OPENSSL_ia32cap_P[2]; #define AESNI_CAPABLE (OPENSSL_ia32cap_P[1]&(1


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3