認証・パスワード
ブルートフォース攻撃
約 4 分で読めます
最終更新: 2026-01-28
ブルートフォース攻撃とは
ブルートフォース攻撃 (総当たり攻撃) とは、パスワードや暗号鍵のあらゆる組み合わせを 1 つずつ試行し、正解を見つけ出す攻撃手法です。「brute force (力ずく)」の名のとおり、知的な推測ではなく計算能力に物を言わせる原始的だが確実な方法です。
理論上、十分な時間と計算資源があればどんなパスワードも解読できますが、パスワードの長さと複雑さに応じて必要な時間は指数関数的に増大します。現代の GPU を使えば、8 文字の英数字パスワードは数時間で解読可能ですが、12 文字以上のランダムなパスワードは現実的な時間内での解読が困難です。
パスワード長と解読時間の目安
パスワードの文字種と長さによる解読時間の目安を示します (最新の GPU クラスタを使用した場合の推定値)。
- 6 文字 (英小文字のみ): 数秒以内
- 8 文字 (英大小文字 + 数字): 約 1 時間
- 8 文字 (英大小文字 + 数字 + 記号): 約 8 時間
- 10 文字 (英大小文字 + 数字 + 記号): 約 5 年
- 12 文字 (英大小文字 + 数字 + 記号): 約 3 万 4 千年
- 16 文字 (英大小文字 + 数字 + 記号): 事実上解読不可能
この数値は純粋な総当たりの場合であり、辞書攻撃やルールベース攻撃を組み合わせると、辞書に含まれる単語やよくあるパターン (末尾に数字を付ける、先頭を大文字にするなど) は桁違いに速く解読されます。パスワードマネージャーで生成したランダムな文字列を使うことが最善の対策です。
ブルートフォースの派生手法
純粋な総当たり以外にも、効率を高めた派生手法が存在します。
- 辞書攻撃: 辞書に載っている単語やよく使われるパスワードのリストを優先的に試行する。「password」「123456」「qwerty」などの頻出パスワードは瞬時に突破される
- ルールベース攻撃: 辞書の単語に変換ルール (先頭大文字化、末尾に数字追加、l を 1 に置換など) を適用して試行する。「Password1」「p@ssw0rd」のような変形パターンに有効
- レインボーテーブル攻撃: 事前に計算したハッシュ値のテーブルを使い、ハッシュ値からパスワードを逆引きする。ソルト (ランダムな付加データ) を使用したハッシュには無効
- リバースブルートフォース: 1 つのパスワード (例: 「123456」) を大量のアカウントに対して試行する。クレデンシャルスタッフィングと類似するが、漏洩データではなく推測パスワードを使う点が異なる
効果的な防御策
ブルートフォース攻撃への防御は、ユーザー側とシステム側の両面で対策を講じます。
ユーザー側
- 12 文字以上のランダムなパスワード: パスワードマネージャーで生成した英大小文字・数字・記号を含むランダムな文字列を使用する
- 二要素認証の有効化: パスワードが解読されても、第 2 の認証要素で不正ログインを阻止できる
- パスフレーズの活用: ランダムな単語を 4 - 5 個組み合わせたパスフレーズ (例: 「correct horse battery staple」) は、記憶しやすく十分な長さを確保できる
システム側
- アカウントロックアウト: 一定回数のログイン失敗でアカウントを一時的にロックする。ただし、DoS 攻撃に悪用される可能性があるため、ロック時間を段階的に延長する設計が望ましい
- レート制限: IP アドレスやセッション単位でログイン試行回数を制限する
- CAPTCHA: 複数回の失敗後に CAPTCHA を表示し、自動化ツールによる試行を抑制する
- 適切なハッシュアルゴリズム: bcrypt、scrypt、Argon2 など、意図的に計算コストを高くしたハッシュ関数を使用し、オフラインでの解読速度を低下させる
- WAF の導入: Web アプリケーションファイアウォールで異常なログインパターンを検知・遮断する
よくある誤解
- 複雑なパスワードなら短くても安全
- 記号を含む 8 文字のパスワードでも、最新の GPU クラスタなら数時間で解読可能。パスワードの強度は長さが最も重要な要素であり、12 文字以上を推奨する。短くて複雑なパスワードより、長くてランダムなパスワードの方が安全。
- ブルートフォース攻撃は時代遅れで現実的な脅威ではない
- GPU の性能向上により、ブルートフォースの実行速度は年々高速化している。また、漏洩したパスワードハッシュに対するオフラインブルートフォースは、レート制限やアカウントロックアウトの影響を受けないため、依然として深刻な脅威。