次の非常に基本的なハッシュアルゴリズムを想定します。
h(k) = k mod 17
パスワードを作成するとしましょう12345
この非常に基本的なハッシュアルゴリズムを使用するWebサイトの場合。これにより、ハッシュ値は3になります。
ブルートフォース攻撃者がやって来て、1から始まる数値の推測を開始したとします。ハッシュ衝突が発生する前に3に到達する必要があるだけで、明らかに3は元のパスワードではありません。
パスワードハッシュスペース(0-16)が許可されたパスワードのスペースよりもはるかに小さいという問題ですか、それとも私が見落としている他のものがありますか?
Steffenの答え はこれを完全にカバーしますが、もう少し詳細を追加したかっただけです。
彼が言うように、多くのアプリケーションはデータベースに保存されているハッシュ値にハッシュする任意の文字列であなたを認証してくれるので、あなたは通常実際のパスワードを見つけることを気にしません。これは、ほとんどの場合Webアプリケーションに当てはまります ただし、他のコンテキストではそれほど頻繁ではない場合があります 。つまり、ブルートフォース検索を実行して同じハッシュの何かを見つけた場合、実際には同じパスワードでなくても、アカウントにログインできます。これは、質問で暗示されているように、ハッシュの性質であり、 ピジョンホール原理 の直接の結果です。
ただし、元のパスワードをdoしたい場合があります。これは、たとえば、ハッカーが価値のないサービスからユーザー名/パスワードを盗み、より価値の高いサービス(Facebook、銀行など)でユーザーとしてログインしようとした場合に当てはまります。人々はどこでも同じパスワードを使用することが多いため、この場合は、特定のハッシュアルゴリズムで同じ値にハッシュするだけではなく、元のパスワードが本当に必要です(結局のところ、異なるサービスが異なるハッシュ方式を使用している可能性があり、ほとんどの場合、 cryptographic salt - h/t @Taemyr )を使用します。
幸い(攻撃者にとって)、これは重要ではありません。その理由は、徹底的な総当たりは事実上不可能だからです。代わりに、ハッカーはパスワード(Wordリスト、一般的なパスワードなど)になりそうなことを試みます。反例として、それが不可能であるにもかかわらず、Webサービスからのハッシュがあり、すべての可能な256ビットASCII文字列に対してブルートフォース検索を実行することを管理していると想定します。ユーザーのパスワードハッシュと同じ値に:
BD3EDF42F6D3AF2DAAE93313EB534
7AF7B8B8F84443872C48EC372DBD1
password
実際のパスワードはどちらでしょうか。答えは明らかに#3です。つまり、技術的には、ユーザーがたまたま非常に強力なパスワードを選択した可能性があります(つまり、BD3EDF42F6D3AF2DAAE93313EB534
)それはたまたまpassword
と同じ値にハッシュされましたが、その確率は事実上ゼロです。
この意味で、攻撃者には素晴らしい利点があります。彼らは実際のパスワードを見つけることを好むでしょう、そして人々はランダムなパスワードを選ぶのが苦手なので、とにかくすべてをチェックすることではなく、パスワードのように見えるものをチェックすることです。これにより、ブルートフォースによる検索の強制力が大幅に高まり、攻撃者にとっても非常に有用な結果が得られます(たまたま同じハッシュを持つランダムな文字列ではなく、実際のパスワード)。
総当たりの主な目的は、元のパスワードを取得することではなく、機能するパスワードを取得することです。したがって、見つかったパスワードが機能する限り、元のパスワードでなくても問題はありません。
ただし、一般的なパスワードの辞書と典型的な変更に基づく効率的でインテリジェントなブルートフォースにより、結果として得られるパスワードは実際に本当のパスワードになる可能性が非常に高くなります。これは、ほとんどのユーザーが長いランダムなパスワードを使用せず、一般的な変更を加えた一般的なパスワードを使用しているため、インテリジェントなブルートフォースを実行するときに実際のパスワードが最初に見つかるからです。
パスワードのブルートフォース検索がパスワードではなく衝突を返すかどうかは重要ですか?
この質問に十分に対処する他の回答があるので、別の角度を探ります。ブルートフォース検索では、元のパスワードの代わりに衝突が見つかる可能性は低いため、問題ではありません。
仮定:
私たちのパスワードが「password」で、8文字あるとします。 1〜8文字の英数字パスワードの数は約2.219e + 14です。
また、パスワードの最大長は10であるとします。 9〜10文字のパスワードは8.528e + 17、つまり1〜8文字の約3800倍です。 5つの衝突を想定しても、5つすべてが「パスワード」より長い可能性は約99.9%です。
パスワードの最大長に使用した数は、(おそらく)通常使用される数よりもはるかに少なく、衝突の数は大幅に過大評価されています。実際には、実際のパスワードよりも短い衝突を検出することはありません。
実際に使用されるハッシュアルゴリズムには、ブルートフォースを実行できないキースペースが必要です。一方、実際のパスワードのセットははるかに制限されているため、攻撃者は考えられるすべてのパスワードではなく、実際のユーザーが使用するパスワードのみを検索します。
ここで、適切なパスワードがあり、攻撃者がブルートフォース攻撃を行った場合、別のパスワードが同じハッシュを持つことは不可能ではありません。ハッシュのキースペースが64ビットしかない場合、数十億のパスワードのうち、2つが同じハッシュコードを持っていると予想できます。したがって、攻撃者が同じハッシュで別のパスワードを見つけることは不可能ではありません(平均で2 ^ 64個のパスワードをチェックした後)。どちらも攻撃者がサービスにアクセスするために機能します。実際には、ハッシュアルゴリズムははるかに大きなキースペースを持つ必要があり、誰もeverが同じハッシュで異なるパスワードを見つけることはありません。
その代替パスワードを見つけると、サービスにログインできます。しかし、ほとんどの攻撃者は明示的にpasswordを必要としています。重要でないサービスには興味がないが、他のサービスで同じパスワードを使用することを望んでいるからです。したがって、別のサービスがまったく同じハッシュアルゴリズムとまったく同じソルトを使用しない限り、代替パスワードは完全に役に立ちません。