天天看點

使用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倍

繼續閱讀