パスワード定期変更不要から考えるクラッキングされないパスワード

総務省が定期的なパスワードを変更に懸念を示した事で、国内企業でパスワード運用ポリシー再検討が活発になってきたようです。2017年にアメリカの国立標準技術研究所(NIST)が同様のガイドラインを示した際には、多くの日系企業でパスワード運用の見直しを行なう動きは見られませんでした。今回の反応で総務省の影響力の大きさを改めて感じました。

ただ、巷では「パスワードの定期変更は不要」という部分だけが大きく取り上げられ、その理由を勘違いしている方が多く、従来のパスワード命名規則で運用しようとしているところも少なからずあるようです。今回は、なぜパスワードの定期変更は不要なのかについて、知っておいてもらいたい情報をシェアします。

クラッキングしやすいパスワード

例えば、次のような2つのパスワードがあるとします。

p@ssw0rd

flying green project monitor

1つ目のパスワード(P@ssw0rd)は、一般的に用いられているパスワード命名規則(大文字、小文字、記号、数字、8文字以上)を備えています。一方で、後者のパスワード(flying green project monitor)は小文字しか使われておらず、多くの企業や会員制WEBサイトではパスワードとして登録することはできないでしょう。

しかし、この2つのパスワードをクラッキングソフトで破ろうとした時、前者はパスワード命名規則を満たしていますが、おそらく一瞬で破られるでしょう。

市販されているグラフィックカードで、クラッキング用フリーソフトウェアを使って毎秒数百万のパスワードを推測できることを考慮すると、一般的な「8」文字のパスワードルールでは、もはや十分ではないことが容易に想像できます。適切なハードウェアを用いれば、パスワードを数時間でクラックしてオフラインにできると思われます。

そういった意味では、後者のパスワードも破られる可能性を秘めていますが、前者よりシンプルなルールなのに、クラッキングされるまでの時間が長く必要となり、クラッキングされる可能性は低くなります。

従来型のパスワード運用ルール

現在、日本国内で採用されているパスワード運用ポリシーは下記のようなものが多いようです。

  • 定期的に変更する(90日など)
  • パスワードの世代管理(3世代前まで利用不可)
  • 長いパスワードを使う(8文字以上)
  • 大文字・小文字・記号を混ぜる

このパスワード運用ポリシーは、システムのリソース制限の諸事情から、パスワードに利用できる文字数が制限されていた昔のシステムにおける妥協の産物です。メモリやディスクが安価に購入できるような現代に至っても、従来の命名規則を利用しつづけるのは利用者を不便にするだけだと考えます。

また、パスワードは簡単に「転送可能」である必要があります。「&」や「!」のような一部の文字はWebシステムやシェル上で特別な意味を持っていることがあり、転送する際に別の記号に変換され混乱を招く恐れがあります。

今後のパスワード運用ルール

システム側でパスワードの長さに制限がかかっていないという前提とはなりますが、下記のようなシンプルなパスワード運用ルールで現行以上のセキュリティを担保できます。

  • パスワードは18文字以上(ランダムに選択した単語4個)

パスワード強度の考え方

現在の運用は漏洩を前提とした対策

パスワードの持つ情報のエントロピー

エントロピーは「不規則性の程度を表す量」として利用される言葉です。パスワードのクラッキングとして用いられるブルートフォース攻撃で使われるパスワードは、5万語の辞書から5単語をランダムに選択、そうでないなら、5万語の辞書から3単語をランダムに選択すると言われています。この場合、前者はlog(50000^5,2) = 78.0、前者は、log(50000^3,2) = 46.8となります。

ここからは、従来のパスワード運用ルールがダメな理由を「情報のエントロピー」の考え方を使って説明していきます。

  • 定期的に変更する(90日など)
  • パスワードの世代管理(3世代前まで利用不可)

この2つの運用ルールの目的は下記2点だと考えられます。

  • 漏洩した時の被害を最小限にする
  • 定期的に違うパスワードを使うことによって、パスワードの組み合わせを増やす

この運用ルールの目的は、「漏洩」を前提とした運用ルールです。

90日(3ヶ月)でパスワードを変更する場合、1年で4つのパスワードが生み出されます。定期的にパスワードを変更することで、パスワードの組み合わせは4倍になりますが、対数を取ったエントロピーでは年にわずか2bit。そのシステムを10年間利用するとしても、40倍、エントロピーはたった5.3bitしか増えない計算になります。

  • 長いパスワードを使う(8文字以上)
  • 大文字・小文字・記号を混ぜる

