パスワードの文字数と安全性|最適な長さの選び方

約 9 分で読めます

パスワードの安全性を左右する最大の要因は「文字数」です。短いパスワードは総当たり攻撃 (ブルートフォース) で瞬時に突破されますが、1 文字増やすだけで組み合わせ数は約 95 倍に膨れ上がります。この記事では、NIST SP 800-63B の最新ガイドラインを軸に、エントロピーの概念、ハッシュ関数の計算コスト、GPU の実測解読時間、パスフレーズと多要素認証の組み合わせまで、パスワードの長さと安全性の関係を多角的に掘り下げます。

エントロピーとパスワード強度の関係

パスワードの強度を定量的に評価する指標が「エントロピー」(情報量) です。エントロピーはビット単位で表され、値が大きいほど攻撃者にとって推測が困難になります。計算式は以下のとおりです。

エントロピー (ビット) = log2(文字種の数文字数) = 文字数 × log2(文字種の数)

たとえば、英大小文字 + 数字 + 記号の 95 種を使う場合、1 文字あたり約 6.57 ビットのエントロピーが加算されます。8 文字なら約 52.6 ビット、12 文字なら約 78.8 ビット、16 文字なら約 105.1 ビットです。セキュリティの世界では 80 ビット以上が「当面安全」、128 ビット以上が「長期的に安全」とされています。つまり、95 種の文字セットを使う場合、13 文字以上で当面安全、20 文字以上で長期的に安全な水準に達します。

ここで重要なのは、文字種を増やすよりも文字数を増やすほうがエントロピーへの寄与が大きい点です。英小文字のみ (26 種) の 16 文字はエントロピー約 75.2 ビットですが、全 95 種を使った 12 文字は約 78.8 ビットとほぼ同等です。一方、英小文字のみでも 20 文字にすればエントロピーは約 94 ビットに達し、95 種 × 14 文字 (約 92 ビット) を上回ります。「複雑さ」より「長さ」が重要と言われる数学的根拠がここにあります。

NIST SP 800-63B ガイドラインの要点

NIST (米国国立標準技術研究所) が 2017 年に改訂し、2024 年に第 4 版ドラフトを公開した SP 800-63B は、パスワードに関する国際的な指針として広く参照されています。セキュリティの入門書も併せて読むと理解が深まります。従来の「定期変更」「複雑な文字種の強制」を明確に非推奨とし、長さを最重要要素に位置づけた点が画期的です。

NIST が「複雑さ」より「長さ」を重視する背景には、前述のエントロピーの数学的性質に加え、ユーザビリティの研究結果があります。複雑なルールを課すと、ユーザーは付箋にパスワードを書いたり、パターン化した弱いパスワードを使い回したりする傾向が強まることが実証されています。

GPU によるブルートフォース解読時間の実測データ

パスワードの文字数が増えるほど、総当たり攻撃に要する時間は指数関数的に伸びます。以下の表は、英大小文字・数字・記号 (約 95 種) を使用し、最新の GPU (NVIDIA RTX 4090 クラス、MD5 ハッシュで毎秒約 1,640 億回の試行が可能) を前提とした推定解読時間です。

文字数組み合わせ数エントロピー推定解読時間 (MD5)推定解読時間 (bcrypt)
6 文字約 7,350 億約 39.5 bit約 4.5 秒約 23 万年
8 文字約 6.6 京約 52.6 bit約 11 時間約 20 億年
10 文字約 6 × 1019約 65.7 bit約 1.2 万年事実上不可能
12 文字約 5.4 × 1023約 78.8 bit約 1 億年事実上不可能
16 文字約 4.4 × 1031約 105.1 bit約 8.5 × 1012事実上不可能

MD5 のような高速ハッシュでは 8 文字が約 11 時間で突破される一方、bcrypt (コストファクター 12) を使用するサービスでは同じ 8 文字でも解読に約 20 億年を要します。ハッシュアルゴリズムの選択がパスワードの実効的な安全性を大きく左右する点は見落とされがちです。ただし、サーバー側のハッシュアルゴリズムはユーザーが選べないため、ユーザー側でできる最善策は「十分に長いパスワードを設定すること」に尽きます。

ハッシュ関数の計算コストと文字数の関係

パスワードの安全性は、文字数だけでなく、サーバー側で使用されるハッシュ関数の計算コストにも大きく依存します。主要なハッシュアルゴリズムの特性を比較します。

アルゴリズムGPU 試行速度 (RTX 4090)特徴
MD5約 1,640 億回/秒高速すぎてパスワード保存には不適切。レガシーシステムに残存
SHA-256約 220 億回/秒MD5 より低速だが、パスワード保存には依然として不十分
bcrypt (cost=12)約 184 回/秒意図的に低速化。コストファクターで計算量を調整可能。入力 72 バイト制限あり
Argon2id数十〜数百回/秒2015 年の Password Hashing Competition 優勝。メモリハード設計で GPU 並列攻撃に強い
scrypt数百〜数千回/秒メモリハード設計。Argon2 登場前の推奨アルゴリズム

bcrypt は入力を 72 バイトに切り詰める仕様があるため、ASCII 文字のみなら 72 文字、UTF-8 の日本語なら約 24 文字が実質的な上限です。これが一部サービスの最大文字数制限に影響しています。Argon2id にはこの制限がなく、任意の長さのパスワードを処理できます。新規サービスの設計では Argon2id の採用が推奨されます。

