なにか思いついたことを不定期に更新。

背景

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.0g
1605.1 153.1 20.2 2.5
Core i3
4130 3.4GHz
openssl 1.1.1b
1660.0 153.4 20.1 2.5

この記事へのコメント

まだコメントはありません