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

结论:
密钥长度越长,处理速度越慢
aes-ni开启后的处理性能提升2~3倍