パスワード100マス — 長さより保存方式が答えを変えます
文字集合10通りと長さ10通りが出会う各マスのビット数と、破るのにかかる時間を計算しました。速度は作らず、hashcatをRTX 4090 1枚で回した公開実測値を使いました。
記号を含むASCII全体 12 · 78.7 bit
- NTLM (Windows)26136.9年
- MD545950.7年
- SHA-256343132.2年
- WPA2 Wi-Fi10^9.5年
- bcrypt10^10.6年
1文字が担うもの
1文字が担う強さは集合の大きさの対数です。数字だけなら3.3ビット、小文字まで入れて4.7ビット、記号を含むASCII 94文字なら6.6ビットです。全体はこれに長さを掛けた値なので、種類を増やすより長さを伸ばすほうが大きいことが多いです — ASCIIで1文字増やせば6.6ビット付きますが、小文字からASCIIに広げても1文字あたり1.9ビットしか増えません。
サイトがどう保存したか
同じパスワードでも保存方式で答えが100万倍以上変わります。RTX 4090 1枚がNTLMなら毎秒2,885億回、MD5なら1,641億回叩けますが、bcryptは18万4千回だけです。わざと遅くしてあるからです。だから記号を含むASCII 8文字はNTLMで保存された所では3時間もかからず、bcryptで保存された所では500年を超えます — そしてどちらかは使う人が選べません。
ハングルは1文字が2文字分
完成形が定めた常用ハングル音節は2,350字です。字母ではなく音節1つを1文字と数えるので、1文字が11.2ビットを担います — ASCII 1文字の1.7倍です。だからハングル8文字はASCII 13文字より強く、14文字には届きません。ただし受け付けない所が多く、入力機がない端末では打てません。
この表が数えるものと数えないもの
ここの時間は**無作為に選んだ**パスワードを端から端まで探す場合の値です。人が作ったものはそこまで持ちません — 辞書の単語、キーボードの並び、誕生日、末尾に足した!や1は攻める側が先に試します。「P@ssw0rd!」はASCII 9文字で59ビットですが実際は数秒です。逆にカードが何枚もあれば時間は枚数で割られます。
いちばん多い事故は破られることではありません
ある所から漏れたパスワードを別の所でそのまま試すほうがずっと多いです。何年もかかるはずのパスワードでも、2か所で使い回していれば弱いほうが破られた日に一緒に落ちます。長さを伸ばすことより、**使い回さないこと**と2段階認証が先です。
集合と長さから探す
集合の大きさ · 長さ
数字のみ集合の大きさ 10
16進数集合の大きさ 16
小文字のみ集合の大きさ 26
Base32集合の大きさ 32
小文字+数字集合の大きさ 36
大文字と小文字集合の大きさ 52
英字+数字集合の大きさ 62
Base64集合の大きさ 64
記号を含むASCII全体集合の大きさ 94
ハングル音節集合の大きさ 2350
読み方
- 1文字あたりのビット = log2(集合の大きさ)。全体は長さを掛けます。
- 破る時間 = 組み合わせ数の半分 ÷ 毎秒の試行回数。
- 速度はhashcatをRTX 4090 1枚で回した公開実測値です。
- 無作為なパスワードを前提とした値です。人が作ったものはずっと早く落ちます。
- NTLM (Windows)2.89e+11 /s
- MD51.64e+11 /s
- SHA-2562.20e+10 /s
- WPA2 Wi-Fi2.53e+6 /s
- bcrypt1.84e+5 /s
よくある質問
Q. パスワードは何文字が安全ですか?
保存方式によります。記号を含むASCII 12文字は78.7ビットで、NTLM保存なら2万6千年、bcryptなら410億年です。8文字に減らすとNTLMでは3時間もかかりません。
Q. 長さと記号のどちらが効きますか?
多くは長さです。ASCIIで1文字増やせば6.6ビット付きますが、小文字からASCIIに広げても1文字あたり1.9ビットです。
Q. ハングルにすると強いですか?
1文字が11.2ビットでASCIIの1.7倍です。ただし受け付ける所が少なく、入力機がないと打てません。
Q. この時間は実際のものですか?
無作為なパスワードを端から端まで探す前提の値です。人が作ったものは辞書攻撃でずっと早く落ちます。
Q. いちばん大事なことは?
使い回さないことです。漏れたパスワードを別の所で試す攻撃のほうがはるかに多いです。