パスワード強度計算
計算結果
エントロピー
- 使用する文字の種類数
- 62
- 1文字あたりのエントロピー
- 5.95 bit
- 組み合わせ数(10の累乗)
- 28
パスワードの強さは算術で決まります。このページは当てずっぽうではなく、その算術をやります。パスワードの長さと文字種を選ぶと、その選択が意味する文字の種類数、エントロピー(bit)、そして現代のグラフィックカードがすべての組み合わせを試すのにどれだけかかるかが、速いハッシュと、適切に設定された遅いハッシュの両方で出ます。この2つの数字の開きが、このページでいちばん役に立つ部分です。漏えいしたMD5のデータベースに対して3年で落ちるパスワードが、bcryptに対しては数百万年生き延びます。長さも同じくらい効きます。1文字増えるごとに仕事量は文字の種類数の分だけ掛け算になり、決まった長さのまま文字種を1つ足すのは1回の掛け算で終わります。
エントロピー帯ごとの解読時間
| 強度帯 | エントロピー | 組み合わせ | 毎秒10^10回での秒数 | 毎秒10^4回での秒数 |
|---|---|---|---|---|
| 弱い | 28〜35bit | 8 | -2 | 4 |
| ふつう | 36〜59bit | 10 | 0 | 6 |
| 強い | 60〜127bit | 18 | 8 | 14 |
| 非常に強い | 128bit以上 | 38 | 28 | 34 |
最後の2列は10の累乗として読んでください。-2は10^-2秒、3は1,000秒です。右端の列は、同じ攻撃者が適切に設定された遅いハッシュに当たった場合で、両者は100万倍違います。エントロピーはその帯の下限なので、この表と強度のバッジはいつも一致します。組み合わせの数は10の累乗に切り捨ててあるので、実際より大きく見せることはありません。
公式
エントロピー(bit) = パスワードの長さ(文字数) × log₂(文字の種類数)。組み合わせの数は2のエントロピー乗
- パスワードの長さ
- パスワードが何文字か
- 文字の種類数
- 使える文字が何種類あるか。英小文字26・英大文字26・数字10・記号32
- log₂
- 2を底とする対数。結果がビットで数えられるのはこのため
パスワードの規則を決める前に2つの方針を比べたいときや、すでに持っているパスワードを残す価値があるか確かめたいときに使います。既知の文字種から無作為に作ったパスワードに対しては厳密な値で、人が考えたものに対しては上限の目安でしかありません。人はパターンを選ぶので、人が作った12文字は無作為な12文字よりはるかにエントロピーが低くなります。ブルートフォース(総当たり)攻撃は唯一の攻撃でもありません。複数のサイトで使い回したパスワードは、どれか1つの漏えいで破られます。そこでは長さは何の助けにもなりません。
計算例
16文字、英字と数字
- 文字の種類数:26 + 26 + 10 = 62文字
- 1文字あたりのエントロピー:log₂(62) = 5.95bit
- エントロピー合計:16 × 5.95 = 95.3bit
- 組み合わせの数:10^28。29桁を全部出す代わりに、10の累乗で報告する
95.3bitは60bitの帯を大きく超え、ふつうなら128bitに取ってある最上位の帯に入ります。記号も足すと文字の種類数は94、エントロピーは104.6bitになります。9.3bitぶん、およそ1.6文字ぶんと同じ価値です。
8文字、英小文字だけ
- 文字の種類数:26文字
- 1文字あたりのエントロピー:log₂(26) = 4.70bit
- エントロピー合計:8 × 4.70 = 37.6bit
- 組み合わせの数:2^37.6 ≈ 2.1 × 10^11、つまり10^11
37.6bitは「ふつう」の帯に入り、速いハッシュを1枚のカードで回すとおよそ7秒です。長さを2倍の16文字にすると75.2bitになり、長さを8のまま文字種を全部オンにしても52.5bitにしか届きません。1文字あたりで見ると、長さのほうが種類より多くの仕事をします。
適用限界
このエントロピーは、選んだ文字種から一様無作為に作られたパスワードを前提にしています。人が手で選んだパスワードはそれより低く、たいていはるかに低くなります。人は単語・日付・キーボードの並びに手を伸ばし、解析ツールはそこから先に試すからです。つまりこのページが測っているのは方針であって、パスワードそのものではありません。解読時間は現代のGPU1枚からの桁違いの概算であって、特定のマシンの実測値ではありません。クラスタを組んだ攻撃者、あるいはただ新しいカード1枚で、この数字は大きく覆ります。盗まれたハッシュのデータベースは、攻撃者が望むだけオフラインで攻撃できます。ここには、そのパスワードが使い回されているか、フィッシングやキーロガーで抜かれたか、サポート窓口からリセットされたかが一切入っていません。実際にパスワードが落ちるのはそういう経路で、どれもエントロピーでは説明できません。最後に、このページはパスワードを作ってはくれません。理由はこのファイルの最初の段落のとおりです。安全に作るには暗号学的に安全な乱数源が要り、表示する数を計算するだけのページは、その乱数源を持てないからです。
よくある質問
- パスワードのエントロピーはどう計算するのか
- エントロピーは、パスワードの長さに文字の種類数の2を底とする対数を掛けたものです。英小文字・英大文字・数字を選ぶと文字の種類数は62、log₂(62)は1文字あたり5.95bitなので、そこから作った16文字のパスワードは95.3bitになります。取りうる組み合わせの数は2のエントロピー乗で、だからエントロピーは便利な単位なのです。長くすれば足し算で増えていきます。
- 60bitのエントロピーは十分なのか、解読時間はどう読めばよいのか
- サイトがパスワードをどう保存しているかでまったく変わります。毎秒10^10回——現代のカード1枚でソルトなしの速いハッシュに当たる速度——なら、60bitは約3年の連続稼働です。bcryptをコスト12で使っている同じカードは毎秒10^4回ほどしか試せず、同じパスワードに数百万年かかります。つまり60bitは、まともなサイトに対しては十分で、いい加減なサイトに対しては際どい、ということです。80bitならどちらにも足ります。
- 記号と大文字小文字を混ぜるべきか、それとも長くするべきか
- たいていは長くするほうが得で、覚えるのも楽です。8文字の英小文字から16文字にすると37.6bitぶん増えますが、8文字のまま文字種を全部オンにしても15bitぶんです。文字種は広げても1回しか掛け算になりませんが、1文字増やすたびにもう一度掛け算になります。記号は、サイトが要求するときに使うものであって、強度を効率よく足す方法として使うものではありません。
- このページがパスワードを作ってくれないのはなぜか
- パスワードの不確かさは、その背後にある乱数の質を超えられません。表示する数を計算するだけのページは、暗号学的に安全な乱数源から引くことができません。その乱数源こそが、乱数生成器と電卓を分けるものです。パスワード管理ソフトやOSの生成機能を使ってください。どちらもその乱数源を持っています。そのうえでこのページで、そこで選んだ長さと文字種に見合うだけの価値があるかを確かめてください。
- 長いパスワードはいつでも強いのか
- 無作為に作られた場合だけです。算術が報いるのは長さで、4つの単語をつないだパスフレーズが短い記号の羅列に勝つことがあるのもそのためです。しかし歌詞と誕生日と名前から組み立てた20文字は辞書で解析でき、その実力はこのページが測る無作為な20文字とはまるで違います。このページが示すのはパスワード方針の上限です。人が考えたパスワードは、そのずっと下にあります。
参考文献
- NIST Special Publication 800-63B: Digital Identity Guidelines — Authentication and Lifecycle Management — National Institute of Standards and Technology
- 安全なパスワードの設定・管理 — 総務省(国民のためのサイバーセキュリティサイト)
- Password Storage Cheat Sheet — OWASP Foundation