記号てんこ盛り8桁より、英小文字だけ16桁のほうが強い理由
パスワードの強さは組み合わせ数で決まります。記号込み8桁は約6096兆通り、英小文字だけの16桁は約436垓通りで、桁数を増やすほうが遥かに強くなります。パスフレーズという解も紹介します。
「大文字・小文字・数字・記号を必ず含めてください」という指示に従って P@ssw0rd! のような8桁のパスワードをひねり出したことがある人は多いはずです。記号まで詰め込んで頑張った気になりますが、実はこの8桁、単純な英小文字だけで作った16桁のパスワードに強さで大きく負けています。
結論を先に書きます。
パスワードの強さは「文字の種類の多さ」よりも「長さ」の影響のほうがずっと大きく効きます。記号を含む94種類の文字で作った8桁は組み合わせ数が約6,096兆通りなのに対し、英小文字26種類だけで作った16桁は約436垓(4.36×10^22)通り。桁数を8桁伸ばしただけで、組み合わせの数は約715万倍にまで跳ね上がります。
組み合わせ数は「文字種の数」の「桁数」乗で増える
パスワードの強さは、総当たり攻撃にどれだけ時間がかかるかという観点で見ると分かりやすく、その根っこにあるのは単純な掛け算です。使える文字の種類がn種類、桁数がm桁なら、組み合わせの総数は「nのm乗」で求まります。
- 記号込み8桁:大文字・小文字・数字・記号を合わせるとおよそ94種類の文字が使えるとして、94の8乗 ≈ 6,095,689,385,410,816通り(約6,096兆通り)
- 英小文字だけ16桁:使える文字は26種類だけですが、桁数を16桁に伸ばすと、26の16乗 ≈ 43,608,742,899,428,874,059,776通り(約436垓通り)
文字種を94種類から26種類に減らしても、桁数を8桁から16桁に倍増させるだけで、組み合わせ数はおよそ715万倍という桁違いの差になります。
| 条件 | 文字種 | 桁数 | 組み合わせ数(概算) |
|---|---|---|---|
| 記号てんこ盛り | 約94種類 | 8桁 | 約6,096兆通り |
| 英小文字だけ | 26種類 | 16桁 | 約436垓通り(約715万倍) |
なぜ「桁数」のほうが効くのか
これは指数関数の性質そのものです。文字種を2倍にしても組み合わせ数は「底」が2倍になるだけですが、桁数を2倍にすると組み合わせ数は「指数」が2倍になり、掛け算そのものが1回増えるのではなく掛け算の回数自体が増えます。指数の肩に乗る数字を増やすほうが、底の数字を増やすよりも効果が大きい、というのが根本的な理由です。
だからこそ、「記号を必ず1つ以上含める」というルールに頭を悩ませて短いパスワードをひねり出すより、多少単純な文字種でも長くしたほうが、総当たり攻撃に対しては合理的な選択になります。
パスフレーズという解
とはいえ、英小文字だけの16桁をランダムに暗記するのは現実的ではありません。そこで実用的な落としどころになるのがパスフレーズ、つまり複数の単語をつなげた長い文字列です。
「単語をいくつか組み合わせて長くする」という発想は、ランダムな文字の羅列を覚えるよりずっと楽で、それでいて長さによる強さの恩恵をしっかり受けられます。ランダムな文字列を確実に暗記したい場面と、長さで押し切りたい場面とで使い分けるのが現実的です。
パスワード自動生成を整える では、暗号乱数を使ったランダムなパスワードだけでなく、単語をつないだ覚えやすいパスフレーズも生成できます。作ったパスワードの強さを実際に数字で確認したいときは、パスワード強度・解読時間を整える でエントロピーと解読時間の目安を見てみてください。「記号を1個足す」より「桁数を2桁増やす」ほうが効くという感覚を、自分のパスワードで確かめてみることをおすすめします。