dowkdとopenssl-blacklistの脆弱な鍵生成の違い


初版 2008.06.11

Debian OpenSSL脆弱性問題のまとめはこちらを、最新のSSLブラックリストの更新履歴のまとめはこちらをご覧ください。m(_ _)m

dowkdにもopenssl-blacklistにも脆弱な鍵一覧の
生成プログラムが含まれています。

乱数の無いケースの実装方法


dowkdとopenssl-blacklistでは乱数ファイル($HOME/.rnd)が
無い場合の実装が違っています。

dowkdの場合以下のようにopensslが呼ばれる度に
乱数ファイルを削除します。

% rm -f $HOME/.rnd  # 乱数ファイルを削除する
% LD_PRELOAD=$dso SETPID=1 openssl genrsa -out 1.key 1024
% rm -f $HOME/.rnd
% LD_PRELOAD=$dso SETPID=2 openssl genrsa -out 2.key 1024
% rm -f $HOME/.rnd
% LD_PRELOAD=$dso SETPID=3 openssl genrsa -out 3.key 1024
%    :

openssl-blacklistの場合、空の乱数ファイルを生成し
予め乱数ファイルのパーミッションを読み書きできないよう設定しておき
以降は乱数ファイルを削除せずopensslを実行します。

% cat /dev/null > $HOME/.rnd  # 乱数ファイルを空のファイルにする
% chmod 000 $HOME/.rnd        # 乱数ファイルを読み書きできなくする
% LD_PRELOAD=$dso SETPID=1 openssl genrsa -out 1.key 1024
% LD_PRELOAD=$dso SETPID=2 openssl genrsa -out 2.key 1024
% LD_PRELOAD=$dso SETPID=3 openssl genrsa -out 3.key 1024
%    :

ケース分析


簡単なテストコードを実行することにより
脆弱な鍵を生成するバージョンでは、同じプロセスIDの下で
乱数ファイルの状態により以下3種類の鍵しか生成しないことがわかりました。

  • CASE1: 乱数ファイル($HOME/.rnd)が無い場合
  • CASE2: 乱数ファイルが読めないか読めてもファイルサイズがゼロだった場合
  • CASE3: ゼロより大きい乱数ファイルが存在する場合

dowkdではCASE1とCASE3、
openssl-blacklistではCASE2とCASE3
に基づきブラックリストを生成します。

CASE2ですが、実際の運用を考えた場合、自分のホームディレクトリに
意図的にサイズ0の乱数ファイルを作ることは無いと思いますし
またホームディレクトリにあるファイルの読み込み権がユーザ本人に
無いというケースも無いでしょうから、CASE2の鍵をブラックリストに
含めるのは全く意味がない事のように思われます。

また、CASE1についても事前に一度もopensslの乱数生成を実行せずに
RSAやDSAの鍵を生成するというケースも無いのではないかと思います。
通常は数回生成を試してみるのではないでしょうか。
このCASE1については現実には、ほぼあり得ないケースのように思われます。

結論


乱数ファイル関連で脆弱な場合の鍵生成およびブラックリストについて
まとめてみたいと思います。

  • 脆弱な場合、同じアルゴリズム・鍵長・プロセスIDの場合、3通りの鍵が作られる
  • 現実の運用を考えると乱数ファイルがあるケースのみを考えれば良いのではないか?
  • dowkdとopenssl-blacklistは
    • RSAの任意の(OpenSSLで可能な)鍵長のブラックリストが生成できる
    • DSA鍵のブラックリストは生成できない
  • dowkdは
    • $HOME/.rndファイルが無いケースのブラックリストは作るが意義は少ない
    • $HOME/.rndが読み込めないかサイズゼロのケースのブラックリストは作られない
  • openssl-blacklistは
    • $HOME/.rndファイルが無いケースのブラックリストは作られない
    • $HOME/.rndが読み込めないかサイズゼロのケースのブラックリストは作るが意義は全く無い
最終更新:2008年06月20日 10:55