重要なのは、bcrypt や Argon2id のような低速ハッシュを使用していても、短いパスワードでは辞書攻撃やルールベース攻撃で突破される可能性がある点です。ハッシュの計算コストは「時間稼ぎ」であり、根本的な防御は十分な文字数 (エントロピー) の確保にあります。

なぜ「複雑さ」より「長さ」が重要なのか

多くのサービスが「大文字・小文字・数字・記号をすべて含めること」というルールを課していますが、NIST はこのアプローチを明確に否定しています。その理由を具体的な数値で示します。

「P@ssw0rd!」は 9 文字で 4 種の文字種をすべて含みますが、辞書攻撃の上位リストに含まれる典型的な弱いパスワードです。一方、「mountain river cloud forest」は英小文字とスペースのみ (27 種) の 30 文字ですが、エントロピーは約 142.5 ビットに達し、ブルートフォースでの解読は事実上不可能です。

複雑さのルールが逆効果になる理由は 3 つあります。第一に、ユーザーは予測可能なパターンで要件を満たそうとします (先頭を大文字、末尾に "1!" を追加など)。第二に、複雑なパスワードは記憶が困難なため、短くなりがちです。第三に、記憶できないパスワードは付箋やテキストファイルに平文で保存されるリスクが高まります。

パスフレーズ vs ランダム文字列

長いパスワードを実現する手法として「パスフレーズ」と「ランダム文字列」の 2 つがあります。それぞれの特性を比較します。

観点パスフレーズランダム文字列
correct horse battery staplekX9#mP2$vL7@nQ4
文字数28 文字15 文字
エントロピー約 77 bit (Diceware 6 語)約 98.5 bit (95 種 × 15 文字)
記憶しやすさ高い (ストーリーで記憶可能)低い (パスワードマネージャー必須)
入力しやすさ高い (通常のタイピング)低い (記号の入力が煩雑)
辞書攻撃耐性単語の組み合わせ数に依存極めて高い

パスフレーズの強度は「単語数」と「単語リストのサイズ」で決まります。Diceware 方式 (7,776 語のリスト) で 6 語を選ぶと、エントロピーは約 77.5 ビットです。日常的に使う単語だけで構成すると辞書攻撃に弱くなるため、無関係な単語をランダムに組み合わせることが重要です。「私の猫は可愛い」のような意味のある文章はパスフレーズとしては不適切で、「椅子 紫 潜水艦 七味 銀河」のような無関係な単語の羅列が理想的です。

マスターパスワード (パスワードマネージャーの解錠用) にはパスフレーズが適しており、個別サービスのパスワードにはパスワードマネージャーが生成するランダム文字列が最適です。

主要サービスのパスワード文字数制限

サービスによってパスワードの最小・最大文字数は大きく異なります。最大文字数の制限は、前述のハッシュアルゴリズムの仕様やレガシーシステムの制約に起因するケースが多いです。

サービス最小文字数最大文字数備考
Google8 文字100 文字2 段階認証を強く推奨
Apple ID8 文字制限なし英大小文字 + 数字を要求
Microsoft8 文字256 文字パスワードレス認証を推進中
Amazon6 文字128 文字最小 6 文字は NIST 基準を下回る
X (旧 Twitter)8 文字128 文字SMS 認証は有料プラン限定
Instagram6 文字制限なし最小 6 文字は NIST 基準を下回る
GitHub8 文字制限なし漏洩パスワードリストとの照合あり
銀行系 (一般的)8 文字16〜32 文字最大文字数が短い傾向。レガシーシステムの制約が多い

注目すべきは、Amazon や Instagram の最小 6 文字が NIST の推奨 (最低 8 文字) を下回っている点です。また、銀行系サービスの最大 16〜32 文字という制限は、bcrypt の 72 バイト制限やメインフレーム時代のレガシーシステムに起因するケースが多く、セキュリティ上の懸念があります。制限の範囲内で可能な限り長いパスワードを設定しましょう。

多要素認証との組み合わせ

どれほど長いパスワードでも、フィッシングやキーロガーで窃取されれば無力です。パスワードの「長さ」による防御と、多要素認証 (MFA) による防御は、異なる攻撃ベクトルに対応するため、組み合わせることで防御力が飛躍的に向上します。

理想的な構成は「長いパスワード (またはパスフレーズ) + FIDO2 セキュリティキー」です。これにより、ブルートフォース、辞書攻撃、フィッシング、クレデンシャルスタッフィングのすべてに対して高い耐性を確保できます。

パスワードマネージャーの最適設定

パスワードマネージャーは、現代のパスワード管理における事実上の必須ツールです。パスワード管理の関連書籍も参考になります。ただし、設定を誤ると逆にリスクを高める場合があります。

漏洩チェックとパスワードポリシーの設計指針

個人ユーザーとサービス開発者の双方に向けた実践的な指針をまとめます。

個人ユーザー向け:

サービス開発者向け:

よくある失敗パターンと対策

まとめ

パスワードの安全性はエントロピー (情報量) に依存し、エントロピーを最も効率的に高める手段は文字数の増加です。NIST SP 800-63B は最低 8 文字、推奨 15 文字以上としており、bcrypt や Argon2id のような低速ハッシュと組み合わせることで実効的な安全性が確保されます。個人ユーザーはパスワードマネージャーで 20 文字以上のランダムパスワードを生成し、マスターパスワードには Diceware パスフレーズを使用するのが最善策です。さらに FIDO2 / パスキーによる多要素認証を併用すれば、現時点で最高水準の防御が実現できます。パスワードの文字数を確認したいときは、文字数カウントス をご活用ください。