TLSの性能に関して一番気になるのはハンドシェイク処理時間ではないだろうか。処理時間的に見るとハンドシェイク処理でほとんどの時間は鍵交換、デジタル署名や検証など公開鍵暗号の処理に費やされている。この公開鍵暗号はご存じの通り大きな整数値のベキ乗や剰余の演算処理だ。
wolfSSLではこの大きな整数値の演算のために特別なライブラリを提供しており、時代とともに改良を加えている。初期に、どのようなアーキテクチャのMPUでもポータブルかつ高速に動作するように特別に開発された標準整数ライブラリ(integer.c)は今でもwolfSSLのデフォルト整数ライブラリだ。これに対して、Tom’s Fast Math をベースにIntelアーキテクチャやARMアーキテクチャで特に高速に動作するように改良を加えたFast Math (tfm.c)。これまで、これら二つをターゲット環境に応じてビルドオプションで使い分けてきた。
最近加えられたもう一つのオプションは、公開鍵処理に特化したSingle Precisionオプションだ。公開鍵の整数演算で特定の鍵長であればループ処理を使わなくても直線的な処理に落とし込むことができることを利用し、高速化と処理時間の一定化を実現したものだ。そういうわけでSingle Precisionと言っても、フローティングポイントの単精度とは関係ない、あえて日本語訳するとすれば、単一精度ないし特定精度というようなことになるだろう。
このSingle Precisionオプションは、configureコマンドならば
$ ./configure –enable-sp
というような形で簡単に定義することができる。Single Precision処理は原理的にアルゴリズムや鍵長ごとに対応しなければならない。現在のところwolfSSLではRSA/DH 2048/3072, ECDSA/ECDH256 の署名、鍵交換に対応している。
./wolfcrypt/benchmark/benchmark
でベンチマークを比較することができるので、ぜひご自分の実機で比較して見てください。
特にIoTでは、アプリケーションメッセージの送受信よりハンドシェイク処理時間の方が目立つことが多い。そいう場合のチューニングにおすすめできるオプションだ。また、この処理は処理時間が一定化され、サイドチャネル攻撃に対して耐性が向上するというセキュリティ上の利点からもおすすめです。
wolfSSL Japan技術サポートチーム