辞書攻撃を理解する方法
パスワード認証について話すのは少々退屈ですが、データ侵害が頻繁に発生している現状では特に重要です。サイトがハッキングされ、ユーザー情報、特にユーザー名とパスワードが漏洩したという警告を見たことがあるでしょう。これは大きな問題です。なぜなら、情報が平文で保存されている場合、データベースにアクセスできる人なら誰でも簡単に認証情報を入手して使用できるからです。これは決して理想的な状況ではありません。ですから、実際に舞台裏で何が起こっているかを理解することは、ログインシステムをより安全にしたり、少なくとも自分のアカウントをより適切に保護する方法を知るのに役立ちます。
要点は、優れたセキュリティ対策では、パスワード実際のパスワードではなく、ハッシュ化されたパスワードを保存することが推奨されているということです。ハッシュ化は、パスワードを一方通行の道路に流すようなものです。ハッシュは得られますが、元のパスワードを簡単に取り戻すことはできません。誰かがログインすると、システムは入力した内容をハッシュ化し、保存されているハッシュと比較します。一致すれば、パスワードは正しいと判断されます。それでも、ハッカーがデータベースに侵入できたとしても、ハッシュしか見ることができず、ハッシュは解読されない限りほとんど役に立ちません。しかし、ここで問題があります。ハッシュは完全に解読不可能というわけではなく、特に適切にハッシュ化されていない場合や弱いアルゴリズムが使用されている場合はなおさらです。そのため、パスワードをどのようにハッシュするか、そして攻撃者側でハッシュを解読しようとするかどうかが、非常に重要になります。
賢くパスワードハッシュを解読する
ハッシュの解読は少々奇妙なものです。なぜなら、技術的にはハッシュを元のパスワードに直接逆引きすることはできないからです。攻撃者は、ハッシュが保存されているパスワードと一致するまでパスワードを推測しようとします。基本的には、鍵を開けられるまであらゆるキーを試すようなものです。これは総当たり攻撃とも言えます。「a」から「zzz」まで、数字や記号を含むあらゆる種類のパスワードを試すのです。パスワードの長さが長くなるにつれて、考えられる組み合わせは指数関数的に増加するため、総当たり攻撃で長く複雑なパスワードを解読するのは非常に時間がかかります。GPUは処理速度の向上に役立ちますが、それでも非常に長いパスワードは依然としてかなり安全です。
推測時間を短縮するため、攻撃者はサイトのパスワードルールをよく確認します。サイトが最小文字数を設定していたり、数字と大文字の組み合わせを要求していたりする場合、「password」を試さずに、そのルールに合う一般的なパスワードをすぐに試します。しかし、ブルートフォース攻撃は、特に強力なパスワードの場合、攻撃に時間がかかります。攻撃者は辞書攻撃という別の手法も使います。すべてを試すのではなく、一般的なパスワードのリストを使用します。よりスマートな方法と考えてください。辞書と呼ばれるこれらのリストは、漏洩したパスワードから作成されているため、「password123」、「qwerty」、「letmein」などが含まれていることがよくあります。もしあなたのパスワードがこれらのリストに含まれているなら、おそらく破られるでしょう。
辞書攻撃の成功率を高める手法の一つに、単語マングリング(単語のマングリング)があります。これは、文字を記号に置き換えたり(例えば「e」を「3」に置き換えたり)、末尾に数字を追加したり、文字を並べ替えたりすることです。こうした小さな変更によって、成功率は70%以上、場合によっては90%を超えることもあります。特に、攻撃者がマングリングアルゴリズムを組み込んだ高性能な辞書を使用している場合はなおさらです。つまり、パスワードが単純な単語やフレーズで構成されている場合は、脆弱である可能性があります。これらの手法は、パスワードを解読するためのチートコードのようなものです。
知識に基づいた推測をする
ここでユーザーの習慣が影響します。ユーザーは複数のサイトでパスワードを使い回す傾向があり、ペット、誕生日、好きなスポーツ、あるいは「password」のような一般的な単語など、生活に関連したものを選ぶことがよくあります。攻撃者は、一般的なパスワードの膨大なリストや侵害事例を利用して辞書を構築することで、この状況を悪用します。これは非常に不安なことですが、典型的なパターンに従っていたり、リストに載っていたりするパスワードは、ほとんどが推測可能です。だからこそ、予測不可能で個人情報に結びつかないパスワードを作成することが重要です。
文字を数字や記号に置き換えるなど、バリエーションを加えるのは定番の手法です。例えば、「password」は「p@ssw0rd!」などになります。こうしたわずかな変更によって、従来の辞書攻撃による解読は難しくなりますが、不可能ではありません。長さと予測不可能性を組み合わせるのが最善です。10文字以上のパスワードにランダムな単語(実際のフレーズではなく、無関係な単語を寄せ集めたようなもの)を組み合わせるのが良い目安です。基本的には、リストに載らないような、できれば長くて完全にランダムな単語を目指しましょう。なぜなら、結局のところ、長くて複雑であればあるほど、簡単に解読される可能性は低くなるからです。
結論
要点は?辞書攻撃は、標的を絞るという点で、ブルートフォース攻撃よりも巧妙だということです。過去の漏洩情報やよく使われるパスワードリストから推測した情報を入力とするため、パスワードがリストに載っていたり、予測可能なパターンに従っていたりする場合、攻撃の速度と効果はより高くなります。自分自身を守るためには、よく使われるパスワードのデータベースに載っていない、長くて関連性のないパスワードを作成する必要があります。パスワードマネージャーを使えば、サイトごとに複雑で固有のパスワードを生成・保存できるため、パスワードマネージャーを使うことで、すべてのパスワードを覚えておく必要がなくなります。
さらに、サイトのセキュリティ設定を必ず二重チェックしてください。2要素認証が利用可能な場合は使用し、時代遅れのMD5やSHA-1ではなく、bcryptやArgon2などのパスワード用のハッシュアルゴリズムの使用を検討してください。もちろん、Windowsは必要以上にセキュリティを高く設定しなければならない場合もありますが、ユーザー側では、賢いパスワードと適切なセキュリティ対策が大きな違いを生む可能性があります。
まとめ
- パスワードは、強力で低速なアルゴリズム (bcrypt など) を使用してハッシュする必要があります。
- 可能であれば 10 文字以上の、長くて関連性のない複雑なパスワードを使用してください。
- 辞書に載っているような一般的な単語やフレーズに固執するのは避けてください。
- パスワード マネージャーを活用して、複雑なパスワードを生成し、保存します。
- 利用可能な場合は 2 要素認証を有効にして、セキュリティをさらに強化します。
まとめ
パスワードの解読が見た目ほど簡単ではない理由、そして良い習慣がなぜ重要なのか、少しでも理解していただけたら幸いです。結局のところ、重要なのは、攻撃者が飽きたり、別の攻撃に移ったりするほど、攻撃を困難にすることです。これはいくつかの環境で効果があった方法の一つです。少しでも役に立ち、将来誰かの頭痛の種から救ってくれることを願っています。