パスワード強度について本気出して考えてみようとしたけどやめた

ここ数年、ログイン制のサイトでパスワードを設定するときによく見かける「パスワード強度」。これは、入力したパスワードの「強度」を随時計算し、「非常に弱い」「非常に強い」と言った単純明快な言葉で、我々にパスワードの安全性を提示してくれるものだ。この仕組みが、「password」や、「redfox」のような、どうしようもないパスワードを付けることがどれほど危ないかを知らしめ、よりセキュアなパスワードを付けるよう誘導するのに一役買っていることは想像に難くない。
かなりの広まりを見せているものだから、一つや二つ、定番の「パスワード強度」評価関数があるんじゃないか、と思って調べてみると、てんでばらばら。おい、これはどういうことだ?
1つ目の例として、IBMではパスワード強度のことを「パスワード・クオリティー」と呼んで、0〜16までのレベルを定義している。(http://www.ibm.com/developerworks/jp/lotus/iris_today/20010904_5.html)
ここの解説では、レベル6,8,10の要求定義だけが示されていて、ほかのレベルがどうなっているのかを読み取ることは出来なかったが、この3つだけでも、「パスワード強度」評価の方針を考える際の足がかりとしては十分。それらに共通する条件として、次の三つを見いだすことが出来る。

  • 最低パスワード長
  • 使用するシンボルと、その大まかな組み合わせ
  • 辞書攻撃への耐性

非常に単純明快な条件。それぞれの評価の実装にかかるコストも、3つめの辞書作成を除けば、高くなさそうだ。オリジナルの「パスワード強度」評価関数を構成するのも難しくないだろう。
2つめはcracklib。(http://sourceforge.net/projects/cracklib)
このライブラリは、指定したパスワードの辞書攻撃への耐性を確かめることが出来るライブラリらしい・・・?コードを流し読みしただけなので、断定は出来ないけど・・・。これだけでは、先ほど挙げたIBMの評価条件のうち最後の一つしか評価できないことになるので、辞書攻撃への耐性評価のために利用するのが良いように見える。
3つめはExt.us.PasswordMeter。(http://testcases.pagebakers.com/PasswordMeter/)
クライアントサイドで実行出来る、軽量の評価関数を用いている。パスワード長、使用シンボルの種類、シンボルの組み合わせに応じてスコアを付けているようだ。IBMの評価条件に照らし合わせると、最低パスワード長・使用するシンボルと、その大まかな組み合わせが、それらに一致する。
・・・あれ?この世のすべての評価関数を評価した訳じゃないけど、どれもこれもIBMが示している評価条件の一部ばかりじゃないか。
つまりは、だ。この3つの条件が「パスワード強度」評価関数のキモで、具体的にどう定義、評価付けするかは、評価関数の開発者にゆだねられる、ってことなのか・・・?