Benchmark
GmSSL提供了命令行选项speed
进行性能测试,对国密算法的测试如下:
gmssl speed -nopre sm2
gmssl speed sm2
gmssl speed rsa2048 rsa3072 rsa4096
gmssl speed sm3
gmssl speed -evp sm3
gmssl speed sms4
gmssl speed -evp sms4-ecb
gmssl speed -evp sms4-cbc
gmssl speed -evp sms4-ofb
gmssl speed -evp sms4-cfb
gmssl speed -evp sms4-cfb8
gmssl speed -evp sms4-cfb1
gmssl speed -evp sms4-gcm
gmssl speed -evp sms4-xts
Test 1
MacBook Pro 13-inch 2018 macOS Mojave version 10.14.2 Processor 2.7 GHz Intel Core i7 Memory 8 GB 2133 MHz LPDDR3
$ gmssl speed sm2sign
Doing 256 bit sign sm2's for 10s: 452299 256 bit SM2 signs in 10.00s
Doing 256 bit verify sm2's for 10s: 164546 256 bit SM2 verify in 10.00s
GmSSL 2.4.3 - OpenSSL 1.1.0d 23 Jan 2019
built on: reproducible build, date unspecified
options:bn(64,64) rc4(16x,int) des(int) aes(partial) idea(int) blowfish(ptr)
compiler: cc -DDSO_DLFCN -DHAVE_DLFCN_H -DNDEBUG -DOPENSSL_THREADS -DOPENSSL_NO_STATIC_ENGINE -DOPENSSL_PIC -DOPENSSL_IA32_SSE2 -DOPENSSL_BN_ASM_MONT -DOPENSSL_BN_ASM_MONT5 -DOPENSSL_BN_ASM_GF2m -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DRC4_ASM -DMD5_ASM -DAES_ASM -DVPAES_ASM -DBSAES_ASM -DGHASH_ASM -DECP_NISTZ256_ASM -DPADLOCK_ASM -DGMI_ASM -DPOLY1305_ASM -DOPENSSLDIR="\"/usr/local/ssl\"" -DENGINESDIR="\"/usr/local/lib/engines-1.1\""
sign verify sign/s verify/s
256 bit sm2 (sm2p256v1) 0.0000s 0.0001s 45229.9 16454.6
Test 2
MIX2S
GmSSL 2.4.4 - OpenSSL 1.1.0d 26 Jan 2019
built on: reproducible build, date unspecified
options:bn(64,64) rc4(char) des(int) aes(partial) idea(int) blowfish(ptr)
compiler: /Applications/android-ndk-r19/toolchain/bin/aarch64-linux-android-clang -DDSO_DLFCN -DHAVE_DLFCN_H -DNDEBUG -DOPENSSL_THREADS -DOPENSSL_NO_DYNAMIC_ENGINE -DOPENSSL_PIC -DOPENSSL_BN_ASM_MONT -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DVPAES_ASM -DECP_NISTZ256_ASM -DPOLY1305_ASM -DGMSSL_NO_TURBO -DOPENSSLDIR="\"/usr/local/ssl\"" -DENGINESDIR="\"/usr/local/lib/engines-1.1\""
The 'numbers' are in 1000s of bytes per second processed.
type 16 bytes 64 bytes 256 bytes 1024 bytes 8192 bytes 16384 bytes
sm3 29747.36k 60699.27k 97857.50k 115720.56k 121403.25k 121918.81k
sms4 cbc 70661.32k 71751.53k 72084.46k 72140.97k 72073.16k 72199.19k
zuc 264215.86k 278525.20k 280438.24k 282845.58k 283530.87k 283498.00k
sign verify sign/s verify/s
256 bit sm2 (sm2p256v1) 0.0001s 0.0006s 8262.4 1736.9
encrypt decrypt enc/s dec/s
256 bit sm2 (sm2p256v1) 0.0007s 0.0005s 1537.1 1910.9
对测试结果的说明:
- 这个性能是在单核上做的,通常单核心运行计算量比较大的任务时,该核心会采用睿频技术,即主频提高到大概3.5GHz。而在多个核心都有任务时,处理器是不做睿频的,特别是服务器处理器单核心的主频是低于桌面处理器的。因此在做性能估计时要考虑这些影响。
- RSA的验证签名速度远远高于签名速度,这是由算法决定的。
- SM2的验签时间通常是1.5~2倍的签名时间,这是由算法决定的。测试中的签名速度比这个快,是因为签名前做了预计算的优化。如果未做优化,那么可能签名速度只有3000次每秒左右。
- SM3在处理数据长度不同时性能差异很大,在只处理比较短的数据时,性能只有30MBps,这也是有哈希算法的性质决定的。
- SMS4的测试的密钥(密钥编排)是预生成的,因此测试的性能和数据长度没有明显的关系,但是如果用不同的密钥加密短数据,会出现和SM3相同的效果。