何らかの手段でパスワードを解析・推測して破る行為。
パスワードクラックとは、何らかの手段でパスワード(=本人だけが知っている合言葉)を解析・推測して破る行為のことです。正しい合言葉を持っていない第三者が、不正に他人のアカウントへ侵入するために行います。
身近な例で考えると、ダイヤル式の南京錠を、番号を片端から回して開けようとする泥棒に似ています。0000、0001、0002…と順に試したり、「誕生日かもしれない」と当たりをつけて試したりするのが、まさにパスワードクラックの考え方です。
上の図解では、攻撃者がパスワードを破るための代表的な3つのやり方(総当たり・辞書・リスト)を示しています。どの手法も「正しいパスワードを当てるまで試行を繰り返す」という点は共通しています。
パスワードクラックには、試し方の違いによっていくつかの代表的な手法があります。
| 手法 | 試す内容 | 特徴 |
|---|---|---|
| 総当たり攻撃 | あらゆる文字の組み合わせ | 時間はかかるが必ず当たる |
| 辞書攻撃 | よく使われる単語・既知のPW | 効率がよく短時間で当たることも |
| パスワードリスト攻撃 | 他で流出したID/PWの一覧 | 使い回しがあると一発で突破 |
それぞれの手法を整理すると、次のようになります。
・総当たり攻撃(ブルートフォース):aaa → aab → aac... のように考えられる組み合わせを片端からすべて試す。文字数が長いほど組み合わせが爆発的に増え、突破に時間がかかります。
・辞書攻撃:password や 123456 のような、人がよく使う単語をまとめた「辞書」を順に試す。安易なパスワードはあっという間に破られます。
・パスワードリスト攻撃:別のサイトから流出したID・パスワードの一覧(リスト)を、そのまま別のサイトで試す。同じパスワードを使い回していると一発で突破されます。
図書館で本を探すことに例えると、総当たりは端の棚から1冊ずつ全部めくる方法、辞書は「人気の本リスト」から探す方法、リストは「隣の図書館の貸出履歴」をそのまま使う方法、とイメージすると違いが掴みやすいです。
対策の基本は、「パスワードを破られにくくする」ことと、「攻撃者に何度も試させない」ことの2方向から考えます。
利用者ができる主な対策は次のとおりです。
・パスワードを長く複雑にする:文字数を増やし、英大文字・小文字・数字・記号を混ぜると、総当たりに必要な時間が一気に伸びます。
・推測されやすい単語を避ける:誕生日・名前・password のような単語は辞書攻撃で真っ先に試されます。
・パスワードを使い回さない:サイトごとに違うパスワードにすれば、1つ流出してもリスト攻撃で芋づる式にやられません。
サービス側(システム側)の対策としては、一定回数ログインに失敗したらアカウントを一時ロックする仕組みや、パスワードに加えてもう一つの確認(スマホへのコードなど)を求める多要素認証(=複数の方法で本人確認する仕組み)が有効です。これらは「何度も試させない」「破られても突破させない」ための守りになります。
なぜ長く複雑なパスワードが安全なのかというと、攻撃者が全パターンを試す回数が天文学的な数になるからです。これを「組み合わせ数の爆発」と呼びます。
文字の種類と桁数から「考えられる組み合わせの総数」を計算できます。
・数字4桁:10^4 = 10,000通り(0000〜9999)
・英小文字6文字:26^6 = 約3億通り
・英大小文字8文字:52^8 = 約53兆通り
・英大小+数字+記号12文字:94^12 = 約47,500兆兆通り
1秒間に10億回試せる高性能なコンピュータでも、94種類×12文字のパスワードをすべて試し終えるには現実には何百万年もかかる計算になります。つまり「長さと複雑さ」は攻撃に必要な時間を直接増やす手段であり、桁数を1つ増やすだけで試行回数が「文字の種類」分だけ掛け算で膨らむのです。
身近な例で考えると、ダイヤル錠が4桁(0〜9)なら1万回試せば必ず開きますが、桁を10桁にすると100億回必要になります。同じ理屈でパスワードの長さが安全につながっています。
多くのサービスでは、パスワードをそのままの文字列(=平文)で保存していません。ハッシュ化(=元に戻せない一方向の計算で文字列を変換すること)という処理を行い、変換後の値だけを保存しています。
なぜハッシュ化するのかというと、サーバに侵入されてもパスワードそのものが漏れないようにするためです。同じ入力に対しては必ず同じハッシュ値が生成されるため、ログイン時には「入力されたパスワードをハッシュ化した値」と「保存されているハッシュ値」を比較するだけで確認できます。
ところが攻撃者はハッシュ値が手に入ると、大量の候補パスワードを同じようにハッシュ化して比較する方法でクラックしようとします。これをオフラインクラックと呼び、次のような手法があります。
・辞書・総当たりのオフライン版:候補をハッシュ化して照合を繰り返す(ログイン試行制限が無意味になる)
・レインボーテーブル攻撃:あらかじめ大量のパスワードとそのハッシュ値を対応させた表(=レインボーテーブル)を使って素早く照合する
これを防ぐためにサービス側はソルト(=ハッシュ化の前にパスワードに追加するランダムな値)を加えてハッシュを計算します。こうすると同じパスワードでも人によって異なるハッシュ値になり、レインボーテーブルが使えなくなります。パスワードを長く複雑にすることと、サービス側のソルト付きハッシュ化は、互いを補う二重の守りになります。