パスワード強度を徹底解説:ブルートフォース・レインボーテーブル・エントロピーとは?

「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 ハッシュのデータベースを入手した場合、レインボーテーブルを使えばほぼ瞬時に元のパスワードを特定できます。

ソルト(Salting)がレインボーテーブルを無効化する理由
現代のパスワードシステムは、ハッシュを計算する際にランダムな文字列(「ソルト」)を付加します。これにより、同じパスワードを使っていても各アカウントのハッシュ値が異なります。ソルトが加わると、特定のソルトに対応するレインボーテーブルは事前に作成されていないため、この攻撃手法が無効化されます。これが 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:「定期的にパスワードを変更すれば安全性が上がる」

この考え方は時代遅れです。定期的な変更を強制されたユーザーは予測可能なパターン(Password1Password2)に頼りがちになることが研究で判明しています。大切なのは頻繁に弱いパスワードに変えることではなく、最初から十分に強いパスワードを設定することです。

誤解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の二重防護:二つの防御線は一つより格段に強い

ランダムなパスワードジェネレーターを使えば、「十分な長さ」と「十分なランダム性」を一度に解決できます。強いパスワード作りの最も手軽な出発点です。