天天看点

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

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

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

cryptography api: next generation (cng) (requires windows)[27]

linux's crypto api

java 7 hotspot

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

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

d13机型24个核都开启了aes-ni

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

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

开启aes-ni指令加速情况下测试aes-256-cbc

关闭aes-ni指令加速的情况下测试aes-256-cbc的性能

测试值的含义是单个cpu每秒处理的数据量。

aes-ni enabled

type

16 bytes

64 bytes

256 bytes

1024 bytes

8192 bytes

on

aes-256-cbc

282.49mb

296.7mb

300.08mb

301.0mb

301.21mb

off

136.59mb

153.13mb

156.37mb

158.5mb

159.37mb

aes-128-cbc

385.65mb

411.25mb

418.37mb

420.14mb

420.62mb

180.44mb

209.81mb

217.87mb

220.55mb

222.4mb

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



结论:

密钥长度越长,处理速度越慢

aes-ni开启后的处理性能提升2~3倍

继续阅读