N2
NanToo
パスワード強度とエントロピー — Shannon と NIST SP 800-63B の数学
LLIFESTYLE
ライフ8 分で読める

パスワード強度とエントロピー — Shannon と NIST SP 800-63B の数学

「大文字・小文字・数字・記号を全部入れて 12 文字以上にしてください」— サインアップ画面で何度も見たこの要件。しかし、実は 2017 年の NIST SP 800-63B 改訂以降、「複雑性ルール」も「定期変更」も非推奨に変わっています。Shannon (1948) の情報エントロピー理論に立ち返り、パスワード強度を数式で定量化し、現代の推奨方式を整理します。

#パスワード#エントロピー#NIST#セキュリティ#Diceware

パスワードエントロピーの基本式

Claude Shannon が 1948 年の論文 "A Mathematical Theory of Communication" で定式化した情報エントロピーを、パスワードに適用すると:

エントロピー (bits) = log₂(候補数^長さ)
                   = 長さ × log₂(候補数)

候補数は使用文字の種類数。具体例:

構成候補数log₂(候補数)8文字時のエントロピー
数字のみ103.3226.6 bit
小文字のみ264.7037.6 bit
小文字+数字365.1741.4 bit
大小+数字625.9547.6 bit
大小+数字+記号(32)946.5552.4 bit

この表から読み取れること:

  • 記号混在は log₂(94) − log₂(62) = 0.6 bit/文字 しか増えない
  • 大文字混在は log₂(52) − log₂(26) = 1 bit/文字
  • 長さを1文字増やすほうが、記号を入れるより効果的 (小文字のみでも 4.7 bit 増加)

必要エントロピーの目安 — 攻撃コストで逆算

攻撃側の視点で「何ビットあれば安全か」を計算します。

オンライン攻撃: Webサーバーに毎回HTTPリクエストを飛ばす。レート制限や IP BAN があるため、秒間 10 回が上限の目安。

1年で試行可能: 10 × 60 × 60 × 24 × 365 ≈ 3 × 10⁸ 回
必要エントロピー: log₂(3 × 10⁸) ≈ 28 bit で平均1年

オフライン攻撃: ハッシュ化されたパスワードDBが漏洩した場合の総当たり。GPU/ASIC による並列計算で劇的に高速化。

GPU 1枚のSHA-256試行速度: 約 10^10 hash/秒
1年で試行可能: 10^10 × 3.15 × 10^7 ≈ 3 × 10^17 回
必要エントロピー: log₂(3 × 10^17) ≈ 58 bit で平均1年

Bitcoin マイニングプール全体: 約 4 × 10^20 hash/秒
必要エントロピー: log₂ ≈ 68 bit

NIST の推奨は 2024 年時点でメモラブル(人間が覚える)パスワード: 64 bit 以上、ランダム生成: 80 bit 以上。オフライン攻撃への耐性を確保するためです。

ハッシュアルゴリズムの選び方 — bcrypt/Argon2 の意義

パスワード保存側は、単純に SHA-256 でハッシュするのではなく、計算コストを意図的に高くしたパスワードハッシュ専用アルゴリズムを使います。

  • MD5, SHA-1, SHA-256: 高速すぎて総当たりに脆弱 → パスワード保存には使ってはいけない
  • bcrypt (Provos & Mazières, 1999): コスト係数でイテレーション回数を調整。1ハッシュ 100ms 程度に調整するのが慣例
  • scrypt (Percival, 2009): メモリハード化 (GPU/ASIC で並列化しにくい)
  • Argon2 (Password Hashing Competition, 2015 優勝): 現代の推奨。メモリハード + 並列耐性
  • PBKDF2 (RFC 2898): 古いが広く使われる。NIST では最低線として許容

1ハッシュ 100ms の bcrypt であれば、GPU の実効試行速度は 10^10 → 10 hash/秒 まで劇的に下がります。つまりアルゴリズム選択でパスワード要件が数十ビット分緩和されるという考え方もできます。

NIST SP 800-63B (2017年改訂) の衝撃

NIST (米国国立標準技術研究所) は 2017 年 6 月、SP 800-63B を大幅改訂し、長年の "常識" を覆しました。

禁止・非推奨になったもの

  • 定期パスワード変更の強制: 90日ごとなどの強制変更はむしろ脆弱化する (ユーザーは記号を番号で差し替える等、予測可能パターンを使うため)
  • 複雑性ルール: 「大文字・小文字・数字・記号すべて含む」要求は非推奨
  • 秘密の質問: 母親の旧姓等は SNS で調べられるため非推奨
  • SMS 二要素認証: SIM スワップ攻撃に脆弱 — 可能なら認証アプリ or FIDO2 へ

