前回のブログでは、wolfCryptにおけるSP Math All実装の機能比較をご紹介しました。今回は新たなSP Math All実装と従来のInteger実装のパフォーマンス比較を行ってみます。
SP Math AllライブラリはWOLFSSL_SP_SMALLマクロあるいは”–enable-sp-math-all=small”コンフィギュアオプション指定でビルドすることにより生成できます。サイズは小さくてやや低パフォーマンスを示しますが、組み込み機器用には適したライブラリとなります。一方、”–disable-fastmath”オプションを指定して生成するInteger実装は高速でコードサイズも小さいライブラリになります。
では、SP Math All実装が従来のInteger実装に比べてどのくらい速いか見てみましょう。(注:SP Math All実装は”–enable-sp-math-all=small –disable-asm C_EXTRA_FLAGS=-DWC_NO_HARDEN”で、Integer実装は”–disable-fastmath”のコンフィギュアオプション指定でビルドしています)
CPUアーキテクチャ | x64 | Aarch64 |
---|---|---|
RSA 2048 署名 | 81.43% | 50.46% |
RSA 2048 署名検証 | 993.81% | 522.14% |
DH 2048 鍵生成 | 48.55% | 1.82% |
DH 2048 鍵合意 | 65.16% | 12.71% |
ECC P-256 鍵生成 | 45.22% | 112.74% |
ECC P-256 鍵合意 | 43.74% | 111.60% |
ECC P-256 署名 | 55.01% | 118.90% |
ECC P-256 署名検証 | 62.54% | 127.31% |
楕円曲線アルゴリズムでは常にCPUアーキテクチャによらず(x64でおおよそ50%、Aarch64でおおよそ100%の速度向上)高速です。RSAとDHではバラつきがみられますが、RSA署名では顕著に高速です。これは最適化されたべき乗演算の実装によってもたらされました。
コードサイズは速度に比べてそれ以上ではないですが同じくらい重要な比較要素です。ではARM Cortex M4を例にとって比較してみましょう。
ARM Cortex-M4 アーキテクチャでのコードサイズ(バイト数) | Integer (#1) | SP Math All (#2) | コードサイズ減少比率 (#2-#1)/#1 * 100 |
---|---|---|---|
+RSA +DH +ECC | 23625 | 18672 | -20.97% |
+RSA +DH -ECC | 22492 | 16836 | -25.15% |
-RSA -DH +ECC | 21149 | 18232 | -13.79% |
すべてのビルドで最大25%のコードサイズ削減となっており、それに高速です!同様の傾向が他のCPUでも見られました。次回はsp_int.cとtfm.cのパフォーマンス比較を紹介します。
シリーズ第一回:wolfSSLの新たな Multi-Precision 演算ライブラリ
ご質問は、info@wolfssl.jpまでお問い合わせください。テクニカルサポートについては、support@wolfssl.comにお問い合わせください。
原文:https://www.wolfssl.com/wolfssl-sp-math-integer-implementations/