LoginSignup
3

RSA 8192bitの性能を測定するソースコード

Last updated at Posted at 2018-09-01

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分以上かかるので注意してください。

osslspd.c
#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;	
}
Makefile
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がないため遅い?

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3