web-dev-qa-db-ja.com

MD5およびSHA1に対する選択された平文攻撃

http://tools.ietf.org/html/rfc2617#section-4.9 によると、サーバーにノンスを選択させるが、クライアントにノンスを選択させないことで、ダイジェストアクセス認証が選択された平文攻撃に開かれる。私の質問は二つあります...

これはSHA1の問題ですか?ダイジェストアクセス認証はMD5を使用するので、おそらくクライアントnonceはそのために意図されているのでしょうか?

また、ナンスによって選択されたサーバーを制御できることはどのように役立ちますか? RFCのリンクは機能していません。

7
paynes_bay

攻撃者の目標は、パスワードを推測することです。攻撃者は認証メッセージを観察することで、自宅でパスワードを「試す」ためにすでに十分に学習しています(つまり、「オフライン辞書攻撃」)が、RFC 2617がその時点で話していることではありません。むしろ、サーバーを偽装する攻撃者のアイデアに集中しているため、選択した「サーバー」ナンスをクライアントに提供します。クライアントは、サーバーのナンス、クライアントのナンス、およびパスワードを一緒にハッシュすることによって、このようなナンスに応答します(ここでは詳細を自発的にスキップしています)。その後、攻撃者はハッシュ関数の内部的な弱点を悪用して、クライアントが送信したものからパスワードを再計算する可能性があります。 RFC 2617が述べようとしているのは、クライアントナンスを省略しても、攻撃者にとっては物事を簡単にするだけです(少なくとも難しくはなく、ヒューリスティックに簡単です)-当然、クライアントナンスを使用するmayハッシュ関数が不安定な場合にクライアントを保護するのに役立ちます。クライアントnonceは確かにそれ以上の害はありません。

現在、RFC 2617で説明されているダイジェストアクセス認証で使用された場合、MD5の悪用可能な弱点は現在知られていません。 (そしてそのMD5はそうではありません)。したがって、クライアントnonceによってここで提供される保護は仮説にすぎません。しかし、私が言ったように、それはまた害を及ぼしません。

4
Thomas Pornin

RFCのそのセクションは、いくつかの疑わしい主張を行っており、それほどうまく記述されていません。これが私が思うことですすべきが言った。

  1. 攻撃者がハッシュ関数への入力の一部を制御できるようにする場合は、これがハッシュ関数に対する選択平文攻撃を可能にするかどうかを検討する必要があります。クライアントがナンスを提供しなかった場合、悪意のあるサーバーがハッシュ関数にある種の選択された平文攻撃を仕掛けようとして、サーバーのナンスを悪意を持って選択するのではないかと心配するかもしれません。

    幸い、現在のハッシュ関数は、選択された平文攻撃に対して安全であるように設計されているため、この心配は実際にはリスクではありません。

    一方、本当に慎重になりたい場合は、クライアントが選択した乱数を含めることで、この種の攻撃の機会を減らすことを試みることができると思います。このようにして、サーバーが悪意のある場合でも、ハッシュ関数への入力の一部がランダムであり、攻撃者が制御できず、攻撃者が予測できないことが保証されます。これが実際に何らかのメリットをもたらすかどうかは明らかではありませんが(おそらく不必要です)、害はありません。

    詳細については、@ Thomasの回答を参照してください。

  2. 両方のエンドポイントが独自のランダムナンスを提供することは、一般的に優れたエンジニアリング手法です。たとえば、状況によっては、1つのエンドポイントが悪意のある特定の種類のリプレイ攻撃を防ぐのに役立ちます。

    クライアントのナンスを省略することで実際にRFC2617に対するある種の巧妙なリプレイ攻撃が可能になるかどうかはわかりませんが、なぜリスクを取るのですか?考えられる攻撃のクラス全体を除外できる簡単な変更がある場合、その変更は魅力的に見えます。微妙な攻撃(そして恐らくは見過ごされがちな、見過ごされがちな攻撃)について一生懸命考える必要をなくすものはすべて、良いことだと感じます。

  3. RFC2617の場合、クライアントナンスを含めることで、サーバーが悪意のある場合の事前計算攻撃(時間/空間のトレードオフ攻撃、「レインボックステーブル」など)を防ぐことができます。詳細については、@ ixe013の回答とコメントを参照してください。

3
D.W.

はい、SHA1にはまだ問題があります。攻撃者がルックアップテーブルを格納するためにより多くのスペースを必要とすることを除けば、実際のハッシュアルゴリズムとは無関係です。

ダイジェストは、ユーザー名、パスワード、指定されたnonce値、HTTPメソッド、および要求されたURI(RFC2617)のハッシュです。攻撃者はそれらすべて(パスワードを除く)を知っているため、事前にルックアップテーブルを準備できます。このようなテーブルは、事前に計算することはできません。クライアントは、攻撃者には事前に知られていない独自のナンス(cnonce)を追加します。

1
ixe013