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倍