パスワードのエントロピー、長さ、文字種:強度を数式で語れるようになる
「パスワードは長く複雑に」という標語は知られているものの、どの程度長くて、どの程度複雑なら十分かは数式で答えられる問いです。本記事ではパスワード強度の指標である「エントロピー」の計算と、現実のブルートフォース耐性の目安を整理します。
エントロピー:ランダムさの数値表現
パスワードのエントロピー(情報量)はビット単位で表され、次の式で計算します。
エントロピー (bit) = log₂(文字種の数 ^ 長さ)
= 長さ × log₂(文字種の数) 「文字種の数」はパスワードに使える文字の総数です。代表的な値:
| 文字種 | 含まれる文字 | サイズ |
|---|---|---|
| 数字のみ | 0-9 | 10 |
| 英小文字のみ | a-z | 26 |
| 英大小 | A-Z, a-z | 52 |
| 英数字 | A-Z, a-z, 0-9 | 62 |
| 英数字 + 記号 | + 一般的な ASCII 記号 32 種 | 94 |
| 英数字 + 全 ASCII 印刷可能 | + 残りの記号 | 95 |
例:8文字の英数字パスワード → エントロピー = 8 × log₂(62) ≈ 47.6 bit
12文字の英数字+記号パスワード → エントロピー = 12 × log₂(94) ≈ 78.7 bit
なぜビット表現か:総当たり試行数との対応
エントロピー N bit のパスワードを総当たりで試すには、平均で 2^(N-1) 回、最悪で 2^N 回の試行が必要です。
- 47.6 bit → 平均 2^46.6 ≈ 1.0 × 10^14 回試行
- 78.7 bit → 平均 2^77.7 ≈ 2.5 × 10^23 回試行
ハッシュ計算速度を仮定して時間に直すと、強度の差が一目で分かります。
ハッシュ計算速度ベースの破壊時間の試算
GPU 1 枚あたりの SHA-256 計算速度は 2026 年時点で約 10^10 ハッシュ/秒(10 GH/s)程度。100 枚並列なら 10^12 ハッシュ/秒。これを基準に試算すると:
| エントロピー | 文字種・長さ | 平均破壊時間 (100 GPU 並列) |
|---|---|---|
| 30 bit | 数字のみ 9 桁 | 1 秒未満 |
| 50 bit | 英数字 8 文字 | 数十分 |
| 70 bit | 英数字記号 11 文字 | 数十年 |
| 80 bit | 英数字記号 13 文字 | 数千年 |
| 100 bit | 英数字記号 16 文字 | 宇宙の年齢 (10^10 年) を超える |
「現実的に総当たりで破られない」ラインは概ね 80 bit 以上です。安全側に倒すなら 100 bit を目標にします。
パスワードハッシュの遅延が効いている前提
上の試算は「サーバー側がパスワードを高速ハッシュ(SHA-256 など)でしか保護していない」最悪ケースです。実際は bcrypt / scrypt / Argon2 のような意図的に遅いパスワードハッシュが使われていれば、計算速度は数百倍〜数千倍遅くなります。
例:bcrypt のコスト 10 だと 1 ハッシュ ≈ 0.1 秒。GPU 並列でも 1 秒間に 10^4 程度しか試行できません。100 GPU でも 10^6 ハッシュ/秒。
これにより、50 bit のパスワードでも実用上はかなり持ちます。ただし攻撃者が漏洩したハッシュテーブルに対して計算リソースを潤沢に使うシナリオでは、最終的には強度差が効きます。
「複雑さ」より「長さ」が効く理由
エントロピーの式 長さ × log₂(文字種) を見ると:
- 文字種を 26 → 94 に増やす:
log₂(26) ≈ 4.7からlog₂(94) ≈ 6.55に → 1.4 倍 - 長さを 8 → 16 に増やす:エントロピーが 2 倍
長さの方が線形に効き、文字種の追加は対数的にしか効きません。「8 文字で記号入り」より「12 文字で英数字のみ」の方が強いという結論になります。
これが「複雑さ」より「長さ」が推奨される理屈で、NIST SP 800-63B(2017 年改訂)も「複雑さの強制より長さを推奨」という立場に変わりました。
人間が覚えるパスワードの限界:パスフレーズ
人間が覚えられる「ランダム性のあるパスワード」は精々 12〜14 文字程度。エントロピーで 80 bit が限界です。
これを超えるには パスフレーズ(複数単語の組み合わせ)が現実的な選択肢になります。
4 つのランダムな英単語(10000 単語の辞書から) = 4 × log₂(10000) ≈ 53 bit
6 単語 → 約 80 bit XKCD の有名な漫画「correct horse battery staple」は約 44 bit で、現代の基準だとやや弱め。実用には 6 単語以上が推奨されます。
実装上の注意:パスワードの「強度メーター」の信頼性
ログイン画面に表示される「強度メーター」は、実は信頼度がまちまちです。代表的な実装:
- zxcvbn(Dropbox 製):辞書攻撃・キーボード配列・繰り返しパターンを検出する。比較的正確
- 単純な文字種チェック:「英大小数字記号を全部含むか」で評価する。エントロピーを過大評価しがち
- 文字数のみ:単純すぎる
「8 文字 + 英大小数字記号で OK」を要求するシステムは、Aa1!aaaa のような実質弱いパスワードを許してしまいます。zxcvbn のような実装が望ましいです。
よく検索される「長さ別」の強度比較
「8 文字パスワード」「16 文字パスワード」のような長さ指定で生成したい人が多いので、各長さの強度を表で並べます(英大小数字記号 = 94 種類の文字セットの場合)。
| 長さ | エントロピー | 総当たり時間(10¹² 試行/秒) | 用途の目安 |
|---|---|---|---|
| 6 文字 | 約 39 bit | 数分 | 一時的な PIN 程度(推奨しない) |
| 8 文字 | 約 52 bit | 数日 | 古い基準、現代では弱め |
| 10 文字 | 約 65 bit | 数年 | 一般用途の最低ライン |
| 12 文字 | 約 78 bit | 数百年 | 一般用途の標準 |
| 14 文字 | 約 91 bit | 数万年 | 重要アカウント |
| 16 文字 | 約 104 bit | 数千万年 | 暗号鍵相当の強度 |
| 20 文字 | 約 130 bit | 実質破られない | Wi-Fi パスフレーズ等 |
| 32 文字 | 約 209 bit | 物理的に不可能 | API キー・シークレット |
実務的な目安:
- 「16 文字」が現代の妥当ライン — NIST SP 800-63B も「12 文字以上」を推奨し、「複雑さよりも長さ」を強調
- 「14 文字」もまだ現実的に十分強い — Wi-Fi 等の制限がある場面で
- 「8 文字」は要注意 — 古い基準だが、現在の GPU 攻撃では数日で破られ得る
ただし、上記時間はサーバー側がパスワードハッシュに bcrypt / argon2 のような遅いアルゴリズムを使っている前提。MD5 や SHA-1 で保存されている場合は桁違いに早く破られます。
まとめ:実用的な目安
| 用途 | 推奨エントロピー | 例(英数字記号) |
|---|---|---|
| 重要度低(捨てアカウント) | 50 bit 以上 | 8 文字 |
| 一般用途 | 70 bit 以上 | 11 文字 |
| 重要アカウント・暗号化 | 100 bit 以上 | 16 文字以上 |
| 機械生成(API キーなど) | 128 bit 以上 | base64 で 22 文字以上 |
人間が覚える必要があるパスワードはパスフレーズ(6 単語以上)、それ以外はパスワード生成器に任せるのが安全です。
「強いパスワード」の話は感覚的になりがちだが、エントロピーで見れば「16 文字の英大小数字記号」と「8 単語のパスフレーズ」がほぼ同等といった比較ができる。本サイトのパスワードジェネレーターは文字種と長さからエントロピーを表示しながら生成するので、「自分が今作っているパスワードが何 bit か」を可視化したい場面で使える。実運用ではパスワードマネージャの併用が前提で、人間が記憶できる強度には限界があることも忘れずに。