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

公開日:2019-04-03
最終更新:2019-07-16

背景

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
記事が少しでもいいなと思ったらクラップを送ってみよう!
0
+1
なにか思いついたことを不定期に更新。

よく一緒に読まれている記事

0件のコメント

ブログ開設 or ログイン してコメントを送ってみよう
目次をみる

技術ブログをはじめよう

Qrunch(クランチ)は、ITエンジニアリングに携わる全ての人のための技術ブログプラットフォームです。

技術ブログを開設する

Qrunchでアウトプットをはじめよう

Qrunch(クランチ)は、ITエンジニアリングに携わる全ての人のための技術ブログプラットフォームです。

Markdownで書ける

ログ機能でアウトプットを加速

デザインのカスタマイズが可能

技術ブログ開設

ここから先はアカウント(ブログ)開設が必要です

英数字4文字以上
.qrunch.io
英数字6文字以上
ログインする