この2つの運用ルールも現代では無意味に近いです。文字の種類を増やすより、文字数を増やした方が組み合わせの数が増えます。また、文字種を増やすと利用者がパスワードを覚えにくくなるデメリットも大きいため、利用者負担にしかなっていません。

総当たり攻撃をパスワードだけで防ぐことはできない

大文字・小文字・記号合わせて80種、パスワードの長さが8文字でランダムに生成したとしても、log(80^8,2) = 50.6bitです。一方で小文字だけで11文字ならlog(25^11,2) = 51.1bitとなり、大文字、記号を混ぜなくても小文字を3文字増やしただけで、文字種を増やすよりも強力かつ覚えやすいパスワードになります。

従来型のパスワード運用ルール4つを組み合わせた場合、ランダムな文字列だとしてもパスワードが持つ情報のエントロピーはせいぜい60bit程度です。それならば、「13文字以上」というだけのルールで強度は同等になります。

ただし、現実的な問題として、「ランダムな13文字」を覚えるのはかなり難しい行為です。円周率を覚えるようなもので、私には不可能です。そのため、実用的な文字列(英単語)を用いることになり、パスワードのエントロピーは上記の計算よりも30bit程度は少なくなると思われます。

エントロピーだけで、パスワードの総当たり攻撃を不可能にするにはランダムかつ長い文字列が必要となるため、実用という世界では難しいと思います。では、どうやってパスワードの解読を防げば良いのかについて引き続きシェアしていきます。

どうすればクラッキングを防げるか

ロックアウト機能を適用する

パスワードの生成を助けるツールとしてPWGenというツールがあります。このツールは、約8000の英単語からランダムに指定の数だけ単語を選択してくれる機能を備えています。ブルートフォース攻撃で用いられる「5万語の辞書からランダム」という点への対処としては弱いですが、ロックアウト機能を併用することで高いセキュリティを維持することができます。

ロックアウト機能とは、パスワードを「10回間違うと30分のアカウント停止」などで利用される機能です。
予め設定したパスワード失敗回数に到達すると一定時間のアカウント停止をシステムが自動で行ないます。

ロックアウトの設定は、ブルートフォース攻撃を不可能にするために有効です。WindowsOSのパスワードはクラッキング専用マシンを使えば総当たり攻撃で6時間もあれば破れてしまうそうです。つまり、90^127/2の組み合わせを6時間で試すという意味です。「10回間違うと30分ロックアウト」の仕組みがあると1時間で20回しか総当り攻撃を試みることができないので、現実的な時間でクラッキングすることが不可能になります。

パスワードだけではない組み合わせが重要

できるだけ長いパスワード+ロックアウト機能を組み合わせることで、パスワード総当り攻撃によるリスクは低減できます。ロックアウトではなく、二要素の認証を取り入れても良いでしょう。

セキュリティの世界は守るもの、攻めるものが日々戦いを繰り返しています。今日は守れても明日も守れるとは限りません。どうすれば利用者の負荷を高めることなくセキュリティを高めることができるのか、日々考えさせられる分野です。

さいごに…

「情報のエントロピー」を扱う学問は、20世紀初頭にシャノンという数学者がほぼ一人で完成させた「情報理論」で確立してていて、実はパスワードの堅牢性に関する議論は既にされつくしています。私のような素人が考えつくような瑣末なアイデアはとっくに検討されているので、企業でパスワード運用ルールを見直す場合には、素直に専門家の言うことを聞いた方が良いでしょう。ただ、様々な成約があるので難しい部分もあります。

たとえば、Microsoftのクラウドサービスのアカウントは、昔のしがらみで16文字の制限があります。そのため、ここで述べた「ランダムな英単語4個で18文字以上」を設定することは不可能です。「パスワードに大文字・小文字・記号を混ぜろ」というのは、こういう制限のあるシステムで、少しでも堅牢性を上げるための「妥協の産物」、綺麗に表現すれば「努力の結晶」なのでしょう。

パスワードの文字数制限のないサービスも増えてきているので、パスワードを見直す際には「英単語4つで18文字以上」を考慮して設定されてみてはいかがでしょうか。

created by Rinker
¥1,814 (2019/07/22 01:04:47時点 Amazon調べ-詳細)