続パスワードの定期変更は神話なのか

2008年2月にパスワードの定期変更は「神話」なのか? - ockeghem(徳丸浩)の日記を書いた時の反応は、賛否両論という感じだったが、その後、twitterでのつぶやきなどを見るに、「パスワードは定期変更しなくてもいいんじゃない?」という意見は、セキュリティの専門家にも多くなっているような印象を受けている。
そのよう状況の中、以下の記事を読んだ。

辞書攻撃がうまくいかない場合、クラッカーは総攻撃(ブルートフォース攻撃とも言います)を仕掛けます。【中略】仮に1秒間に1000万回の計算ができるとすれば、パスワードのクラックに要する時間は1年にもなりません。どんなに強固なパスワードであっても、1年ももたないということになります。だからこそ、3カ月に1回とか半年に1回はパスワードを変更する必要があるのです。(2ページ目より引用)

http://www.itmedia.co.jp/enterprise/articles/1012/07/news010.html

面白い。1年間でパスワードが破られるという条件(1年で全てのパスワードのパターンを試行できる)下で、パスワードを半年に1度、あるいは3ヶ月に1度変更すると、パスワードはどの程度「破られにくく」なるのか計算で求めてみよう。

まず、半年に1回変更するケース。半年では全てのパスワードパターンの半分を試しているわけだから、最初の半年でパスワードが破られる確率は0.5、破られない確率も0.5。一年を通じてパスワードが破られない確率は、0.5 * 0.5 = 0.25。すなわち、一年間のうちにパスワードが破られる確率は 0.75 となる。
3ヶ月に1度ならどうか。3ヶ月でパスワードが「破られない」確率は0.75だから、1年間パスワードが破られない確率は 0.75の4乗だ。

0.75 ^ 4 = 0.3164

すなわち、一年間でパスワードが破られない破られる確率は、1 - 0.3164 で約 0.68 となる。

つまり、パスワードを3ヶ月毎に変更しても、68%の確率で破られるのだ。これで「安全になる」と言えるのだろうか。

ついでに、究極の定期変更として、ワンタイムパスワードだったらどうか。ものすごく安全性は高まるのだろうか。
ワンタイムトークンなどては、よく6桁の数値がワンタイムパスワードとして表示される。このパターンで計算してみよう。6桁整数のワンタイムパスワードを100万回試すという想定だ。一回あたりの試行で「破られない」確率は、1 - 1/100万 = 0.999999、それが100万回破られない確率には、

0.999999 ^ 1000000 = 0.3679

すなわち、100万回の試行でパスワードが破られる確率は、約 0.63 となる。

どんなに頻繁にパスワードを変更しても、パスワード変更による効果というのはこの程度なのだ。簡単に言えば、100%の確率を60〜70%に減らす程度の効果しかない。こんなあやふやなものに認証を頼るわけにはいかない。

では、なにが悪かったかというと、「全てのパスワードを試行できる」という前提がおかしい。この条件で安全性を保つ方法はない。
どうすればよいか。その答えは二つ。

  • パスワードの文字種・桁数を増やすことにより、パスワードのパターン総数を増やす
  • アカウントロックを実装してパスワード試行を妨害する

どちらも、パスワードの定期変更に掛かるコストよりもずっと簡単で効果が明確だ。
パスワードの定期変更が必要という主張は、いったん疑った方がよいだろう。意味がある場合もあるが、それは特殊なケースだけだ。

PS
本を書いています。認証についても一生懸命書いています。出るのは来年になりそうで、もうしばらくお待ちください。