OpenSSL AES 速度与 EVP 不同且没有 AES-NI

OpenSSL AES 速度与 EVP 不同且没有 AES-NI

我的计算机没有 AES-NI,但运行时发现openssl speed有和没有AES-NI 时-evp速度有差异。这是为什么?

openssl speed aes-128-cbc
Doing aes-128 cbc for 3s on 16 size blocks: 18132001 aes-128 cbc's in 3.00s
Doing aes-128 cbc for 3s on 64 size blocks: 4890318 aes-128 cbc's in 3.00s
Doing aes-128 cbc for 3s on 256 size blocks: 1246069 aes-128 cbc's in 3.00s
Doing aes-128 cbc for 3s on 1024 size blocks: 311859 aes-128 cbc's in 3.00s
Doing aes-128 cbc for 3s on 8192 size blocks: 38970 aes-128 cbc's in 3.00s
OpenSSL 1.0.1f 6 Jan 2014
built on: Thu Jun 11 15:30:15 UTC 2015
options:bn(64,64) rc4(16x,int) des(idx,cisc,16,int) aes(partial) blowfish(idx) 
compiler: cc -fPIC -DOPENSSL_PIC -DOPENSSL_THREADS -D_REENTRANT -DDSO_DLFCN -DHAVE_DLFCN_H -m64 -DL_ENDIAN -DTERMIO -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -D_FORTIFY_SOURCE=2 -Wl,-Bsymbolic-functions -Wl,-z,relro -Wa,--noexecstack -Wall -DMD32_REG_T=int -DOPENSSL_IA32_SSE2 -DOPENSSL_BN_ASM_MONT -DOPENSSL_BN_ASM_MONT5 -DOPENSSL_BN_ASM_GF2m -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DMD5_ASM -DAES_ASM -DVPAES_ASM -DBSAES_ASM -DWHIRLPOOL_ASM -DGHASH_ASM
The 'numbers' are in 1000s of bytes per second processed.
type             16 bytes     64 bytes    256 bytes   1024 bytes   8192 bytes
aes-128 cbc      96704.01k   104326.78k   106331.22k   106447.87k   106414.08k

openssl speed -evp aes-128-cbc
Doing aes-128-cbc for 3s on 16 size blocks: 90633962 aes-128-cbc's in 2.99s
Doing aes-128-cbc for 3s on 64 size blocks: 24880226 aes-128-cbc's in 3.00s
Doing aes-128-cbc for 3s on 256 size blocks: 7574778 aes-128-cbc's in 3.00s
Doing aes-128-cbc for 3s on 1024 size blocks: 1962765 aes-128-cbc's in 3.00s
Doing aes-128-cbc for 3s on 8192 size blocks: 247920 aes-128-cbc's in 2.99s
OpenSSL 1.0.1f 6 Jan 2014
built on: Thu Jun 11 15:28:12 UTC 2015
options:bn(64,64) rc4(8x,int) des(idx,cisc,16,int) aes(partial) blowfish(idx) 
compiler: cc -fPIC -DOPENSSL_PIC -DOPENSSL_THREADS -D_REENTRANT -DDSO_DLFCN -DHAVE_DLFCN_H -m64 -DL_ENDIAN -DTERMIO -g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security -D_FORTIFY_SOURCE=2 -Wl,-Bsymbolic-functions -Wl,-z,relro -Wa,--noexecstack -Wall -DMD32_REG_T=int -DOPENSSL_IA32_SSE2 -DOPENSSL_BN_ASM_MONT -DOPENSSL_BN_ASM_MONT5 -DOPENSSL_BN_ASM_GF2m -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DMD5_ASM -DAES_ASM -DVPAES_ASM -DBSAES_ASM -DWHIRLPOOL_ASM -DGHASH_ASM
The 'numbers' are in 1000s of bytes per second processed.
type             16 bytes     64 bytes    256 bytes   1024 bytes   8192 bytes
aes-128-cbc     484997.79k   530778.15k   646381.06k   669957.12k   679251.05k

答案1

evp 实际上并不只控制 AES_NI,而是控制一大堆 CPU 内部函数和优化,因为它使用了完全不同的 AES 算法实现,试图尽可能地利用硬件和编译器。这个答案来自 security.stackexchange 的解释比我好得多。

相关内容