現代の OpenSSL 環境で古来の暗号アルゴリズムをサッと使う - シェル芸 / 闇の魔術に対する防衛術 Advent Calendar 2023 - ダメ出し Blog

2023-12-07(Thu) [sh][shell][crypto] [更新履歴]

シェル芸 Advent Calendar 2023闇の魔術に対する防衛術 Advent Calendar 2023、 7日目の記事です。

OpenSSL 3+ で古来の暗号アルゴリズムが使えない!

みなさん MD4 使ってますよね? 当然ご存知の PEAP とか NTLM とかね?! MD4 が誕生したのは 1990 年だそうですが、いまだ現役! すごい!!

しかし現代の OpenSSL では (デフォルトは) 使えません。残念。

$ openssl version
OpenSSL 3.1.4 24 Oct 2023 (Library: OpenSSL 3.1.4 24 Oct 2023)
$ openssl md4
Error setting digest
408C6395477F0000:error:0308010C:digital envelope routines:inner_evp_generic_fetch:unsupported:../crypto/evp/evp_fetch.c:341:Global default library context, Algorithm (MD4 : 97), Properties ()
408C6395477F0000:error:03000086:digital envelope routines:evp_md_init_internal:initialization error:../crypto/evp/digest.c:272:

OpenSSL 設定ファイルで古来の暗号アルゴリズムを有効化

Web 検索すれば大量に見つかる二番煎じですが、 下記のように openssl.cnf(5) ファイルを設定すれば 古来の暗号アルゴリズムを有効化できます。

openssl_conf = openssl_init

[openssl_init]
providers = provider_sect

[provider_sect]
default = default_sect
legacy = legacy_sect

[default_sect]
activate = 1

[legacy_sect]
activate = 1

たとえば、上記内容の openssl.cnf ファイルがカレントディレクトリにある場合、 下記の要領で OpenSSL に使用させることができます。

$ OPENSSL_CONF=$PWD/openssl.cnf openssl md4
...

もちろん、システムのデフォルトの openssl.cnf ファイルに同等の設定をすれば、 システム全体で有効化することもできます。

ラッパースクリプトでサッっと古来の暗号アルゴリズムを有効化

設定ファイルを用意するのは面倒だし、 システム全体で有効化するのは影響範囲が広く気が引けますね?

そこで、サッっと有効化してコマンドを実行できるラッパースクリプト openssl-legacy を作りました。 このスクリプトを経由して OpenSSL (libssl ライブラリ) を利用しているコマンドをして起動するだけで OK! 簡単、楽チン!!

よかったら /usr/local/bin/openssl-legacy あたりにインストールしてみてください。

使い方は簡単、openssl-legacy のコマンドライン引数に 実行したいコマンドとコマンドライン引数を与えて実行するだけです。

$ openssl-legacy openssl md4
...

指定したコマンドが存在しない場合は openssl(1) のサブコマンドを実行します。

$ openssl-legacy md4
...

OpenSSL libssl ライブラリを利用した各種モジュールにも有効です。 下記は Python hashlib での例です。

$ python3 -c 'import hashlib; print(sorted(hashlib.algorithms_available))'
... 'md4' は含まれない ...
$ openssl-legacy python3 -c 'import hashlib; print(sorted(hashlib.algorithms_available))'
... 'md4' が含まれる! ...

ところで、12月25日はクリスマスな上に、 OSS 界隈で地味に活躍されているふみやすさんの誕生日ですね!
http://www.amazon.co.jp/registry/wishlist/27M7TV8CEEF6G?sort=priority

逆に、あなたの書いた OSS や Blog や Advent Calendar が気に入ったら何か送りたく なってしまうかもしれないので、プロフィールや Web サイトに あなたの Amazon 欲しいものリストの URL を貼っておいてくださいね!


私が勤める OSSTech っていう某弊社で社員募集しているようです。 人材紹介会社を介さなければ、入社後に 20万円のボーナス! 「ふみやすっていう人に紹介された」と言ってもらえると私にもボーナス!! → https://www.osstech.co.jp/recruit/


よろしければ、これまで参加した/参加予定のほかの Advent Calendar もどうぞ。