メインコンテンツへスキップ
Toolsbase Logo

NIST SP 800-63B に学ぶパスワード強度の科学:エントロピー、zxcvbn、定期変更不要の理由

Toolsbase編集部
パスワードNISTセキュリティエントロピー多要素認証

「3ヶ月ごとにパスワードを変えなさい」は間違いだった

IT部門からの定期的なパスワード変更要求、大文字・小文字・数字・記号を必ず含めるという複雑さの要件——これらは長年にわたって「セキュリティのベストプラクティス」として広まってきた慣行です。しかし、米国国立標準技術研究所(NIST)は2017年に発行し、2024年に改訂したガイドライン「SP 800-63B」(認証とライフサイクル管理)で、これらの慣行を明示的に推奨しないと宣言しました。

その理由は、実証的なデータに基づいています。定期変更を強制すると、ユーザーは「Summer2024」→「Summer2025」のような些細な変更や、パターンが読める弱いパスワードを選ぶ傾向があります。複雑さの要件も同様で、「P@ssw0rd!」のように要件は満たしているが推測しやすいパスワードが量産されます。

本記事では、NIST SP 800-63BとOWASP等の一次情報源をもとに、パスワード強度の科学的基礎を解説します。

エントロピー——パスワード強度の数学的表現

エントロピーは情報理論に由来する概念で、パスワードの「予測しにくさ」をビット単位で定量化します。エントロピーが高いほど、ブルートフォース攻撃に必要な試行回数が多くなります。

エントロピーの計算式

エントロピー(ビット)= パスワード長 × log₂(文字種の数)
文字種 文字数 1文字あたりのエントロピー
数字のみ 10 3.32 bit
英小文字のみ 26 4.70 bit
英大小文字 52 5.70 bit
英大小文字+数字 62 5.95 bit
英大小文字+数字+記号(94文字) 94 6.55 bit

計算例: 12文字のランダムパスワード(英大小文字+数字+記号)

エントロピー = 12 × 6.55 = 78.6 bit

一般的な基準:

  • 40 bit以下: 弱い(数分〜数日でクラック可能)
  • 40〜60 bit: 中程度
  • 60〜80 bit: 強い(NIST推奨水準)
  • 80 bit以上: 非常に強い

ただし、エントロピーは「ランダムに生成した場合」の理論値です。「P@ssw0rd」のように人間が作ったパスワードは、文字種は多くても予測可能なパターンがあるため、実際の強度は理論エントロピーより大幅に低くなります。

エントロピー vs 文字列の長さ

8文字(大小英数字+記号): 8 × 6.55 = 52.4 bit
16文字(英小文字のみ):   16 × 4.70 = 75.2 bit

「複雑な8文字」より「シンプルな16文字」の方がエントロピーは高い。これがNISTが長さを優先する理由です。

zxcvbn——現実的なパスワード強度評価アルゴリズム

理論的なエントロピー計算には欠点があります。それは「ランダム性」を前提にしていることです。実際のパスワードはランダムではなく、人間の予測可能なパターンを含んでいます。

この問題を解決するために、Dropboxのエンジニアによって開発されたのがzxcvbn(Dropbox、2012年公開)です。zxcvbnは、ランダム性を前提にせず、実際の攻撃者がどのようにパスワードを推測するかをモデル化します。

zxcvbnが検出するパターン

zxcvbnはパスワードを分析し、以下のパターンを特定します:

  1. 辞書マッチ: 一般的な英語単語、名前、よく使われるパスワード(rockyou等のリーク済みリスト)
  2. 日付: 1990〜2029年の年号、YYYY/MM/DD形式の日付
  3. キーボードパターン: qwerty、asdfgh、zxcvbnなど
  4. 繰り返し: aaaa、1234など
  5. シーケンス: abcde、12345など
  6. 大文字化パターン: 頭文字のみ大文字、末尾のみ大文字など
  7. 数字・記号の置換: o→0、a→@、s→$など

zxcvbnは各パターンを検出すると、その部分の「実際の推測コスト」を計算し、パスワード全体の「クラックに必要な推測回数」を見積もります。

