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

对测试结果的说明:

  1. 这个性能是在单核上做的,通常单核心运行计算量比较大的任务时,该核心会采用睿频技术,即主频提高到大概3.5GHz。而在多个核心都有任务时,处理器是不做睿频的,特别是服务器处理器单核心的主频是低于桌面处理器的。因此在做性能估计时要考虑这些影响。
  2. RSA的验证签名速度远远高于签名速度,这是由算法决定的。
  3. SM2的验签时间通常是1.5~2倍的签名时间,这是由算法决定的。测试中的签名速度比这个快,是因为签名前做了预计算的优化。如果未做优化,那么可能签名速度只有3000次每秒左右。
  4. SM3在处理数据长度不同时性能差异很大,在只处理比较短的数据时,性能只有30MBps,这也是有哈希算法的性质决定的。
  5. SMS4的测试的密钥(密钥编排)是预生成的,因此测试的性能和数据长度没有明显的关系,但是如果用不同的密钥加密短数据,会出现和SM3相同的效果。