2020年1月29日 nVIDIA Jetson nano追加
2021年12月25日 Core i5-4690T 2.5GHz(ターボブースト時 3.5GHz)
2023年11月11日 Ryzen5 5600G 3.9GHz(ブースト時 4.4GHz)
#背景
RSA 2048bitや4096bitの性能はopensslのspeedコマンドによって測定ができるが、今のところ8192bit以上の性能は測定できない。opensslのライブラリはRSA 8192bitや16384bitは計算可能だ。そこでopensslのライブラリを使ってRSAの性能を測定するプログラムを作った。このソースコードは自由にご利用いただいて結構です。
#RSAの性能を測定するコード
opensslのspeedコマンドと同じ、10秒間に何回署名できるかを測定します。RSA 2048bitや4096bitではopensslのspeedコマンドと、ほとんど同じ性能になります。遅いマシンでは鍵生成のところで10分以上かかるので注意してください。
#include <stdio.h>
#include <string.h>
#include <openssl/rsa.h>
#include <openssl/bn.h>
#include <openssl/objects.h>
#include <unistd.h>
#include <pthread.h>
int g_count;
void* timer_thread(void* p) {
sleep(10);
printf("%d.%d [sign/s]\n",g_count/10,g_count%10);
exit(0);
}
int main(int argc,char *argv[]) {
int i,rsabit;
if(argc==1) {
printf("Usage: osslspd <rsa bit>\n");
exit(-1);
}
rsabit = atoi(argv[1]);
if(rsabit<=0) {
printf("rsa bit error\n");
exit(-1);
}
printf("RSA %d\n",rsabit);
RSA *rsa = RSA_new();
BIGNUM *e = BN_new();
BN_set_word(e,65537);
printf("generate key\n");
if(RSA_generate_key_ex(rsa, rsabit, e, NULL)==0) {
printf("RSA_generate_key_ex() fail\n");
exit(-1);
}
unsigned char msg[20] = "test";
unsigned char sigret[4096];
unsigned int siglen = 4096;
for(i=0 ; i<4096 ; i++) sigret[i] = 0;
pthread_attr_t attr;
pthread_attr_init(&attr);
pthread_t timer_threads;
printf("rsa start!\n");
pthread_create(&timer_threads, &attr, timer_thread, NULL);
g_count = 0;
while(1) {
memcpy(msg,sigret,20);
if(RSA_sign(NID_sha1,msg, 20,sigret,&siglen,rsa)!=1) {
printf("RSA_sign() fail\n");
exit(-1);
}
__sync_synchronize();
g_count++;
}
RSA_free(rsa);
BN_free(e);
return 0;
}
osslspd : osslspd.c
gcc -o osslspd osslspd.c -lcrypto -lpthread
測定結果
RSAの署名性能(上記、ソースコードで測定)
RSA 2048 [sign/s] |
RSA 4096 [sign/s] |
RSA 8192 [sign/s] |
RSA 16384 [sign/s] |
|
---|---|---|---|---|
Core2 Duo E7500 2.93GHz openssl 1.0.2k |
447.7 | 61.1 | 8.1 | 1.0 |
Core i3 4130 3.4GHz openssl 1.1.1b |
1660.0 | 153.4 | 20.1 | 2.5 |
Core i5 4690T 2.5GHz/3.5GHz openssl 1.0.2k |
1646.6 | 153.1 | 20.4 | 2.5 |
Ryzen 5 2600 3.9GHz openssl 1.0.1u |
1020.9 | 132.2 | 18.2 | 2.3 |
nVIDIA Jetson nano openssl 1.1.1 |
160.4 | 23.1 | 3.1 | 0.4 |
Raspberry Pi Zero openssl 1.1.1d |
16.4 | 2.3 | 0.25 | - |
注1) Ryzen 5 のopensslのバージョンが少し古いこと、Ryzenに最適化できていない可能性
注2) Jetson nanoはGPU無しのCPU(Cortex-A57 1.43GHz)のみの性能
注3) Rapberry Pi Zero ( ARM1176JZF-S 1.0 GHz動作時 )
RSAの署名性能(openssl speedコマンド)
RSA 2048 [sign/s] |
RSA 4096 [sign/s] |
|
---|---|---|
Core i3 4130 3.4GHz openssl 1.0.2k 4プロセス |
3388.0 | 308.0 |
Core i5 4690T 2.5GHz/3.5GHz openssl 1.0.2k 4プロセス |
6008.3 | 557.3 |
Core i7 920 2.93GHz openssl 1.0.2k 8プロセス |
2066.0 | 282.0 |
Ryzen 5 2600 3.9GHz openssl 1.0.1u 1プロセス |
1388.0 | 195.0 |
Ryzen 5 2600 3.9GHz openssl 1.0.1u 12プロセス |
8527.0 | 1178.0 |
Ryzen 5 5600G 4.4GHz openssl 3.0.7 1プロセス |
2102.0 | 303.0 |
Ryzen 5 5600G 4.4GHz openssl 3.0.7 12プロセス |
13947.0 | 1943.0 |
注) Core i7 920はSSE4.2まででAVX-2がないため遅い?