: 「P@ssw0rd1」の分析

  • 理論エントロピー: 約59.3 bit(十分に見える)
  • zxcvbn推定: スコア2(弱い)
    • 「password」の辞書マッチ(頻出リーク済みパスワード)
    • o→0、a→@の一般的な置換パターン
    • 末尾の数字1

パスワード強度チェッカーはzxcvbnを利用しており、単純なエントロピー計算ではなく、実際の攻撃者視点での強度評価を提供します。

辞書攻撃 vs ブルートフォース攻撃——攻撃者の実際の手法

パスワードクラッキングには主に2種類のアプローチがあります。

ブルートフォース攻撃(総当たり)

すべての文字の組み合わせを体系的に試す手法。文字種と長さによって試行回数が指数関数的に増加します。

ブルートフォース攻撃への耐性(2024年時点のGPU速度目安):

パスワード長 文字種 試行回数 現代GPU(MD5)での推定時間
8文字 英大小文字+数字(62種) 約218兆 数分〜数十分
10文字 英大小文字+数字(62種) 約839兆兆 数年
12文字 英大小文字+数字(62種) 約3,226京京 数百万年
16文字 英小文字のみ(26種) 約432京 数千年

※ 上記は非ソルトMD5ハッシュの場合の理論値。bcrypt/scryptなどの適切なハッシュアルゴリズムでは計算コストが意図的に高く設定されているため、実際の攻撃時間はさらに長くなります。

辞書攻撃(ルールベース攻撃)

実際のクラッカーはブルートフォースより辞書攻撃を好みます。現実のパスワードの大部分は、人間の予測可能なパターンに基づいているためです。

