wolfSSLの処理時間が気になりますか?
wolfSSLサイトのベンチマークページには、さまざまな異なる条件でのベンチマーク結果を掲載しています。しかし、TLSは使われる暗号化スイートや個別のアルゴリズム、ネットワークの諸条件によって処理時間が大きく異なってきます。wolfSSLの使用される実際の対象ハードウェア、ネットワークや開発環境は多様であるため、一般的な処理性能を提示することはなかなか難しいことです。そのために、wolfSSLではお客さまの実際の環境でベンチマークテストができるように製品と同梱でベンチマークプログラムを提供しています。
ここでは、製品に含まれている二つのベンチマーク機能とその使い方について紹介します。
一つ目は、暗号アルゴリズムレイヤーでのベンチマークプログラムです。このプログラムではTLSで使われる個々の暗号アルゴリズムについて、実機での処理性能を評価することができます。このベンチマークプログラムは、もちろん各アルゴリズムが目標通りの性能を発揮しているかどうか確認するために利用できますが、そのほかにも以下のような色々な目的で使用することができます。
- コンパイラーの最適化レベルが暗号処理の性能にどのくらい影響するか知りたい
- wolfSSLの持っている整数演算ライブラリーのうちどれが目的のシステムに一番有効か知りたい
- ハードウェア暗号アクセラレータとソフトウェア暗号化の性能を比較したい
- 暗号スイートを選択するときのアルゴリズム個別の基本的な性能データが知りたい
もう一つは、TLSプロトコル層とそれ以下のネットワーク層を含めた通信全体の性能をベンチマークするための機能です。このベンチマークはTLSサーバとクライアントのサンプルプログラムの中のオプション機能を使って評価します。
1. /wolfcrypt/benchmark/benchmark
暗号アルゴリズム毎のベンチマークを測定するプログラムです。暗号アルゴリズム単位の性能を知るのに有効で、性能評価の最初のステップのツールとしてお勧めです。
ブロック暗号及びストリーム暗号は、ブロック単位で測定時間以上、暗号化・復号化を繰り返し行いその回数から性能を計算します。公開鍵暗号は測定時間以上、鍵生成・合意・認証・証明操作を何回行えたかで性能を計算します。出力結果と各部位の意味するところを出力例で次の図に示します。
2./examples/client and server
benchmark プログラムは暗号アルゴリズム単独でのパフォーマンス測定するのに対して、次のステップでは、より実環境に近い状態で速度性能を測定したいとの要求もあります。
TLSの処理性能には接続時のハンドシェイク処理とアプリケーションメッセージ転送の二つのファクターがあります。接続時のハンドシェイク処理は、アプリケーションメッセージの長さに依存せず一定の時間がかかります。それに対して、メッセージ転送時間は概ね転送するメッセージのサイズに比例した時間がかかります。
そのような計測には、/examples/client/client及び/examples/server/server の両プログラムを使用することが出来ます。それぞれについて、次のようなオプションを使用します。
- 接続時間の計測:client の -b <num>オプション、serverの -C <num> オプション, -iオプション
- メッセージ転送時間の計測:server / client の -B <data size>オプション
client -b <num> は、TLSハンドシェークをnum回数実施しその平均値を出力します。下記は、10 回 TLS 1.3 ハンドシェークを実施したその平均値を出力する例です。
クライアント側: $ ./examples/client/client -v 4 -h 192.168.11.18 -d -b 10 wolfSSL_connect avg took: 970.207 milliseconds サーバ側: $ ./examples/server/server -v 4 -C 10 または $ ./examples/server/server -v 4 -i
外部のサーバーに対しても行うことが出来ます。下記の例では、www.googld.com のポート443に対して10回TLS接続を行いその平均値を出力します。
$ ./examples/client/client -h www.google.com -p 443 -d -b 10 wolfSSL_connect avg took: 108.224 milliseconds
メッセージ送受信部分の速度性能を知りたい場合には server/client -B オプションを次のように使います。
- 転送メッセージ・サイズを設定します。例:1M Byte(≒1048576 byte)
- 注目する開発環境でビルドした ./examples/server/server を起動します。
$ ./examples/server/server -b -d -i -B 1048576
他の引数は次のような意味を持ちます
-b : ローカルホスト以外のインターフェースへもバインドする
-d : クライアント認証を無効とする
-i : 無期限にループする(繰り返し接続を許可) - 計測したいネットワーク環境で接続された別ターミナルで./examples/client/client を起動します。
$ ./examples/client/client -h 192.168.11.24 -B 1048576
- 出力を確認します。
client サイドの出力例は次のようになります。
更に暗号スイートをいくつか変更し、そのスイート毎の性能を比較したいという場合、client プログラムの “-e” 及び “-l” を使用します。次の例のように行います。
- client プログラムの “-e” でサポートする暗号スイートを調べます。
$ ./examples/client/client -e DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA- AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM- SHA384:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES256- SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-CHACHA20-POLY1305:DHE-RSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20- POLY1305-OLD:ECDHE-ECDSA-CHACHA20-POLY1305-OLD:DHE-RSA-CHACHA20-POLY1305-OLD:TLS13-AES128-GCM-SHA256:TLS13-AES256-GCM-SHA384:TLS13- CHACHA20-POLY1305-SHA256
- client プログラムの “-l” オプションで、使用したい暗号スイートを選択します。
$ ./examples/client/client -h 192.168.11.25 -l ECDHE-ECDSA-AES128-GCM-SHA256 -d
“-l”オプションで指定する暗号スイートは、”-e”オプションで得た文字列をそのまま入力として使用します。前述の “-d” 及び “-B” オプションと組み合わせてご使用下さい。