- v1.0.0 で耐量子計算機暗号の測定結果のグラフ描画を可能にしました。
本プログラム/スクリプトは、OpenSSL及びその互換プログラム/ライブラリ(LibreSSLなど)の使用者/開発者が、そこで利用可能な暗号アルゴリズムの処理速度を手元の環境で測定し結果を比較表示したり、Web上で公開されている処理速度やサイズ情報などと比較する作業を容易にするためのものです。 暗号アルゴリズムを128/192/256ビットセキュリティへ移行する際や耐量子計算機暗号へ移行する際の判断材料を得ることができます。
-
必要なコマンドのインストール
-
Debian/Ubuntu の場合:
sudo apt install gnuplot git openssl make gcc gcc-mingw-w64-x86-64 cmake ninja autoconf
openssl
は実行PATH上の openssl を使う場合に必要make gcc
は openssl をソースファイルから make する場合に必要gcc-mingw-w64-x86-64
は MinGW で openssl.exe を作る場合に必要cmake
とninja
はoqsprovider
、liboqs
などをビルドする場合に必要autoconf
はLibreSSL
git repo のconfigure.ac
からconfigure
を作成する場合に必要
-
macOS の場合:
-
Command Line Tools のインストール
ターミナル上で Command Line Tools が提供しているコマンド(例えば以下など)を打ち込み、指示に従う。
gcc
-
Homebrewをインストールし、以下を実行
brew install gnuplot coreutils mingw-w64 cmake ninja autoconf
coreutils
はrealpath
コマンドをインストールするために必要mingw-w64
は MinGW で openssl.exe を作る場合に必要cmake
とninja
はoqsprovider
、liboqs
などをビルドする場合に必要autoconf
はLibreSSL
git repo のconfigure.ac
からconfigure
を作成する場合に必要
-
Zsh で問題が生じた場合には Bash に変更
chsh -s /bin/bash
-
-
-
スクリプトのダウンロードとフォルダへの移動
git clone https://github.com/KazKobara/plot_openssl_speed.git cd plot_openssl_speed
-
ヘルプと使い方の表示
./plot_openssl_speed_all.sh -h ./plot_openssl_speed.sh -h
上記スクリプトのフローチャート
-
Web上で公開されている量子計算機暗号のパフォーマンス等のデータとの比較を行う場合
Node.jsをインストール後、以下を実行
cd ./data_from_web/ npm install --save puppeteer npx @puppeteer/browsers install chrome@stable cd ..
その後、以下のスクリプトを実行
./plot_openssl_speed_all.sh -s 1
- オプションの
-s 1
は、各暗号アルゴリズムの測定時間を1秒に短縮するためのものです。
- 全体の傾向をつかめ、バラツキの小さな計測を行う際には指定せずご実行下さい。
- 以下の図は指定せずに実行した結果になります。
- LibreSSL に対しては、(少なくとも 2.8.3 の時点においては)
openssl speed
コマンドが-seconds
オプションを有しておらずエラーとなるため指定しても無視されます。
上記コマンドを実行すると、以下のように表示メッセージの最後に、グラフ画像ファイルやその元になったデータファイルなどが格納されたフォルダ情報が表示されます。
Results are in:
./tmp/default_openssl_1.1.1f/graphs/
WSL (Windows Subsystem for Linux) を使用している場合、例えば
Ubuntu-20.04
の/home/
ディレクトリへは Windows OS のファイルエクスプローラから、以下のアドレスで移動できます。
\\wsl$\Ubuntu-20.04\home\
グラフ画像の一覧は、例えば、ファイルエクスプローラの場合、以下のように「表示」タブで「特大アイコン」を選択し、「グループ化」で「種類」を選択すると表示させることができます。
格納されたグラフ画像一覧の例(PATH上の openssl 1.1.1f):
格納されたグラフ画像一覧の例(PATH上の LibreSSL 2.8.3):
例えば、tag として openssl-3.0.7
のソースコードからその実行環境用にコンパイルした openssl
コマンドでの測定結果と、それを MinGW (x86_64-w64-mingw32-gcc) でクロスコンパイルした Windows OS 用 openssl.exe
での測定結果も図示する場合。
./plot_openssl_speed_all.sh -s 1 openssl-3.0.7 openssl-3.0.7-mingw
格納されたグラフ画像一覧の例(ソースからコンパイルした openssl-3.0.5):
plot_openssl_speed_all.sh
v1.0.0以降では、opensslコマンドが liboqs 及び oqs-provider に対応している場合に、そこで利用可能な耐量子計算機暗号の処理速度についても測定し描画します。また、[pq-sig-zoo]及び[ebats]で公開されている size や cycle 数との比較の描画も可能です。
openssl, oqs-provider, liboqsの tag がそれぞれ、openssl-3.3.1
, 0.6.1
, 0.10.1
の openssl コマンドをコンパイルし、その測定結果を描画する場合は、以下のように引数(openssl-type)を指定します。
./plot_openssl_speed_all.sh -s 1 openssl-3.3.1-oqsprovider0.6.1-liboqs0.10.1
master/main ブランチの場合は、以下のように引数(openssl-type)を指定します。
./plot_openssl_speed_all.sh -s 1 master-oqsprovidermain-liboqsmain
v1.0.0 時点では、引数(openssl-type)に liboqs 及び oqs-provider が含まれている場合、
-mingw
(MinGW でのクロスコンパイル)と組み合わせることはできません。
処理速度は様々な要因により変わるため、あくまでこちらの測定環境における参考です。また、処理速度が速いというだけで、脆弱な暗号アルゴリズムや、各用途で求められるセキュリティレベルを満たさないアルゴリズムを選択しないようにご注意下さい。
どのような用途においてどのようなアルゴリズムを用いるべきかなどにつきましては、もし必要でしたら勉強会などに呼んで頂ければ解説致します。
以下の図は、oqsprovider 0.6.1 経由で liboqs 0.11.0-rc1 と連携する OpenSSL 3.4.0-alpha1 において利用可能な耐量子計算機暗号の処理速度を表しています。
署名方式:
KEM (Key Encapsulation Mechanism, 鍵カプセル化):
公開鍵/署名検証鍵と署名文/暗号文のサイズの比較については、[pq-sig-zoo]、[ebats]から必要な方式のデータを抜き出し、他のデータと共に表示させることが可能です。
128(クラシカル)ビットセキュリティ相当方式の比較:
192(クラシカル)ビットセキュリティ相当方式の比較:
256(クラシカル)ビットセキュリティ相当方式の比較:
KEM 及び ECDH の比較で、ECDH の operation 1回分は、生成元とのスカラー倍算1回、ランダムな元とのスカラー倍算1回などの処理を含みます。
128(クラシカル)ビットセキュリティ相当方式の比較:
192(クラシカル)ビットセキュリティ相当方式の比較:
256(クラシカル)ビットセキュリティ相当方式の比較:
一般的な傾向の例を以下の図に示します。各線グラフは、対応する棒グラフの暗号アルゴリズム名中のサイズ(非対称鍵暗号アルゴリズムを構成する有限体または環のビット長)と処理速度との関係を示し、各線グラフ中の変数 a
の値は、サイズが2倍になった場合に処理速度が 1/a になる場合の a の値を表します。
RSA:
2の拡大体上のECDH:
素体上のECDH(brainpool):
いずれの図からも、サイズが大きくなるにつれ処理速度が遅くなることを確認できます。
次に、この傾向から外れている例を示します。
ECDSA/ECDH(素体上のNISTカーブ, OpenSSL 3.0.5 のソースコードを Ubuntu 20.04 上でビルドし実行):
OpenSSL においては、
- 256-bitの処理速度が192-bitや224-bitより各段に速くなっているのが分かります。
- これは256-bitの素体上の楕円曲線上の演算のみが理論上特別に速くなるという訳ではなく、アセンブリ実装などのチューニングが行われていることを意味します。参考までに、
./config
に-UECP_NISTZ256_ASM
を付けてアセンブリ実装を無効にしてコンパイルし直すと各段に速くなっていた利点は失われます。(将来的には384-bitや521-bitなどの処理速度も、必要に応じてチューニングされるのではないかと思います。)
- これは256-bitの素体上の楕円曲線上の演算のみが理論上特別に速くなるという訳ではなく、アセンブリ実装などのチューニングが行われていることを意味します。参考までに、
ECDSA/ECDH(素体上のNISTカーブ, Homebrew の OpenSSL 3.3.2 を macOS 14.6 で実行):
- macOS に Homebrew でインストールされる OpenSSL (少なくとも 3.3.1, 3.3.2 ) 及び Ubuntu 20.04 に標準でインストールされる OpenSSL 1.1.1f では、(前述のNISTP256以外に)NISTP224 も多少チューニングされています。
ECDSA(素体上のNISTカーブ, LibreSSL 2.8.3 macOS 12.4 附属バイナリ):
LibreSSL においては、
-
macOSに附属のバイナリで256-bitの署名検証処理速度が速くなっていることが分ります。
-
また、署名速度が検証速度より遅くなっていることが分かります。
一般的に ECDSA 及び DSA では、署名速度が検証速度より速くなり、この傾向は 以下の図のとおり libressl 2.7.4 のソースコードまでは成り立っていたのですが、2.8.0 のリリースノートに右記の記述 "Added a blinding value when generating DSA and ECDSA signatures, in order to reduce the possibility of a side-channel attack leaking the private key." が入って以降、(少なくとも libressl 3.9.2 までは)署名速度が検証速度より遅くなっております。
ECDSA(素体上のNISTカーブ, LibreSSL 2.7.4 のソースコードを macOS 15.0 上でビルドし実行):
APIの差:
-
暗号アルゴリズムを low-level API で呼び出している場合には、暗号アルゴリズム名の後ろに
-no-evp
を付けています。暗号アルゴリズムとしての違いはありません。Low-level API は OpenSSL 3 からは非推奨 (deprecated)になっています。
ハッシュ値切り詰め版との差:
sha512-224
,sha512-256
,sha384
はsha512
のハッシュ値のビット長を切り詰めたアルゴリズムですので、それらはほぼ同じ処理速度を示しています。- 同様に
sha224
もsha256
の初期値を変えハッシュ値を切り詰めたアルゴリズムですので、それらもほぼ同じ処理速度を示しています。
sha256
と sha512
との差:
- 16バイトデータ(一般化すると 512-1-64=447 bits(または 55 バイト)以下)に対する処理速度は、SHAの圧縮関数一回分の処理速度を表しており、
sha256
の方がsha512
より速いことが分かります。 - 入力データサイズがそれらより大きくなると、
sha256
では圧縮関数をsha512
に対してほぼ2倍多く実行しなければならなくなるため、sha256
の方がsha512
より遅くなります。
SHA-3
と SHAKE
:
SHA-3
(sha3-*
)はハッシュ値のビット数、SHAKE
はビットセキュリティの値に比例してメッセージの読み込みレートが小さくなるため処理速度が低下します。SHA-3
(sha3-*
)がSHA-2
と比べ遅い理由は[kec17]でも述べられているとおり、将来の攻撃の進展に備えた大きめのセキュリティマージンによります。
理論的には、
AES-*-CTR
に改ざん検出機能を追加したのがAES-*-GCM
とAES-*-CCM
ですので、それらの処理速度は同じ鍵長のAES-*-CTR
より遅くなります。- さらに、
AES-*-CCM
は、改ざん検出に上記グラフ画像一覧左上のAES-*-CBC
のようなアルゴリズムを用いますので、AES-*-CBC
より遅くなります。 - 256-bit AESの段数は14段で128-bit AESは10段ですので、
AES-128-*
の処理速度はAES-256-*
のおおよそ1.4倍になります。
例外:
- 下図のように、LibreSSL (少なくとも、macOS 附属の 2.8.3, 3.3.6 のバイナリ及び 2.9.1, 3.0.0 以降のソース) では、入力サイズの大きな
aes-(128|256)-gcm
及びaes-(128|256)-ccm
の一部または全体の処理速度が格段に大きく出ます。
LibreSSL 2.8.3 (macOS 12.4 附属バイナリ):
LibreSSL 3.3.6 (macOS 14.6 附属バイナリ):
LibreSSL 3.9.2 (ソースコードからのビルド):
-
冒頭の「格納されたグラフ画像一覧の例」の OpenSSL 1 と 3 グラフ画像一覧を比較すると、左上の
aes128-cbc.png
の図 (古い暗号利用モード CBC を使う 128ビット鍵AES共通鍵暗号の処理速度の棒グラフ)の右側のaes-128-cbc-no-evp
(low-level API 経由で実行した場合の処理速度)が、OpenSSL 1 では極端に遅くなっていることが分かります。- LibreSSL (少なくとも 4.0.0 まで)においても OpenSSL 1 と同様に極端に遅くなっています。
- Low-level API は OpenSSL 3 からは非推奨 (deprecated)になっています。
ハッシュ関数(またはKeccak)に基づくMACの処理速度を以下に示します。
- ハッシュ関数の場合と同様に16バイトなどの小さなメッセージに対しては
hmac(sha512)
とそのハッシュ値切り詰め版よりhmac(sha256)
とそのハッシュ値切り詰め版の方が速くなります。 - 本図中のMACと
cipher128-256.png
中のAES-*-GCM
との処理速度を比べると、後者の方が速いことが分ります。- 理論的に、GCMをブロック暗号に基づいたMACとして利用するGMACの方がGCMより速いため、AESを用いたGMACの方がハッシュ関数(またはKeccak)に基づくMACより速いことが分かります。
Keccak由来関数の処理速度の比較も以下に示しておきます。
128ビットセキュリティKeccak由来関数の比較:
256ビットセキュリティKeccak由来関数の比較:
- SHA-3はメッセージ伸長攻撃に耐性があるため、SHA-2などのように HMAC を利用する必要はなく、keyed-hash の
KMAC
を利用できます。- ただし、keyed-hash として付け足される処理(鍵処理)により、小さなメッセージの処理速度が、特に128ビットセキュリティにおいて、遅くなっていることが分ります。
KECCAK-KMAC*
はKMAC
の鍵処理を省いた部分のため、SHAKE*
と処理速度がほぼ同じになっていることが分ります。
./plot_openssl_speed_all.sh
中の関数 plot_graph_asymmetric()
、 plot_graph_symmetric()
内の記述をご編集下さい。前者は公開鍵暗号/デジタル署名用、後者は共通鍵暗号/ハッシュ関数用になります。
例えば、以下のように記述すると、サポートされている eddsa
ecdsa
デジタル署名の測定結果のグラフが ed_ecdsa.png
に、そのグラフの元となったデータファイルが ed_ecdsa.dat
に、測定時ログが eddsa.log
及び ecdsa.log
にそれぞれ保存されます。
${PLOT_SCRIPT} -o "./${GRA_DIR}/ed_ecdsa.png" eddsa ecdsa
上記欄の各行は以下のようなコマンドにより直接実行することも可能です。
./plot_openssl_speed.sh -o "./tmp/default_openssl_1.1.1f/graphs/ed_ecdsa.png" eddsa ecdsa
- 'openssl_1.1.1f' の部分は PATH 上の openssl コマンドの version に応じてご変更下さい。
- 使い方とオプションにつきましては
./plot_openssl_speed.sh -h
もご参照下さい。
PATH に含まれていない openssl 実行ファイルは -p オプションで指定することができます。
./plot_openssl_speed.sh -p "./tmp/openssl-3.0.7/apps/openssl" -o "./tmp/openssl-3.0.7/graphs/ed_ecdsa.png" eddsa ecdsa
以下のようなエラー:
error while loading shared libraries:
symbol lookup error:
が出る場合には、LD_LIBRARY_PATH
(macOSでは DYLD_LIBRARY_PATH
)に openssl が参照する共有ライブラリのディレクトリをご追加下さい。
コマンドラインで一時的に共有ライブラリを追加し、上記コマンドを実行する例:
(export LD_LIBRARY_PATH=./tmp/openssl-3.0.7${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}; ./plot_openssl_speed.sh -p "./tmp/openssl-3.0.7/apps/openssl" -o "./tmp/openssl-3.0.7/graphs/ed_ecdsa.png" eddsa ecdsa)
openssl が参照する共有ライブラリは ldd
(macOSでは otool -L
)コマンドで表示できます。
$ ldd ./tmp/openssl-3.0.7/apps/openssl
libssl.so.3 => not found
libcrypto.so.3 => not found
<oqsprovider_type>
を名前に含む作業フォルダー ${TMP}/<openssl-type>
内の openssl コマンドを実行する場合:
${TMP}/<openssl-type>
フォルダに移動し、以下のスクリプトを一度実行し、
../../utils/set_oqsprovider.sh
その後、そのフォルダから以下のように ../../plot_openssl_speed.sh -p openssl/apps/openssl
を実行
../../plot_openssl_speed.sh -p openssl/apps/openssl -s 1 -o mldsa44_and_mlkem512.png mldsa44 mlkem512
上記スクリプトによりPNGファイルを出力させると、それと同じファイル名で拡張子が .dat のデータファイルに描画に用いたデータが上書き保存されます。 それらの中身を組み合わせたり、編集したりすることで新たなデータファイルを作成することができます。
plot_openssl_speed.sh
の引数に暗号アルゴリズムを指定しなければ、データファイルに対応するグラフを(openssl speed
を実行することなく)出力します。
./plot_openssl_speed.sh -d "data_file_to_graph" -o "output_graph_file.png"
データファイルは以下の方法で指定可能です。
-d
オプションで指定-d
オプションが指定されていない場合:- グラフを出力するファイル名が
-o "output_graph_file.png"
オプションで指定されている場合はoutput_graph_file.dat
がデータファイルとして読まれます。 -o
オプションも指定されていない場合は、グラフ出力ファイル名のデフォルト./graph.png
に対応する./graph.dat
がデータファイルとして読まれます。
- グラフを出力するファイル名が
デフォルトのファイル名等は、以下のコマンドで確認できます。
plot_openssl_speed.sh -h
使用したデータファイル名(例えば edited_rsa.dat
)がグラフファイル名(例えば rsa.png
)の.pngを.datに変えたファイル名( rsa.dat
)と異なる場合には、使用したデータファイル( edited_rsa.dat
)がそのグラフのファイル名の.pngを.datに変えたファイル( rsa.dat
)にコピーされます。これは、*.png
を描画するために用いた元データは、常に *.dat
を見ればよいようにするためです。
- データの区切りは(カンマでなく)「空白」
- 暗号アルゴリズム名は1列目のみに配置
openssl speed
の出力では暗号アルゴリズム名(やその特性)が複数の列に表示される場合があります。そのような出力をデータファイルに手作業で追加する場合には、第一列目のみに暗号アルゴリズム名を記述する必要があります。plot_openssl_speed.sh
では、出力されるデータファイルの第一列目のみに暗号アルゴリズム名を配置するようにしてあります。
- # から始まる行はコメント
- (コメント行を削除した後の)2行以上連続する空行は不可
- 2行以上連続する空行を含める場合は、スクリプト中の gnuplot の index オプションを用いて、どのデータブロックを表示させるかをご指定下さい。
- 1ファイル中の列数はコメント行や空行を除いて一定(v0.0.0)
- v1.0.0以降では以下の "sig_ver_keygen"、"dec_enc_keygen_dh" TABLE_TYPEの行を混ぜ、"sig_enc_mix" TABLE_TYPE として比較することが可能です。
plot_openssl_speed.sh
で暗号アルゴリズムを複数指定する際も、TABLE_TYPE
が同じものから選択する必要があります。先頭で指定した暗号アルゴリズムと異なるTABLE_TYPE
を持つ後続の暗号アルゴリズムは無視されます。
共通鍵暗号、ハッシュ関数、HMAC で使用するフォーマット。
例:
# type 16 bytes 64 bytes 256 bytes 1024 bytes 8192 bytes 16384 bytes
aes-128-ccm 202973.97k 588256.58k 1065011.71k 1314283.52k 1346633.73k 1381728.26k
hmac(sha512) 23408.12k 90165.99k 249721.98k 538953.37k 756375.73k 782985.02k
sha256 30840.78k 88357.72k 199311.27k 292801.60k 334301.56k 319321.27k
v1.0.0以降でデジタル署名の測定結果の比較に使用するフォーマット。
keygen/sのデータが無い場合にはダミーとして0
を入れてください。
plot_openssl_speed.sh
コマンドの-l
オプションでTABLE_TYPE
を指定する場合には、一番右の列から連続する0
の列を空白にすることも可能です。
例:
# asymmetric_algorithm sign/s verify/s keygen/s
ecdsa(nistp256) 42359.0 15555.0 0
EdDSA(Ed25519) 29607.0 9474.0 0
rsa3072 553.0 28153.0 0
rsa4096 268.0 16543.0 0
mldsa44 14595.0 40081.0 30223.2
v1.0.0以降でデジタル署名以外の公開鍵暗号及びDH鍵共有方式の測定結果の比較に使用するフォーマット。対応する列のデータが無い場合にはダミーとして0
を入れてください。
plot_openssl_speed.sh
コマンドの-l
オプションでTABLE_TYPE
を指定する場合には、一番右の列から連続する0
の列を空白にすることも可能です。
例:
# asymmetric_algorithm dec/s enc/s keygen/s dh/s
rsa3072 593.0 26836.0 0 0
rsa4096 254.0 15503.0 0 0
ecdh(nistp256) 0 0 0 19963.0
ecdh(X25519) 0 0 0 30287.0
mlkem512 114039.0 100366.0 77138.0 0
v1.0.0以降で "sig_ver_keygen"、"dec_enc_keygen_dh" TABLE_TYPEの行を混ぜて比較するためのフォーマット。
例:
# asymmetric_algorithm sign/s verify/s keygen/s
mldsa44 14595.0 40081.0 30223.2
mldsa65 8686.0 22795.0 19578.0
mldsa87 7104.0 14383.0 12445.5
#
# asymmetric_algorithm dec/s enc/s keygen/s dh/s
mlkem512 114039.0 100366.0 77138.0 0
mlkem768 73753.0 71901.0 52051.5 0
mlkem1024 49803.0 52377.8 43771.7 0
v0.0.0でデジタル署名に使用していたフォーマット。 描画では4,5列目の処理速度を使用(2,3列目の処理時間でなく)。
処理時間を描画対象にしなかった理由: 遅いアルゴリズムが比較対象に入っている場合にどのアルゴリズムが速いのか見分けにくい。 速いアルゴリズムの処理時間は0または最小単位に量子化(丸め)られている。
例:
# sign verify sign/s verify/s
rsa4096 0.003922s 0.000061s 255.0 16471.0
dsa2048 0.000296s 0.000219s 3383.0 4557.0
ecdsa(nistp256) 0.0000s 0.0001s 43201.0 15221.0
EdDSA(Ed25519) 0.0000s 0.0001s 24010.0 8805.0
v0.0.0で Diffie-Hellman 鍵交換に使用していたフォーマット。 描画では3列目の数値を使用。
例:
# op op/s
ffdh4096 0.0129s 77.8
ecdh(nistp256) 0.0000s 20643.0
./data_from_web/with_webdata.sh -d <filename>.dat
コマンドで candlestick図を描画する際に取り込むデータファイルのフォーマットです。
- データの区切りは(カンマでなく)「空白」
- # から始まる行はコメント
- (コメント行を削除した後の)2行以上連続する空行は不可
- 2行以上連続する空行を含める場合は、スクリプト中の gnuplot の index オプションを用いて、どのデータブロックを表示させるかをご指定下さい。
例:
# x min 25% 50% 75% max (k|s|v|d|e):name(source) parameter
# x dummy 25% 50% 75% dummy (k|s|v|d|e):'25/50/75% are given' parameter
# x dummy dummy mean dummy dummy (k|s|v|d|e):'only the mean is given' parameter
1 0 76090 86116 134869 134869 s:dilithium2aes(ebats-ryzen7) 2
2 0 42770 42987 43140 43140 v:dilithium2aes(ebats-ryzen7) 2
3 0 33094 33541 33924 33924 k:dilithium2aes(ebats-ryzen7) 2
4 0 74124 74124 74124 74124 s:mldsa44(liboqs0.10.1) 44
5 0 31584.7 31584.7 31584.7 31584.7 v:mldsa44(liboqs0.10.1) 44
6 0 35220.3 35220.3 35220.3 35220.3 k:mldsa44(liboqs0.10.1) 44
7 0 333013 333013 333013 333013 s:ML-DSA-44(pq-sig-zoo) 44
8 0 118412 118412 118412 118412 v:ML-DSA-44(pq-sig-zoo) 44
各列の意味は以下のとおりです。
- 1列目
- その行のデータを表示させる
x座標
- その行のデータを表示させる
- 2~6列目
- アルゴリズム実行 cycle 数の
最小値
、25%値
、50%値または平均値
、75%値
、最大値
- ECRYPT Benchmarkingでは 25%値、50%値、75%値が公開されておりますので、それらの値を入れ、最小値、最大値にはダミー値を入れておきます。
- 平均値しか入手できない場合には、
50%値または平均値
に値を入れ、それ以外にはダミー値を入れておきます。
- アルゴリズム実行 cycle 数の
- 7列目
- x座標に表示させる名前
- 名前の先頭の
k:
、s:
、v:
、e:
、d:
はそれぞれ、keygen, sign, verification, encryption/encapsulation, decryption/decapsulation 処理であることを示しています。 ()
はデータソースの略称
- 8列目
- x座標に表示させる名前のアルゴリズム名から抜き出したパラメータ
- (パラメータ値でソートする場合を想定したものですが)v1.0.0 の時点では使用していなため、ダミー値を入れてもよいです(が空白にしてはなりません)。
$ awk '/^PRETTY/ {print substr($0,14,length($0)-14)}' /etc/os-release
Ubuntu 20.04.4 LTS
$ uname -srm
Linux 5.10.102.1-microsoft-standard-WSL2 x86_64
$ awk '$1$2 == "modelname" {$1="";$2="";$3=""; print substr($0,4); exit;}' /proc/cpuinfo
Intel(R) Core(TM) i7-10810U CPU @ 1.10GHz
実行PATH中のopenssl:
$ openssl version -a
OpenSSL 1.1.1f 31 Mar 2020
built on: Mon Jul 4 11:24:28 2022 UTC
platform: debian-amd64
options: bn(64,64) rc4(16x,int) des(int) blowfish(ptr)
compiler: gcc -fPIC -pthread -m64 -Wa,--noexecstack -Wall -Wa,--noexecstack -g -O2 -fdebug-prefix-map=/build/openssl-51ig8V/openssl-1.1.1f=. -fstack-protector-strong -Wformat -Werror=format-security -DOPENSSL_TLS_SECURITY_LEVEL=2 -DOPENSSL_USE_NODELETE -DL_ENDIAN -DOPENSSL_PIC -DOPENSSL_CPUID_OBJ -DOPENSSL_IA32_SSE2 -DOPENSSL_BN_ASM_MONT -DOPENSSL_BN_ASM_MONT5 -DOPENSSL_BN_ASM_GF2m -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DKECCAK1600_ASM -DRC4_ASM -DMD5_ASM -DAESNI_ASM -DVPAES_ASM -DGHASH_ASM -DECP_NISTZ256_ASM -DX25519_ASM -DPOLY1305_ASM -DNDEBUG -Wdate-time -D_FORTIFY_SOURCE=2
ソースからコンパイルした openssl-3.0.5:
$ (export LD_LIBRARY_PATH=./tmp/openssl-3.0.5${LD_LIBRARY_PATH:+:$LD_LIBRARY
_PATH}; ./tmp/openssl-3.0.5/apps/openssl version -a )
OpenSSL 3.0.5 5 Jul 2022 (Library: OpenSSL 3.0.5 5 Jul 2022)
built on: Wed Jul 13 10:43:30 2022 UTC
platform: linux-x86_64
options: bn(64,64)
compiler: gcc -fPIC -pthread -m64 -Wa,--noexecstack -Wall -O3 -fstack-protector-strong -fstack-clash-protection -fcf-protection -DOPENSSL_USE_NODELETE -DL_ENDIAN -DOPENSSL_PIC -DOPENSSL_BUILDING_OPENSSL -DNDEBUG
$ gnuplot -V
gnuplot 5.2 patchlevel 8
$ uname -srm
Darwin 21.5.0 x86_64
$ sysctl machdep.cpu.brand_string
machdep.cpu.brand_string: Intel(R) Core(TM) i9-9980HK CPU @ 2.40GHz
$ openssl version -a
LibreSSL 2.8.3
options: bn(64,64) rc4(16x,int) des(idx,cisc,16,int) blowfish(idx)
$ gnuplot -V
gnuplot 5.4 patchlevel 3
OPENSSL_MODULES
環境変数、または、コマンドオプションの -provider
より前に -provider-path
オプションでプロバイダー(oqs-provider の場合は oqsprovider.so
)のあるフォルダを指定
plot_openssl_speed_all.sh
で生成された tmp/openssl-<ver>-oqsprovider<ver>-liboqs<ver>
フォルダ内から実行するコマンドの例:
./openssl/apps/openssl list -kem-algorithms -provider-path ./_build/lib/ -provider oqsprovider
Windowsの環境変数の PATH に libssp-0.dll が存在するフォルダを追加するか、WSL 上の Debian/Ubuntu の場合は以下を実行後に、エラーが出たコマンドを再実行
sudo apt install gcc-mingw-w64-x86-64
bash
export MINGW_GCC_VER=$(/usr/bin/x86_64-w64-mingw32-gcc-posix --version | awk '/x86_64-w64-mingw32-gcc-posix/ {print substr($3,1,index($3,"-")-1)}')
cp -p "/usr/lib/gcc/x86_64-w64-mingw32/${MINGW_GCC_VER}-posix/libssp-0.dll" .
exit
openssl speed
に渡すオプションや引数を変更してみてください。
openssl コマンドの version により実装されていないオプションや暗号アルゴリズムが存在します。
セキュリティソフト等で exe ファイルの実行がブロックされていないか画面等をご確認下さい。ブロックされていた場合、当該ブロックのみを解除し、コマンドを再実行下さい。
正しく表示されない場合はGitHubのページをご参照下さい。
- [kec17] TeamKeccak "Is SHA-3 slow?", 2017.6
- [mig] "OpenSSL (libssl libcrypto) の version を 1.1未満(1.0.2以前) から 1.1 以降に変更する方法や注意点など"
- [pq-sig-zoo] "Post-Quantum signatures zoo"
- [ebats] "eBATS: ECRYPT Benchmarking of Asymmetric Systems"
最後までお読み頂きありがとうございます。 GitHubアカウントをお持ちでしたら、フォロー及び Star 頂ければと思います。リンクも歓迎です。