ブルートフォース攻撃
パスワードや暗号の鍵として考えられる組み合わせを、すべて順番に試して、正解を見つけ出す攻撃。総当たり攻撃ともいう。
イマシルちゃんの解説
4桁の数字のダイヤル錠なら、0000から9999まで、1万通りを全部試せば必ず開くよね。
ブルートフォース攻撃は、この「全部試す」作戦なんだ。
とても単純だけど、時間さえかければいつかは必ず当たっちゃう。
だから、パスワードを長くして、試す組み合わせの数をうんと増やすことが大事なんだよ!
より深い解説
定義
ブルートフォース攻撃(総当たり攻撃)は、パスワードや暗号鍵の候補を、可能な組み合わせのすべてにわたって順に試す攻撃である。理論上は必ず成功するため、防御側は、試行にかかる時間を現実的でないほど長くすることで対抗する。
組み合わせの数
試す必要がある組み合わせの数は、「使える文字の種類」の「長さ」乗である。
組み合わせの数 = (文字の種類)^(長さ)
| 使える文字 | 種類 | 8文字の組み合わせの数 |
|---|---|---|
| 数字 | 10 | 10^8 = 1億 |
| 英小文字 | 26 | 26^8 ≒ 2,088億 |
| 英大小文字+数字 | 62 | 62^8 ≒ 218兆 |
文字の種類を増やすより、長さを増やすほうが、組み合わせの数は大きく増える。
オンライン攻撃とオフライン攻撃
| 種類 | 内容 | 主な対策 |
|---|---|---|
| オンライン攻撃 | ログイン画面などに、実際にパスワードを入力して試す | 試行回数の制限、アカウントロック、多要素認証 |
| オフライン攻撃 | 盗んだパスワードのハッシュ値に対して、手元のコンピュータで試す | ソルトと、計算に時間のかかるハッシュ関数(bcrypt、Argon2など)の使用 |
オフライン攻撃では、サーバ側の回数制限が効かず、GPUなどで高速に試せる。パスワードをハッシュ化して保存する際は、ソルト(利用者ごとのランダムな値)を加え、あえて計算に時間がかかる方式を使う。
派生した攻撃
| 攻撃 | 内容 |
|---|---|
| 辞書攻撃 | すべての組み合わせではなく、辞書の単語やよく使われるパスワードだけを試す |
| リバースブルートフォース攻撃 | パスワードを固定し、利用者IDのほうを変えて試す |
| パスワードスプレー攻撃 | 少数のよく使われるパスワードを、多数のアカウントに、時間を空けて試す |
| パスワードリスト攻撃 | 流出したIDとパスワードの組をそのまま試す |
アカウントロックの注意点
一定回数ログインに失敗したアカウントを使えなくするアカウントロックは、ブルートフォース攻撃に有効である。ただし、次の点に注意が必要である。
- 攻撃者がわざと失敗を繰り返すと、正規の利用者がログインできなくなる(サービス妨害に悪用される)
- 1つのアカウントへの試行回数が少ないリバースブルートフォース攻撃やパスワードリスト攻撃には効かない
そのため、ロックの時間を一定時間で解除する、IPアドレス単位で制限する、多要素認証と組み合わせる、といった工夫が行われる。