web-dev-qa-db-ja.com

SHA-256がパスワードに適さないのはなぜですか?

私はこれについてすべて学び始めたばかりで、その答えをどこにも本当に見つけることができません。つまり、なぜパスワードにSHA-256が使用されないのですか?その理由は、通常のSHA-256は高速な関数であり、遅い関数を使用する方が良いためです。しかし、ここでは、私が実際に得ていない部分を示します。これまで読んだものから、SHA-256は、 A LOT A LOTのように、解読に数年かかるハッシュですが、基本的に解読が不可能であるのに、なぜパスワードに悪いと考えられるのでしょうか。

5
Wiktor

損失の全体的なリスクを軽減することがすべてです。優れたハッシュアルゴリズムでは、ハッシュ値を元に戻して元のテキストを計算することができません。ただし、パスワードは非常に短いものです。攻撃者はパスワードを推測することで、SHA-256の出力とデータベースで見つかったSHA-256を比較できます。また、パスワードは非常に短いため、多くのパスワード推測をこの方法でテストすることは、コンピュータにとって簡単です。数千ドルで、SHA-256テスト専用の小さなスーパーコンピューター(ビットコインマイニングに使用)を購入できます。これにより、攻撃者は1秒あたり16個の(兆)異なるパスワード推測をテストできます。これは、SHA-256を壊そうとするよりもはるかに効果的です。

パスワードのハッシュは、単一のパスワードのクラックを防止しようとすることではありません。 Webサイトの所有者は、100万人のユーザーのデータベースを所有しており、攻撃者が侵入すると、パスワードのデータベースのコピーを頻繁に盗むため、さらに心配になります。攻撃者がデータベース内のすべてのパスワードを解読するのを困難にしたいと考えています。

専用のハードウェア(または一連のボットネットゾンビ)を使用すると、攻撃者は、SHA-256の1回の反復によってのみ保護される一般的なデータベースのパスワードの大部分を簡単に破ることができます。また、攻撃者は1つのサイトでパスワードを破ることにより、複数のサイトでパスワードを再利用するユーザーを利用できます。これは、アカウントテイクオーバー(ATO)攻撃の前兆であり、盗まれたパスワードを再利用して銀行口座やギフトカードにアクセスし、実際のお金を盗みます。

これを防ぐために、専用のパスワード保護アルゴリズムが時間の浪費として構築されています。たとえば、PBKDF2は、構成方法に応じて、ハッシュアルゴリズムを数百、数千、または数百万回実行します。これにより、攻撃者がその大きな要因で単一のテストを実行するために実行する必要がある作業量が増加します。 100万回の反復を実行するようにPBKDF2を設定すると、1秒あたり1600万のパスワード推測のみをテストするという上記のボックスの有効性が低下します。攻撃者は、単一のSHA-256として保存されているデータベースをクラックする場合と比較すると、データベース内の100万分の1のパスワードを解読することしかできません。それがリスク低減です。

14
John Deters

ジョンの優れた答えに加えて、考慮すべきもう1つの重要な点があります。

パスワードをチェックするとき、データベースに保存されているアカウント情報(ユーザー名、パスワード)を検索するなどのアクションに多くの時間が費やされます。

高速ハッシュアルゴリズムを使用している場合、そのルックアップはパスワード検証のかなりの部分を占めます。これにより、侵入者がランダムな名前とパスワードを発射して、応答のタイミングをとることにより、パスワードではなくどの名前が存在しないかを判断する攻撃を比較的簡単に行うことができます。

格納されたパスワードと比較するためにデータベースに送信する前に受信パスワードをゆっくりハッシュすることにより、パスワードのチェックに必要な時間からデータベースルックアップとパスワード比較自体の時間を節約できます。結果として、ルックアップの失敗は、成功したルックアップと同じ時間(ネットワーク遅延などのマージン内)になります。

もちろん、これは、ユーザー情報を取得する前に、着信パスワードをハッシュすることを前提としています。そうしないと、存在しないユーザーの失敗は、不正なパスワードを持つ既存のユーザーの失敗よりもはるかに速くなり、システムへの攻撃を行う人に、彼が行ったどの試行についての情報が含まれる可能性があります。実際のユーザー名(最初は実際のユーザー名であることを知らなかったとしても).

これは実際に起こりますか?わからないしかし、それが数年前にペンテストチームが私たちに言った遅いハッシュメカニズムの1つの理由でした。

6
jwenting