ブルートフォースとは?総当たりの仕組み・攻撃手法・対策をわかりやすく解説

ブルートフォースとは?総当たりの仕組み・攻撃手法・対策をわかりやすく解説

AIの初心者

「ブルートフォース」とは、どのような方法ですか?

AI専門家

考えられる候補を一つずつ試す「総当たり」のことだよ。4桁の暗証番号なら、0000から9999まで順に確認するイメージだね。

AIの初心者

単純ですが、候補が多いと時間がかかりそうですね。

AI専門家

その通り。探索アルゴリズムとして役立つ一方、認証情報を不正に探る目的で使われると「ブルートフォース攻撃」になる。仕組みと防ぎ方を分けて見ていこう。

ブルートフォースとは。

考えられる候補を網羅的に試し、条件を満たす答えを探す方法です。日本語では「総当たり」、アルゴリズムの文脈では「力任せ探索」とも呼ばれます。小さな問題には有効ですが、候補が増えると必要な時間と計算量が急激に大きくなります。

候補を順番に確認するブルートフォースの概念図

ブルートフォースとは?総当たり・力任せ探索との関係

ブルートフォース(brute force)は、直訳すると「力ずく」です。問題を解くときに巧妙な近道を探すのではなく、候補を順番に検証します。たとえば、4桁の暗証番号、数独の空欄、短い経路候補など、答えの候補が有限なら、全候補を調べることで正解を見つけられます。

ただし、ブルートフォースという言葉自体は攻撃だけを意味しません。プログラミングでは、正解を漏らさず探す基本的な探索手法です。一方、他人のアカウントに対してパスワード候補を試す行為はブルートフォース攻撃であり、正当な利用とは明確に区別する必要があります。

「必ず正解にたどり着く」という説明にも条件があります。候補集合が有限で、正解を判定でき、すべてを試すだけの時間と計算資源がある場合に限られます。現実には候補が多すぎて、終了を待てないことも珍しくありません。

ブルートフォースの仕組みと検索空間

\(N=k^L\)

候補の総数を「検索空間」と呼びます。使用できる文字・数字の種類を \(k\)、長さを \(L\) とすると、固定長の組み合わせ数 \(N\) は、一般に \(N=k^L\) で表せます。文字種が増える場合も、長さが増える場合も、候補数は掛け算で膨らみます。

桁数が増えると検索空間が急増する様子

条件 組み合わせ数 1回1秒で全候補を確認する時間
数字4桁 1万通り 約2時間47分
数字8桁 1億通り 約3年2か月

正解の位置がランダムなら、平均では全候補のおよそ半分を試すことになります。ただし、実際の試行速度は、ネットワーク遅延、試行制限、認証方式、計算機性能などで大きく変わります。「何文字なら何秒で破られる」と一律には言えません。

特に重要なのが、オンライン試行とオフライン試行の違いです。ログイン画面へ試すオンライン攻撃は、サービス側が速度を制限できます。対して、認証情報の検証データが漏えいし、攻撃者の手元で候補を照合されるオフライン攻撃では、サービス側のログイン制限が効きません。保存時の安全なハッシュ処理が重要になる理由です。

メリット・デメリットと使いどころ

ブルートフォースの利点は、考え方と実装が比較的わかりやすく、候補を網羅できることです。小さな入力なら十分に実用的で、より高度なアルゴリズムの正しさを確かめる「基準解」としても使えます。

観点 内容
メリット 実装しやすい、候補の見落としを抑えられる、小規模なら確実性が高い
デメリット 入力が増えると時間・メモリ・電力などの計算資源を大量に消費する
向いている場面 候補が少ない問題、テスト用の基準解、他の解法を考える前の規模確認
改善方法 条件に合わない枝を早めに捨てる枝刈り、動的計画法、ヒューリスティックなど

数独なら、数字を仮置きしてルール違反が判明した時点で戻る「バックトラッキング」を使うと、明らかに不要な候補を省けます。総当たりを土台にしながら、問題の制約を利用して探索範囲を狭める考え方です。

代表的なブルートフォース攻撃と関連手法の違い

認証を狙う攻撃は、どの候補を、どのアカウントへ試すかで分類できます。似た言葉が多いため、次の違いを押さえると整理しやすくなります。

ブルートフォース攻撃と関連手法の違いを示す概念図

