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

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

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

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

エントロピー (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 のような実装が望ましいです。

まとめ:実用的な目安

用途推奨エントロピー例(英数字記号)
重要度低(捨てアカウント)50 bit 以上8 文字
一般用途70 bit 以上11 文字
重要アカウント・暗号化100 bit 以上16 文字以上
機械生成(API キーなど)128 bit 以上base64 で 22 文字以上

人間が覚える必要があるパスワードはパスフレーズ(6 単語以上)、それ以外はパスワード生成器に任せるのが安全です。

本サイトのパスワードジェネレーターは、文字種と長さからエントロピーを表示しながら生成できます。「自分が今作っているパスワードが何 bit か」を可視化したい場面で使えます。