パスワード長はどのくらい必要か?
秘密鍵のパスワードの長さについて
現時点( 2021年)では 英数・記号を織り交ぜた ASCII 14文字で必要十分で、また計算能力の向上を考慮し、10年毎に1文字増やせば十分です。
パスワードの強度
ASCII の印字可能な文字は、94 文字で情報量(bit shannon)としては、 log2 ≈ 6.55 bit ほどしかありません。
ASCII の英数・記号使ったパスワードのユーザーの利用状況における情報量は 5 bit もなく、 確率的に早く解読されることがあることも考慮されていません。
パスワードの強度をパスワードを解読するのに必要な年数 y で表すとすると:
y = 2S(n - 8) m / 525949 m: 英数記号(94文字)の 8 文字のパスワードを解読するのに現時点で必要な時間 [分] n: パスワードの文字数 n > 0 S: パスワード1文字あたりの実効情報量 [bit (shannon)] y: パスワードを解読するのに必要な年数 [年]
ASCII の印字可能な英数記号は 94 文字で、その情報量は log2 ≈ 6.55 bit であるので:
ところがユーザーの使用文字偏りにより S は 5 くらいまで低下するので、
確率的にうっかり解読されちゃうこともあるので、(このような悪運に見舞われる確率を考慮し、統計学的な 3.3σ に相当する)安全率を 1024 と置くと:
解読時間は20年…ランダムに選んだ 14文字のパスワードは十分な気がします。
ところが計算力の向上率が 2年で 2倍とすると、2年毎に 2倍解読されやすくなります。 これに対抗するには、計算力の向上よりも早い速度で解読困難にすれば良い。 つまり、仮に S = 5 bit の場合、 1文字増やすと 32倍解読困難になるので、もう 1文字増やしておいて、 その後は 10年毎に1文字 増やせば足りることになります。 もし機械的にランダムに文字を選んでいれば S が 6.55 bit くらいになって、より安全になります。
…って思ってたけど
2021年当時は「10年ごとに1文字増やせばよい」と考えていた。 しかしその後、仮想通貨マイニングによって押し上げられた GPU を始めとした並列計算能力に加え、 LLM(いわゆるAI)の発展による探索順序の最適化も現実のものとなった。
これらのゲームチェンジャーにより m が一挙に 4〜5桁上昇し、2026年現在では、例えば m = 0.001 とかが現実的となりました。 つまり、解読時間は 5年などのオーダーではなく、数時間といったオーダーになってしまいました。
この変化は単に必要文字数を1〜2文字増やせば済むという話ではありません。 完全にランダムに選んだとしても解読時間は 14文字で約 1年と心もとなく、 ASCIIという限られた文字空間の中で文字数だけを増やしていく戦略には限界が見え始めてきました。
ところで Web ではすでに UTF-8 が事実上の標準であり、 長く複雑なパスワードはパスワードマネージャーに任せることが一般的になりました。
例えば、JIS第1水準(2965文字)、第2水準(3390文字)、ひらがな、カタカナ、記号を合わせるだけでも、利用可能な文字数は 6879文字となります。 そして、1文字あたりの理論上の情報量 S は log2 6879 ≃ 12.7 bit に達します。 仮に、ユーザーの語彙の偏りによってエントロピーが大きく低下し、S ≃ 9 bit 程度になったとしても、 英数記号の S ≃ 5 に比べて 1文字あたりの強度は約 24 = 16倍になります。
y = 2S(n - 8) m x8 / 525949 m: 英数記号(94文字)の 8 文字のパスワードを解読するのに現時点で必要な時間 [分] x: 英数記号(94文字)に対する文字空間の拡大比(e.g. 6879/94) n: パスワードの文字数 n > 0 S: パスワード1文字あたりの実効情報量 [bits (shannon)] y: パスワードを解読するのに必要な年数 [年]8文字までの文字空間拡大の効果を x8 で評価し、それ以上の長さに対する補正を S で行っています。
2026年現在での m = 0.001 として、文字コードを UTF-8 中の 6879 文字とした場合、UTF-8 の 8文字のパスワードでも次のようになります:
これを現時点で十分とすれば、S=9 bit の場合、1文字増やすと 512 倍解読困難になるので、 計算力の向上率が 2年で 2倍が維持されると仮定すると 2年で 1 bit 分の解読力増加になるため、 1文字で増えた情報エントロピーの 9 bit 分に達する18年毎に 1文字 増やせば良いことになります。 もちろん機械的にランダムに文字を選んでいれば S ≃ 12.7 bit くらいになので、 1文字増やすと 12.7 × 2 → 25年毎に 1文字増やせば良いことになります。
もし、ギリシャ文字やキリル文字を含めて約 11233 文字とすれば、UTF-8 の 8文字のパスワードで次のようになります:
このように、パスワードに使う文字空間の拡張は、パスワードの強度を文字通り指数関数的に強化できるのが分かります。 確率的に、非日本語環境からの攻撃も減るし、そうでなくても、文字空間を例えばヒンディーや絵文字にまで拡げると、 事実上、UTF-8 の全空間の印字可能な文字(約111万4112文字)を扱わなければならなくなり、 8文字ですら攻撃者にとっては絶望的(y > 7 ×1020 年)になると言えるでしょう。
結論
現時点(2026年)では 英数・記号を織り交ぜた ASCII であれば、 機械的にランダムに選んだ 場合、今しばらくの間は 15〜16 文字でも良いかも知れませんが、 一般的なパスワードの ASCII の英数・記号 16文字の範囲では、もはや安全とは言えない日が刻一刻と迫ってきています。 そろそろ情報通信システムの側も、UTF-8 によるパスワード を自然に扱えることを前提として再設計されるべきではないでしょうか😎