辞書攻撃とは何か?仕組みと防御策を徹底解説するパスワードセキュリティ実務ガイド
辞書攻撃とは — 概要
辞書攻撃(dictionary attack)とは、攻撃者があらかじめ用意した「単語リスト(ワードリスト)」や推測パターンを順に当てはめてパスワードや暗号鍵を解析する手法です。単純な「総当たり(ブルートフォース)」と異なり、人間が選びやすい単語やフレーズ、既知の漏洩パスワードリストを優先して試すため、実務上はより効率的に成功率を高められます。
仕組みと種類
基本的には次のような流れで行われます。
- ワードリストの準備:一般語、名前、辞書、固有名詞、過去のリークパスワード(例:RockYou)など。
- 候補の生成/加工:大文字小文字の変換、数字付加、置換(o→0、i→1など)、文字列の連結などの「マングリング」ルールを適用。
- 試行:対象システムに対して順次試す(オンライン)か、ハッシュを入手してローカルでハッシュ照合(オフライン)する。
主に次のような種類があります。
- オンライン辞書攻撃:ログイン画面等に対して直接パスワードを試行。レート制限やロックアウトで防御しやすいが、複数IPを用いるなど回避法がある。
- オフライン辞書攻撃:パスワードハッシュを入手(データベース流出等)し、ローカルで総当たりや辞書攻撃を行う。レート制限がないため高速で強力。
- ハイブリッド攻撃:辞書ベースにルール(前後に数字を追加、記号を挿入など)を組み合わせ、辞書+変形で効率を高める手法。
辞書攻撃と関連技術
- ブルートフォース攻撃:文字セットと長さを全て試す手法。辞書攻撃は確率的に効率化した一種。
- レインボーテーブル:プレコンピュートされたハッシュと平文の対応表。ソルトが無いハッシュに対して有効。ソルトを用いることで無効化される。
- クレデンシャルスタッフィング:別サービスで漏洩したID/パスワードの組み合わせを使い複数サービスでログインを試みる手法。実質的に辞書攻撃の一形態として扱われることもある。
攻撃ツールと現状の脅威
代表的なツールには Hashcat や John the Ripper があり、GPUアクセラレーションや高度なルール適用で非常に高速にハッシュを照合できます。過去のリーク(例:RockYou)はワードリストの重要なソースとなり、侵害されたデータは攻撃者コミュニティで広く共有されます。
オンライン攻撃とオフライン攻撃の違い
- オンライン:ログイン試行のたびにサーバーへリクエスト。レート制限、CAPTCHA、アカウントロックアウトなどで抑止可能。ただし分散攻撃やボットネットを使うと回避されることもある。
- オフライン:ハッシュを入手した後、攻撃者は自由に膨大な試行を行える。ハッシュ関数が弱い(MD5やSHA1のまま等)、ソルト未使用、低コストなハッシュ(反復回数が低い)だと短時間で破られる。
影響の実例
辞書攻撃やそれに類する手法は、個人のアカウント乗っ取り、企業のアカウント侵害、データ漏洩の二次被害(クレデンシャルスタッフィング)につながります。特にパスワード再利用が横行していると1つの漏洩が他サービスの侵害につながりやすい点が問題です。
防御策(システム管理者向け)
- 安全なパスワードストレージ:PBKDF2、bcrypt、scrypt、Argon2(特に Argon2id)などのメモリ・計算コストを調整できる鍵導出関数を使用。生パスワードを平文で保存してはいけない。
- ソルトの利用:各パスワードにユニークな十分長のソルト(例:16バイト以上)を付与してレインボーテーブル攻撃を防ぐ。
- コストパラメータの設定:ハードウェア性能に応じて反復回数やメモリコストを上げ、攻撃コストを増大させる。
- ペッパー(Pepper):データベース外に保持するアプリケーションレベルの固定秘密(ただし運用と復旧手順に注意)。
- レート制限と遅延:ログイン試行に対してIPベース、アカウントベースのレート制限や段階的遅延を導入。
- 多要素認証(MFA):辞書攻撃でパスワードが割れても追加要素で防げる。
- 異常検知:失敗の多いアカウント、複数IPからの大量試行などを検知しアラートを出す。
- CAPTCHAやリスクベース認証:ボット対策や疑わしい試行時の追加確認。
- ハッシュアルゴリズムのアップグレード:古いアルゴリズム(MD5、SHA1等)は廃止。NISTやOWASPのガイダンスに従う。
防御策(利用者・一般ユーザー向け)
- 強固なパスワード/パスフレーズの採用:長く、推測されにくいフレーズを使用。単語1つや短いパスワードは辞書攻撃に弱い。
- パスワードマネージャの利用:各サービスでユニークかつランダムなパスワードを管理。
- MFAの有効化:可能なサービスでは必ず二段階認証を設定。
- パスワード再利用の禁止:一つの漏洩が複数サービスの侵害につながる。
- 漏洩チェック:Have I Been Pwned などで自分のメールアドレスやパスワードが過去の漏洩に含まれていないかを確認。
検出と対応(インシデント対応)
疑わしい試行や大量の失敗ログを見つけた場合、速やかに以下を検討します。
- 該当アカウントの一時ロック、パスワードリセットの強制。
- 影響範囲の調査:同一IPや同一攻撃パターンからのアクセスの追跡。
- ハッシュが漏洩している疑いがある場合は、全ユーザーにパスワード変更を促すとともに、使用ハッシュ関数の見直しと強化。
- 法的対応や通報:大規模な侵害では関係機関への通報や、必要に応じて法的措置を検討。
運用上のポイントと落とし穴
- 単純な「複雑さ」ルール(大文字・記号必須など)だけではユーザーが使い回しや予測しやすい改変(Password1! → Password2!)をしがちで、辞書攻撃に強いとは限らない。長さとランダム性を重視すること。
- アカウントロックはDoSのリスクになるため、ロックアウトの設計は慎重に(段階的遅延やCAPTCHA併用など)。
- ハッシュアルゴリズムの選択とコストパラメータは定期的に見直す。攻撃者のハードウェアも進化する。
- ポリシーはユーザーの利便性とセキュリティのバランスをとり、教育と組み合わせて運用する。
倫理と法的注意
辞書攻撃やパスワードクラッキングのツールはセキュリティ診断や研究目的で利用されることがありますが、権限のないシステムに対して試行する行為は不正アクセス禁止法などに抵触します。必ず適切な許可の下で行ってください。
まとめ
辞書攻撃は単純に見えても、実際には過去の漏洩データや人間の選択傾向を悪用することで高い成功率を誇る現実的な脅威です。組織側は適切なパスワードハッシュ化(Argon2等)、ソルトとコスト調整、レート制限、MFAの導入といった多層防御を施し、利用者には長くユニークなパスフレーズとパスワードマネージャの利用を促すことが重要です。
参考文献
- OWASP Password Storage Cheat Sheet
- OWASP Authentication Cheat Sheet
- NIST SP 800-63B — Digital Identity Guidelines: Authentication and Lifecycle
- Hashcat — Advanced Password Recovery
- John the Ripper Password Cracker
- Have I Been Pwned
- Wikipedia — Dictionary attack
- Argon2 — Password Hashing Competition winner
- Wikipedia — Rainbow table


