パスワードのエントロピー、長さ、文字種:強度を数式で語れるようになる
「パスワードは長く複雑に」という標語は知られているものの、どの程度長くて、どの程度複雑なら十分かは数式で答えられる問いです。本記事ではパスワード強度の指標である「エントロピー」の計算と、現実のブルートフォース耐性の目安を整理します。
エントロピー:ランダムさの数値表現
パスワードのエントロピー(情報量)はビット単位で表され、次の式で計算します。
エントロピー (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 のような実装が望ましいです。
まとめ:実用的な目安
| 用途 | 推奨エントロピー | 例(英数字記号) |
|---|---|---|
| 重要度低(捨てアカウント) | 50 bit 以上 | 8 文字 |
| 一般用途 | 70 bit 以上 | 11 文字 |
| 重要アカウント・暗号化 | 100 bit 以上 | 16 文字以上 |
| 機械生成(API キーなど) | 128 bit 以上 | base64 で 22 文字以上 |
人間が覚える必要があるパスワードはパスフレーズ(6 単語以上)、それ以外はパスワード生成器に任せるのが安全です。
本サイトのパスワードジェネレーターは、文字種と長さからエントロピーを表示しながら生成できます。「自分が今作っているパスワードが何 bit か」を可視化したい場面で使えます。