推奨されるもの

  • 最低8文字、理想は 15 文字以上
  • 全 Unicode 文字の許可 (絵文字・日本語含めて)
  • 既知漏洩パスワード DB との照合 (Have I Been Pwned API 等)
  • 貼り付け (パスワードマネージャー) の許可 — ペースト禁止は逆効果
  • 認証試行レート制限でオンライン攻撃防止
  • FIDO2 / Passkey — パスワードレス認証への移行

この改訂を主導した Bill Burr (旧ガイド著者) 自身が 2017 年に "自分の元の推奨は間違っていた" とウォールストリートジャーナルで謝罪したのが印象的でした。

Diceware 方式 — 単語パスフレーズの理論

長くて覚えやすいパスワードを作る代表的手法が Diceware (Arnold Reinhold, 1995) です。

仕組み:

  1. サイコロを5回振って5桁の数字を作る (例: 42163)
  2. Diceware ワードリスト (7,776語) から該当単語を引く
  3. これを N 回繰り返して N 単語のパスフレーズ

1単語のエントロピー: log₂(7776) ≈ 12.9 bit

6単語パスフレーズ: 77.7 bit
           例: "clap velvet orchid forest bathtub muffin"
7単語パスフレーズ: 90.6 bit  (超堅牢)

"clap velvet orchid..." のような6単語パスフレーズは、ランダム 12 文字の大文字+数字+記号の英数パスワード (47.6 bit) より格段に強く、かつ覚えやすいのが特徴。

日本語ワードリストを使った日本語 Diceware も存在します。

パスワードマネージャーとマスターパスワード

実用的には、サービス毎に全く違うランダムパスワードを使うのが最善で、これは人間が覚えるには無理があります。パスワードマネージャーがほぼ必須です。

  • 1Password, Bitwarden, KeePassXC: 主要製品
  • ブラウザ内蔵 (Chrome, Safari Keychain): 手軽だがクラウド依存
  • 各サービスのパスワードは 20+ 文字のランダムに、マスターパスワードは Diceware 7 単語で

パスワードマネージャー自体の漏洩事例はごく稀ですが、2022 年の LastPass 事件 (暗号化データの一部漏洩) は教訓になります。マスターパスワードを極めて強固にしておけば、たとえ漏洩しても総当たり突破は困難です。

2段階認証 (2FA) との組合せ効果

パスワード単独では破られるリスクを残しますが、二要素認証 (2FA) を追加すると実質的な安全性が跳ね上がります。

  • TOTP (Google Authenticator 等): 30 秒毎に6桁ワンタイムパスワード — 推奨
  • FIDO2 / WebAuthn (YubiKey, Passkey): 物理キー + 公開鍵暗号 — 最強
  • SMS OTP: SIM スワップ攻撃に弱い — 可能なら避ける

Microsoft の 2019 年の統計では、MFA 導入によりアカウント乗っ取り被害の99.9% が防げたとされています。

実用的なチェックリスト

  1. パスワードマネージャー (1Password, Bitwarden等) を導入
  2. マスターパスワードは Diceware 6単語以上 (77+ bit)
  3. 各サービス用は 20文字以上のランダム (パスワードマネージャーで自動生成)
  4. 重要アカウント (メール・銀行・SNS) は 2FA を必ず有効化、可能なら FIDO2/Passkey
  5. 既知漏洩パスワードは Have I Been Pwned で確認
  6. 定期変更は不要 — 漏洩時や不審アクセス時のみ変更
  7. 「複雑性ルール」を盲信せず、長さ重視

まとめ

  • エントロピー = 長さ × log₂(候補数)
  • 記号混在より長さを増やすほうが効率的
  • NIST SP 800-63B (2017) 以降、定期変更・複雑性ルールは非推奨
  • オフライン攻撃想定で 64+ bit (メモラブル)、80+ bit (ランダム) を推奨
  • bcrypt/scrypt/Argon2 で保存側のコストを上げる
  • Diceware 6単語で 77 bit の覚えやすい強固パスフレーズ
  • パスワードマネージャー + 2FA (FIDO2/Passkey) の組合せが現代の最適解

参考文献・ソース

記事作成に関する注記

本記事は AI(大規模言語モデル)を編集補助として活用して作成しています。 公開前に編集者が内容を確認していますが、事実誤認・仕様の解釈ミス・最新情報との齟齬が含まれる可能性があります。 重要な判断を行う際は、本文中の一次ソースや公式ドキュメントを必ずご自身でご確認ください。 誤りにお気づきの場合は、お問い合わせフォームよりご連絡いただけると助かります。

🔧 関連ツール

📚 関連記事