問「どのパスワードルールが一番強固か」を考える

弊社は ISMS (ISO/IEC/JIS Q 27001) の認証を受けており、社員全体に対するセキュリティに関する教育を定期的に行っている。
今日は直近の社内勉強会で考えた次の問題を考えてみたい。
Web 上にパスワードの設定欄がある。 記載されている次のパスワードルール中でもっとも強固なものを選べ。
- 「8 桁の数字で入力してください」
- 「5 文字で半角英数字が利用できます」
- 「8 文字で半角英数字が利用できます」
- 「8 文字の半角英数字で大文字と小文字・数字をそれぞれ 1 つ以上含む必要があります」
ただし、ここではブルートフォース(総当たり)攻撃を前提として、パターン数の多さがパスワードの強固さを表すものとする。
検討
1 と 2
1 は非常にシンプルだ。 数字なので一桁は 10 通りある。 それが 8 桁かならずあるわけだから、 10 の 8 乗= 1 億パターンである。
2 はどうだろう。 利用できる文字種は半角英数字ということは、アルファベット 26 文字に大文字小文字で✕ 2 +数字 10 通りなので、 62 通りということになる。 5桁ということは 62 の 5 乗=約 9 億パターンである。
1 と 2 を比べれば、「(桁数は少なくても)文字種が多い方が組み合わせ数は多い」ことがわかる。
3 と 4
さて、 3 と 4 を考えたとき、どちらがより強固だろうか。 1, 2 と同様に検証してみたい。
3は 2 より 3 桁多いだけなので 8 桁で 62 の 8 乗=約 218 兆パターンである。
では 4 はどうだろう。
8 桁で使える文字種も 3 と同様なので、同様に約 218 兆パターンだろうか。
4 の場合、「それぞれ 1 つ以上含む必要がある」という制約により、使えるパスワードが制限される。具体的には 00000000 などはもとより、 hogeHOGE や hoGEhoGe なども、制約により登録できない。
使用可能パターンを表形式で 3 と 4 を比べてみるとよくわかる。
3 の場合の使用可能パターン
数字 | |||
---|---|---|---|
小文字 | 大文字 | なし | あり |
なし | なし | ○ | |
あり | なし | ○ | ○ |
なし | あり | ○ | ○ |
あり | あり | ○ | ○ |
4 の場合の使用可能パターン
数字 | |||
---|---|---|---|
小文字 | 大文字 | なし | あり |
なし | なし | ✕ | |
あり | なし | ✕ | ✕ |
なし | あり | ✕ | ✕ |
あり | あり | ✕ | ○ |
4 の場合 ○ のついたところしかパスワードとして採用できないわけだ。
では実際に「登録できない」パスワードの個数を数えてみよう。
文字種 | 文字種数 | 桁数 | パターン |
---|---|---|---|
小文字のみ | 26 | 8 | 0.2 兆 |
大文字のみ | 26 | 8 | 0.2 兆 |
数字のみ | 10 | 8 | 0.0001 兆 |
小文字と大文字のみ | 52 | 8 | 53.4 兆 |
小文字と数字のみ | 36 | 8 | 2.8 兆 |
大文字と数字のみ | 36 | 8 | 2.8 兆 |
合計 | 59.5 兆 |
実に 60 兆近いパターンが除外される。
もともと 218 兆だったところから、 60 兆が除外されるということは、残り 158 兆パターンが 4 の取りうるパスワードの組み合わせとなる。
とすると攻撃する側からするとこれらの除外パターンを試行する必要がないわけだから、試行回数自体は減少することになり、今回の場合 4 のパターン数は 3 の 7 割程度になる。
結局どれが一番強固か
今回は前提として単純に「ブルートフォース攻撃に強いものが強固である」としたので、単純に総当たり数の多くなる 3 が一番強固となる。
ルール | パターン数 |
---|---|
1 | 1 億 |
2 | 9 億 |
3 | 218 兆 |
4 | 158 兆 |
しかし今回はあくまで直感的な複雑さとパターン数は比例しないということを紹介したまでなので、実際は 3 が一番強固かというとそうではない。
当然ながらユーザーが生年月日 8 桁に設定しないとも限らないし、 HappyDay
のようなパスワードを入力したとすれば辞書攻撃やリスト攻撃には脆弱になる。
60 兆パターンを捨てたとしても複雑性を取って 4 というのは意味のある選択だろう。
より強固にするには
今さら言う必要もないぐらいだが、そんなことより一番よいのはパスワードの最小長さを長くすることだ。
今回は 8 桁にしたが、たとえばこれを 9 桁にするだけで、 3 の場合で 1 億 3500 兆、 4 の場合で 1 億 500 兆パターンとなり、もはやさきほどの除外パターンなど気にならないレベルになる。
10 文字なら 83 京パターン(笑) が得られ、 16 文字程度にすればより天文学的な数字になる。これをブルートフォース攻撃で破ろうというのは割に合わないので、攻撃者は別のアプローチを試すだろう。
ちなみに少々古いデータだが 2008 年に IPA が発表しているところによれば、当時の PC を使ってブルートフォース攻撃でパスワードを破るには 3 の場合(半角英数字✕ 8 桁)で約 50 年、 10 桁にすると約 20 万年かかるという。
ちなみに 内閣サイバーセキュリティーセンターのハンドブック によれば「ログインパスワードは、少なくとも**“英大文字小文字+数字+記号で10桁以上”**」が推奨されている。記号が使用できないサービスもまだまだ多いため、 12 桁以上は確保したほうがよさそうだ。
みなさんも普段お使いのパスワードが脆弱なものになっていないか、今一度ご確認いただきたい。