暗号解読とコンピュータセキュリティにおいて、辞書攻撃とは、鍵空間の制限されたサブセットを使用して暗号または認証メカニズムを破る攻撃であり、復号鍵またはパスフレーズを特定しようとすることで、時には何千または何百万もの可能性のある可能性を試します[ 1 ]。多くの場合、過去のセキュリティ侵害のリストから得られます。
辞書攻撃は、あらかじめ用意されたリストにあるすべての文字列を試すことに基づいています。このような攻撃は元々辞書にある単語を使用していました(そのため「辞書攻撃」というフレーズが使われます)。[ 2 ]しかし現在では、過去のデータ漏洩から回収された数億のパスワードを含む、はるかに大規模なリストがインターネット上に公開されています。[ 3 ]また、このようなリストを使用して、似たような文字を数字に置き換えるなど、一般的なバリエーションを生成できるクラッキングソフトウェアもあります。辞書攻撃は、最も成功する可能性が高いと思われる可能性のみを試します。辞書攻撃が成功することが多いのは、多くの人が普通の単語や一般的なパスワード、あるいは数字や句読点文字を追加して得られるような、現代のクラッキングソフトウェアのパターン生成で簡単にカバーできるバリエーションなど、短いパスワードを選択する傾向があるためです。より安全なアプローチは、パスワードマネージャープログラムを使用するか、パスワードを手動で入力して、長いパスワード(15文字以上)または複数の単語からなるパスフレーズをランダムに生成することです。
サーバー管理者は、より計算コストの高いハッシュアルゴリズムを使用することで、辞書攻撃を阻止できます。Bcrypt 、scrypt、Argon2 は、処理にかなりの計算能力を必要とするリソース集約型の関数の例であり、[ 4 ]辞書攻撃に対するセキュリティを大幅に向上させることができます。SHAやMD5などの他のハッシュ関数は、計算がはるかに高速でコストも低いですが、キー ストレッチングと呼ばれるプロセスによって入力文字列に複数回適用することで、セキュリティを強化することができます。攻撃者は、辞書攻撃が実行可能となるために、関数が何回適用されたかを概ね知っている必要があります。
辞書の単語のハッシュのリストを事前に計算し、そのハッシュをキーとしてデータベースに保存することで、時間と空間のトレードオフを実現できます。これにはかなりの準備時間が必要ですが、実際の攻撃をより速く実行できます。事前計算されたテーブルのストレージ要件はかつて大きなコストでしたが、ディスクストレージのコストが低いため、現在ではそれほど問題ではありません。事前計算された辞書攻撃は、多数のパスワードを解読する場合に特に効果的です。事前計算された辞書は一度だけ生成すればよく、完成すれば、いつでもほぼ瞬時にパスワードハッシュを検索して対応するパスワードを見つけることができます。より洗練されたアプローチとしては、レインボーテーブルを使用する方法があり、検索時間がわずかに長くなる代わりにストレージ要件を削減できます。このような攻撃によって侵害された認証システムの例については、LMハッシュを参照してください。
事前計算された辞書攻撃、または「レインボーテーブル攻撃」は、ソルトを使用することで阻止できます。ソルトは、検索対象のパスワードごとにハッシュ辞書を再計算させる技術であり、可能なソルト値の数が十分に多ければ、事前計算は不可能になります。 [ 5 ]