「8文字以上、大文字・小文字・数字を含むこと」——多くのサービスで見かけるパスワード要件ですが、これを満たしただけのパスワードは本当に安全なのでしょうか?現代のコンピュータはどれほど速くパスワードを解読できるのか?なぜセキュリティ専門家は「複雑さより長さが大事」と言うのか?本記事では「どう守るか」ではなく、「どう攻撃されるか」という視点から解説します。攻撃の仕組みを理解することが、真に破られにくいパスワードを設計する第一歩です。
1. パスワード保存の真実:あなたのパスワードは平文で保存されていない
攻撃方法の説明の前に、重要な前提を確認しておきます。適切に設計されたシステムは、パスワードをそのまま保存しません。保存されるのはハッシュ値です。
パスワードを設定すると、システムはそれをハッシュ関数(bcrypt や SHA-256 など)にかけ、固定長の文字列を生成してそれを保存します。次回ログイン時には、入力されたパスワードを再度ハッシュして保存値と照合し、一致すれば認証成功です。
つまりデータベースが盗まれても、攻撃者が手に入れるのはハッシュ値だけであり、元のパスワードではありません。問題は:ハッシュ値から元のパスワードを逆算できるのか、ということです。
ニュースで「パスワードが流出した」と報道される場合、通常は二つのケースがあります。一つは、サイトがパスワードを平文で保存していた(論外な設計ミス)。もう一つは、ハッシュ値のデータベースが盗まれ、攻撃者がさまざまな手法で解読を試みている——これが本記事のテーマです。
2. 主要な3種類のパスワード攻撃手法
2.1 ブルートフォース攻撃(Brute-Force Attack)
最もシンプルな手法:すべての可能な組み合わせを順番に試すだけです。工夫は不要、純粋な総当たりです。
現代の GPU は毎秒数十億回のハッシュ計算が可能で、短いパスワードはこの計算能力の前ではほとんど無力です:
| 文字数 | 小文字のみ(26文字) | 英数大小(62文字) | 解読時間の目安 |
|---|---|---|---|
| 6文字 | 26⁶ ≈ 3億 | 62⁶ ≈ 570億 | 数秒〜数分 |
| 8文字 | 26⁸ ≈ 2,090億 | 62⁸ ≈ 218兆 | 数時間〜数日 |
| 12文字 | 26¹² ≈ 9.5×10¹⁶ | 62¹² ≈ 3.2×10²¹ | 数百年(現実的に不可能) |
重要な結論:パスワードの強度に対する影響は、複雑さより長さの方がはるかに大きいのです。8文字から12文字にするだけで、組み合わせ数は100万倍以上になります。
2.2 辞書攻撃(Dictionary Attack)
ブルートフォースはパスワードが完全にランダムであることを前提としていますが、人間は意味のある単語や覚えやすいパターンを使いがちです。辞書攻撃はこの弱点を突きます:あらかじめ準備した単語リスト(辞書)で順番に試すのです。
典型的な辞書には以下が含まれます:
- 世界で最もよく使われるパスワード(password、123456、qwerty…)
- 一般的な英単語とその変形(love → l0ve、lov3)
- 人名・地名・ブランド名
- 過去の大規模流出データベース(数十億件の実際のパスワード)
辞書攻撃はブルートフォースより圧倒的に速く、多くの人のパスワードは数秒で見つかります。
2.3 レインボーテーブル(Rainbow Table)
レインボーテーブルは事前計算を利用した攻撃ツールです:数十億個のパスワードのハッシュ値を事前に計算してテーブルとして保存し、攻撃時はリアルタイム計算なしに検索するだけです。
攻撃者がソルトなし(次の説明を参照)の MD5 ハッシュのデータベースを入手した場合、レインボーテーブルを使えばほぼ瞬時に元のパスワードを特定できます。
現代のパスワードシステムは、ハッシュを計算する際にランダムな文字列(「ソルト」)を付加します。これにより、同じパスワードを使っていても各アカウントのハッシュ値が異なります。ソルトが加わると、特定のソルトに対応するレインボーテーブルは事前に作成されていないため、この攻撃手法が無効化されます。これが bcrypt や Argon2 が MD5 より安全な主な理由です。
3. エントロピー:パスワード強度を数値で表す
エントロピーは情報理論の概念で、暗号学においてはパスワードの「予測不可能性」を数値化します。エントロピーが高いほど、推測が困難で安全なパスワードです。
計算式:エントロピー = log₂(文字集合のサイズパスワードの長さ)
ビット単位で表すと:
- 小文字のみ(26種)、8文字:log₂(26⁸) ≈ 37.6 bits
- 英数大小(62種)、8文字:log₂(62⁸) ≈ 47.6 bits
- ASCII印刷可能文字(94種)、12文字:log₂(94¹²) ≈ 78.7 bits
- ランダム4単語のパスフレーズ(7,776語から選択):log₂(7776⁴) ≈ 51.7 bits
目安:一般的なアカウントで最低 50 bits、銀行やメールなど重要なアカウントは 80 bits 以上が推奨されます。
4. よくあるパスワードの誤解
誤解1:「文字を記号に置き換えれば(a→@、e→3)より安全になる」
そうとは限りません。辞書攻撃のリストにはこのような「1337スピーク」変形も含まれています。p@ssw0rd はすでに主要な辞書に掲載されており、password とほとんど変わりません。
誤解2:「定期的にパスワードを変更すれば安全性が上がる」
この考え方は時代遅れです。定期的な変更を強制されたユーザーは予測可能なパターン(Password1 → Password2)に頼りがちになることが研究で判明しています。大切なのは頻繁に弱いパスワードに変えることではなく、最初から十分に強いパスワードを設定することです。
誤解3:「大文字・小文字・数字・記号が必要」
複雑さは有効ですが、長さほどの効果はありません。4つのランダムな英単語を組み合わせた correct-horse-battery-staple は 50 bits 以上のエントロピーを持ち、多くの「複雑な」8文字パスワードより安全で、しかも覚えやすいのです。
5. 強いパスワードを作る原則
5.1 長さを最優先にする
最低12文字、できれば16文字以上。長さはブルートフォースの解読時間を指数関数的に増加させます——1文字追加するごとに、試すべき組み合わせが文字集合のサイズ分だけ掛け算で増えます。
5.2 複雑さより真のランダム性が重要
Tr0ub4dor&3 より xkz7!qPm2vLn の方が安全です。前者は人間が予測しやすい置換パターンに従っているからです。パスワードジェネレーターを使えば、人間の脳では生み出せない真のランダム性を得られます。
5.3 アカウントごとに異なるパスワードを使う
パスワードの使い回し(リユース)は最もよく悪用される脆弱性の一つです。あるサービスが侵害されると、攻撃者は同じ認証情報を他のサービスに試します(「クレデンシャルスタッフィング攻撃」)。アカウントごとに異なるパスワードを使えば、被害を一箇所に限定できます。
5.4 パスワードマネージャーを活用する
「アカウントごとに独立」かつ「十分に長くランダム」を同時に実現できる唯一の現実的な方法は、パスワードマネージャーの使用です。覚えるのは強力なマスターパスワード1つだけで、あとはソフトウェアが管理します。
6. よくある質問
ブルートフォースで解読されていないのに、なぜパスワードが流出するの?
流出経路は解読だけではありません。最も多いのは:フィッシング(偽サイトでパスワードを入力させる)、平文での保存(設計ミス)、キーロガーなどのマルウェア感染です。強いパスワードは「推測・解読」系の攻撃に対してのみ有効で、ソーシャルエンジニアリングやマルウェアには別の対策が必要です。
2段階認証(2FA)を設定していれば、パスワードの強度は関係ない?
いいえ、依然として重要です。2FA は強力な追加防御ですが万全ではありません。SIMスワップ攻撃やリアルタイムフィッシングなどで2FAを回避されるケースもあります。強いパスワード+2FAの組み合わせが最善策であり、どちらか一方だけでは不十分です。
7. まとめ
パスワードセキュリティの本質は「攻撃者が正しいパスワードを見つけるのに要する時間・コストが、その動機を上回るようにすること」です:
- 長さが最も効果的な防御:1文字追加するだけで解読時間が指数関数的に増える
- ランダム性が複雑なルールに勝る:人間の脳ではなくコンピュータに決めさせる
- アカウントごとに独立したパスワード:一箇所が流出しても被害を局限できる
- 強いパスワード+2FAの二重防護:二つの防御線は一つより格段に強い
ランダムなパスワードジェネレーターを使えば、「十分な長さ」と「十分なランダム性」を一度に解決できます。強いパスワード作りの最も手軽な出発点です。