よく使われる単語の一覧を使ってパスワードを推測する攻撃。
辞書攻撃(ディクショナリアタック)とは、よく使われる単語の一覧を使ってパスワードを推測する攻撃のことです。"password" や "123456" のように、多くの人が安易に設定しがちな単語をあらかじめ集めた一覧(辞書)を使います。
身近な例で考えると、「みんなが使いそうな暗証番号リスト(誕生日・1234・0000など)」を用意して、当たりそうなものから試すのと同じです。全部の番号を試すのではなく、「ありがち」なものに狙いを絞るのがポイントです。
上のツールで▶ボタンを押すと、攻撃者が辞書を上から順に入力し、被害者が設定した安易な単語に一致して突破される流れを確認できます。
辞書攻撃は、事前に用意した単語リストを上から順にログインに入力するだけのシンプルな攻撃です。リストには、実際に漏洩したパスワードの統計や、辞書の単語、人名、地名などがまとめられています。
攻撃の手順は次のとおりです。
・① 辞書を用意:ありがちなパスワードの一覧を集める
・② 順に試行:辞書の単語を1つずつログインに入力する
・③ 一致で突破:被害者のパスワードが辞書にあれば、その時点でログインに成功する
さらに、単語の末尾に数字を付けたり(password1)、文字を記号に置き換えたり(p@ssw0rd)といった変形パターンを自動生成する辞書攻撃もあります。安易な単語をベースにした「ひとひねり」程度のパスワードも、見破られやすいと言えます。
辞書攻撃とブルートフォース攻撃は、どちらも「パスワードを当てる」攻撃ですが、試す候補の選び方が違います。辞書攻撃は「ありがちな単語に絞る」、ブルートフォースは「全組合せをしらみつぶし」です。
| 項目 | 辞書攻撃 | ブルートフォース |
|---|---|---|
| 試す候補 | ありがちな単語のみ | すべての組合せ |
| 試行回数 | 少ない(高速) | 膨大(低速) |
| 弱点 | 辞書にない単語は破れない | 長いと時間がかかりすぎる |
両者は「速さ」と「網羅性」がトレードオフ(あちらを立てればこちらが立たず)の関係です。実際の攻撃では、まず辞書攻撃で手早く試し、ダメならブルートフォースに切り替える、と組み合わせることもあります。いずれにせよ、辞書にない長く複雑な文字列をパスワードにすれば、どちらの攻撃も効きにくくなります。上のツールで両者の候補の数の違いを見比べてみてください。
辞書攻撃が有効なのは、現実に多くの人が安易なパスワードを使っているからです。「password」「123456」「生年月日」のような単純なものを設定する人が多いため、辞書に載った数千〜数万の候補だけでも、かなりの確率でパスワードを当てられます。
なぜ人は安易なパスワードを選んでしまうのかというと、「覚えやすさ」と「安全性」はトレードオフ(あちらを立てればこちらが立たず)の関係にあるからです。覚えやすいパスワードは、攻撃者にも「思いつきやすい」パスワードでもあります。
・辞書に載りやすい例:単純な数字の並び・よく使われる英単語・自分の名前や誕生日
・辞書に載りにくい例:意味のないランダムな文字と記号の組み合わせ(例:tR7$wq2!)
身近な例で考えると、鍵の番号が「0000」や「1234」のロッカーは真っ先に試されるのと同じです。「まさか当たらないだろう」という感覚が、実は攻撃者が一番先に狙うところです。だからこそ、ありがちな単語を避けることが最も基本的な防御策になります。
辞書攻撃から身を守るには、辞書に載らないパスワードを作ることが基本です。辞書に載らないとは、「よく使われる単語や並びではない」ということです。
強いパスワードを作るポイントは次のとおりです。
・長くする:文字数が増えるほど候補が爆発的に増え、攻撃に時間がかかる
・複雑にする:大文字・小文字・数字・記号を混ぜると辞書に載りにくくなる
・意味のある単語を避ける:人名・誕生日・英単語はそのまま辞書に載っている
また、同じパスワードを複数のサービスで使い回さないことも重要です。1つのサービスでパスワードが漏れると、他のサービスでも同じパスワードが通じてしまうからです(=パスワードリスト攻撃といいます)。パスワード管理ツールを使えば、複雑なパスワードを覚えずに使い分けられます。