search
LoginSignup
3

posted at

updated at

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

2020年1月29日 nVIDIA Jetson nano追加
2021年12月25日 Core i5-4690T 2.5GHz(ターボブースト時 3.5GHz)

背景

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

注) 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
What you can do with signing up
3