Hashcat(最も広く使われるパスワードクラックツール)のルール機能:

  • 単語の先頭/末尾に数字を付加(passwordpassword1, password123
  • 大文字化の変換(passwordPassword, PASSWORD
  • 記号置換(a@, o0, s$
  • 辞書単語の組み合わせ(bluehorse, correctbattery

OWASP(Open Worldwide Application Security Project)の「Password Storage Cheat Sheet」では、辞書攻撃に対抗するために適応型ハッシュ関数(bcrypt、scrypt、Argon2id)の使用を推奨しています。

Have I Been Pwned と漏洩パスワードリスト

Troy Huntが運営する「Have I Been Pwned(HIBP)」には、2024年時点で約130億件の漏洩パスワードが登録されています。攻撃者は漏洩済みパスワードリストを「辞書」として使用し、実際に人々が使うパスワードから試行するため、従来の辞書攻撃より効率的です。

NIST SP 800-63Bは、新規パスワード設定時にHIBP等の漏洩パスワードリストと照合することを推奨しています(「Credential Stuffing」対策)。

NIST SP 800-63Bの最新推奨事項

NIST SP 800-63B(2024年版、第3改訂)の主な推奨事項をまとめます。

NISTが推奨すること

  • 最低8文字以上(推奨は15文字以上)
  • 最大64文字以上を受け付ける
  • **全Unicode文字(スペース含む)**を許可する
  • 入力フィールドでのパスワードの貼り付けを禁止しない
  • 漏洩パスワードリストとの照合でよく使われるパスワードをブロック
  • パスフレーズ(ランダムな単語の組み合わせ)を推奨

NISTが推奨しないこと

  • 定期的なパスワード変更(侵害の証拠がない限り)
  • 複雑さの要件(大文字・小文字・数字・記号の強制)
  • パスワードヒント(ソーシャルエンジニアリングのリスク)
  • セキュリティの質問(推測・公開情報から答えられる可能性)
  • パスワード入力フィールドへの**「貼り付け」機能の無効化**

パスフレーズの優位性——「correct horse battery staple」問題

パスフレーズ(ランダムな単語を複数組み合わせたもの)は、従来の複雑なパスワードに対して以下の優位性があります。

パスフレーズ vs 複雑なパスワードの比較

比較項目 P@ssw0rd!2 correct-horse-battery-staple
文字数 11文字 31文字
エントロピー(理論) 約72.1 bit 約44.3 bit(4単語×各11 bit)
実際の強度(zxcvbn) 低い(辞書マッチ) 高い(ランダム単語選択なら)
記憶しやすさ 難しい 容易

Diceware法: 骰子(さいころ)を振って単語を選ぶ方法で生成された4〜6語のパスフレーズは、エントロピーが高く、記憶もしやすい理想的なパスワードです。6面体サイコロ5個を振ってリストから単語を選ぶと、1語あたり約12.9 bitのエントロピーになります。5語であれば約64.5 bit。

注意: 「有名なフレーズ・歌詞・ことわざ」をそのまま使うと辞書に入っている可能性があります。ランダムに選んだ単語の組み合わせが重要です。

パスワード生成ツールでは、ランダムな文字列だけでなく、パスフレーズ形式のパスワードも生成できます。

多要素認証(MFA)——パスワードだけに頼らない

NIST SP 800-63Bは、認証強度を3つのレベル(Assurance Level 1〜3)に分類しており、重要なシステムでは多要素認証(MFA)の使用を推奨しています。

MFAの種類と特性:

認証方式 NIST AAL フィッシング耐性 利便性
パスワードのみ AAL1 なし
SMS/音声OTP AAL2 低(SIMスワップリスク) 中〜高
TOTP(認証アプリ) AAL2 低〜中(実時間フィッシングに脆弱)
FIDO2/WebAuthn AAL2〜3 高(ドメイン紐付け)
パスキー AAL2〜3 高(ドメイン紐付け) 非常に高

NIST SP 800-63Bは、SMS OTPの使用について「制限付き認証要素」と位置づけており、可能であればFIDO2/WebAuthnへの移行を推奨しています(SIMスワップ攻撃やSS7プロトコルの脆弱性を理由に)。

パスワードマネージャー——唯一の現実的な解決策

NIST SP 800-63Bの推奨事項を完全に実践する(全サービスにランダムな12〜20文字以上のパスワードを設定する)には、パスワードマネージャーが事実上必須です。

パスワードマネージャーは「全パスワードを1か所に集めるのは危険では」という懸念を持たれますが、適切に設計されたツールは以下のセキュリティ特性を持ちます:

  • ゼロ知識暗号化: マスターパスワードから派生した鍵でデータを暗号化。サービス提供者もデータを読めない
  • エンドツーエンド暗号化: データはローカルで暗号化・復号
  • 独立監査: 主要なパスワードマネージャーは定期的に第三者によるセキュリティ監査を受けている
パスワードマネージャー 形態 価格 オープンソース
Bitwarden クラウド/セルフホスト 無料プランあり あり
1Password クラウド 有料($3/月〜) なし
KeePassXC ローカル 無料 あり

マスターパスワードの要件: パスワードマネージャーのマスターパスワード自体が最も重要なパスワードになります。20文字以上のパスフレーズを推奨します。

CISAのパスワードガイドライン(2024年)

米国サイバーセキュリティ・インフラストラクチャセキュリティ庁(CISA)は2024年に「Secure by Design」原則を公表し、パスワードポリシーについても以下を推奨しています:

  • 最低15文字以上の長さ
  • MFAを最初から利用可能にする設計(オプションではなくデフォルト)
  • 漏洩パスワードリストとの照合
  • パスキーのサポート

CISAはまた「パスワードの複雑さよりも長さと一意性が重要」という立場を明確にしており、NISTガイドラインと一致しています。


まとめ

パスワードセキュリティの科学が示す結論は、従来の「常識」とは異なります。

  • 長さ > 複雑さ: 記号を含む8文字より、小文字だけの16文字の方がエントロピーは高い
  • 定期変更は逆効果: 漏洩の証拠がない限り、強制変更はセキュリティを下げる
  • 実際の強度はzxcvbnで評価: 理論エントロピーは人間のパターンを考慮しない
  • パスフレーズが最適: ランダム単語4〜6語の組み合わせは記憶しやすく強固
  • MFAは必須: 特にFIDO2/WebAuthn(パスキー)がフィッシング耐性最強

パスワード強度チェッカーでご自身のパスワードを評価し、パスワード生成ツールでより安全なパスワードを生成してみてください。


参考文献


免責事項: 本記事は一般的な情報提供を目的としており、特定の環境・システムに対するセキュリティアドバイスを提供するものではありません。重要なシステムのセキュリティ設計については、セキュリティ専門家にご相談ください。