手法 候補と対象の関係 狙われやすい状況
単純な総当たり攻撃 1つのアカウントへ多数の候補を試す 短い・推測しやすい認証情報、試行制限が弱い
辞書攻撃 よく使われる語や既知の候補リストを試す 一般的な単語や単純な規則で作られたパスワード
リバースブルートフォース 少数のパスワード候補を多数のアカウントへ試す 利用者名が予測でき、共通の弱いパスワードがある
パスワードスプレー 少数の頻出候補を多数のアカウントへ間隔を空けて試す アカウント単位のロックだけに頼っている
クレデンシャルスタッフィング 他所から漏えいしたIDとパスワードの組を別サービスで試す 同じパスワードを複数サービスで使い回している

辞書攻撃やクレデンシャルスタッフィングは、全組み合わせを機械的に作る純粋な総当たりとは異なります。しかし、認証情報を繰り返し試すという点で、ブルートフォース系の脅威として一緒に扱われることがあります。

利用者ができるブルートフォース対策

利用者側では、長く、サービスごとに異なるパスワードを使うことが基本です。単に記号を1つ足すより、十分な長さを確保すると検索空間を大きくできます。複数の認証情報を安全に管理するには、信頼できるパスワードマネージャーの利用が現実的です。

  • サービスごとに固有の、長いパスワードまたはパスフレーズを使う
  • 多要素認証を有効にし、可能ならフィッシング耐性も考慮した認証方式やパスキーを選ぶ
  • 漏えいの通知を受けた場合は、対象の認証情報を速やかに変更する
  • 同じパスワードを使い回さず、初期設定の認証情報を放置しない

定期変更だけを機械的に繰り返すと、覚えやすい似たパスワードへ寄りやすくなります。変更回数よりも、使い回しを避け、漏えいや不正利用の兆候があるときに確実に更新することが重要です。

システム管理者が行うブルートフォース対策

システム側は、1つの防御だけに頼らず、試行を遅らせる仕組み、認証を強くする仕組み、異常を検知する仕組みを組み合わせます。

ブルートフォース攻撃を防ぐ多層防御の概念図

  • アカウント、接続元、端末、時間帯など複数の観点で試行頻度を制限する
  • 失敗回数に応じた待ち時間や一時停止を設け、正規利用者への妨害にも配慮する
  • 多要素認証やパスキーを導入し、パスワードだけに依存しない
  • 異常な失敗率、広範なアカウントへの試行、普段と異なる接続を監視する
  • パスワードを平文で保存せず、用途に適したソルト付きの安全なパスワードハッシュを使う
  • 初期パスワードの変更、漏えい済みパスワードの拒否、利用者への通知を整備する

CAPTCHAは自動試行を減らす補助策ですが、単独では十分ではありません。また、固定的で厳しすぎるアカウントロックは、第三者が意図的にロックを発生させる妨害にも使えます。段階的な遅延やリスクベース認証と組み合わせ、正規利用者の復旧手段も用意します。

ブルートフォースを学習・実務で安全に扱うには

ブルートフォースは、アルゴリズム学習では重要な基礎です。小規模な最適化問題、パズル、テストデータでの正解確認などに使うと、候補生成、判定、計算量の考え方を身につけられます。

パズルやテストなどブルートフォースの安全な利用場面

一方、認証試行の検証は、自分が所有する環境、または明示的な許可を得た検証環境だけで行ってください。学習目的でも、第三者のサービスやアカウントへ試す行為は、不正アクセスやサービス妨害につながるおそれがあります。

実務では、まず入力規模を見積もり、総当たりで現実的な時間に収まるか確認します。収まらない場合は、枝刈り、問題固有の規則、近似法などで候補を減らします。この規模見積もりこそ、ブルートフォースを理解する大きな価値です。

まとめ

ブルートフォースは、考えられる候補を順番に試す総当たり・力任せ探索です。単純で網羅性が高い一方、検索空間が増えると計算量が急増します。アルゴリズムとしては小規模問題や基準解に役立ちますが、認証情報へ不正に使われるとブルートフォース攻撃になります。

利用者は長く固有の認証情報、多要素認証、パスキーなどを活用し、管理者は試行制限、監視、安全な認証情報の保存を組み合わせることが重要です。仕組みと限界を理解し、正当な環境で安全に扱いましょう。

更新履歴

日付 内容
2025年2月1日 初回公開
2026年7月19日 検索空間の式と攻撃手法の比較を補い、多層防御の要点を更新