とある発表スライドを見ていたら、OpenSSLとOpenSSL+GMPの処理速度の差が2.5倍ぐらいに開いていて、さすがにそりゃないべ。OpenSSLの計算ライブラリよりGMPの方が性能が良いのはその通りだが、そんな2倍以上に開くほど極端ではないはず。せいぜい40-50%がいい所だろうと思う。で、やってみた。
条件は以下の通り。
- AMD Phenom(tm) 9350e Quad-Core Processor
- Linux mad 3.2.0-48-generic #74-Ubuntu SMP Thu Jun 6 19:43:26 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux
- gcc (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3
- openssl-1.0.1e
- gmp-5.1.2
コンパイルオプションとかはよしなに。で、opensslでrsaの処理速度をデフォルトとgmpエンジンの2つで計測してみた。サイン/秒の違いは次の通り。
RSA key lengthは公開鍵のビット数。openssl及びopenssl + gmpの値は署名/秒である。RSA方式の公開鍵/検証鍵と秘匿鍵/署名鍵の処理負荷は非対象という特徴がある。ここでは処理の重い方をリストアップする。opensslはシングルスレッドで動作するので、CPUの数は基本的には処理速度比較に関係ない。
RSA方式で2048ビット長の鍵を使うと次の差が出る。opensslとopenssl+gmpでは1.35倍程度の効率アップとなる。
ちなみに512、1024、2048、4096の違いは次の通り。尚、2013年現在ではRSAの鍵長は2048ビット長以上でないと安全性が確保できない。今日では512ビット長はアマチュアでも解読出来るレベルで、1024ビット長はもうそろそろアカデミックの研究者レベルでも解読できるようになるだろう。まあNSAでは既に専用解読マシンを用意して日常的に処理していると思うが。あとこれをみてわかる通り、4096ビット長だと処理時間がかかり過ぎて使い物にならない。
結論: たしかにOpenSSL + GMPはOpenSSLのみより速いけど、速いっていってもせいぜい50%向上すればいい方で、そんな2倍以上とか極端に速くならないよ。
もしかしてこの研究をした人はOpenSSLのライブラリをコンパイルする時、意図的にアセンブラコードを使わないオプションにしてC実装のみのOpenSSLライブラリを作ったのかなぁと、思ってno-asmでコンパイルしてopenssl + gmpと比較すると5.4倍違った。だからC実装と比較したものでもないらしい。