web-dev-qa-db-ja.com

OpenSSL 0.9.6a PRNGアルゴリズムの脆弱性:悪用する方法?

OpenSSLを見た Openssl 0.9.6aのセキュリティ勧告

最近、OpenSSLの組み込みの疑似乱数ジェネレーター(PRNG)の暗号化の欠陥がMarkku-Juhani O. Saarinenによって指摘され、攻撃者が数百の出力からPRNGの内部状態を再構築する方法を示しました1 -byte PRNGリクエスト。この問題は、OpenSSLのベースとなっているSSLeayにさかのぼり、他のSSLeayベースのツールキットでも同様に発見されました。 PRNG OpenSSLの開発中、この設計エラーはこれまで見過ごされていました。

PRNG(ソースコードファイルcrypto/md_Rand.cに実装)は、デフォルトでSHA-1のハッシュ関数を使用して、内部の秘密状態を更新し、出力を生成します。秘密状態は、 2つのコンポーネント:ハッシュ関数の出力(SHA-1の場合は160ビット)に応じたサイズのチェーン変数 'md'、および大きなバッファー 'state'。 'md'は、PRNGの操作中に常にハッシュ関数出力に置き換えられます。 「状態」は循環的にアクセスされ、追加のエントロピーを格納するために使用されます。

出力バイトを生成するとき、0.9.6aまでのOpenSSLバージョンは、「md」を以前の値の半分のハッシュと、「state」からのバイトを含む他のデータに設定しました。設計エラーは、ハッシュ関数への「md」入力の半分が、PRNG出力としても使用されたものと同じ半分であること、つまり、一般に秘密とは見なされないことを意味します。また、数値「状態」から使用されるバイト数は、PRNGの出力として要求されたバイト数に依存し、可能な限りすべてのケースのブルートフォース分析を容易にするために、1まで小さくすることができます。これらの組み合わせ効果により、内部の完全な再構築が可能になったPRNG状態1つの出力PRNG知識を得るために適切なサイズの要求'md'に続いて、十分な連続1バイトPRNGすべての「状態」をトラバースする要求

参照:SecurityTrackerアラートID: 1001961

4
freak_warrior

あなたが投稿したセキュリティ勧告から、設計エラーは次のように要約できるようです

PRNGはハッシュ関数です。PRNG(ハッシュ関数)への入力で、その半分は以前のPRNG出力からのものです。以前の出力から読み取るだけなので、基本的にハッシュ関数のSHA-1の強度は半分になり、160ビットではなく80ビットになります。

したがって、OpenSSLのlibrayがキー生成に使用されている場合、残りの80ビットキーに対してブルートフォース攻撃を実行する可能性があります。それは間違いなく大きな脆弱性であり、今日の処理能力の基準によって破られます。しかし、それはまだ大きな仕事です。

1
John