パスワードのエントロピー、長さ、文字種:強度を数式で語れるようになる

「パスワードは長く複雑に」という標語は知られているものの、どの程度長くて、どの程度複雑なら十分かは数式で答えられる問いです。本記事ではパスワード強度の指標である「エントロピー」の計算と、現実のブルートフォース耐性の目安を整理します。

エントロピー:ランダムさの数値表現

パスワードのエントロピー(情報量)はビット単位で表され、次の式で計算します。

エントロピー (bit) = log₂(文字種の数 ^ 長さ)
                  = 長さ × log₂(文字種の数)

「文字種の数」はパスワードに使える文字の総数です。代表的な値:

文字種含まれる文字サイズ
数字のみ0-910
英小文字のみa-z26
英大小A-Z, a-z52
英数字A-Z, a-z, 0-962
英数字 + 記号+ 一般的な 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 か」を可視化したい場面で使える。実運用ではパスワードマネージャの併用が前提で、人間が記憶できる強度には限界があることも忘れずに。