パスワード強度チェッカー (zxcvbn)

zxcvbn

パスワード強度を判定します ( 推定クラック時間も算出します )。
パスワードの強度を判定してくれるライブラリ zxcvbn を利用しています。

はじめに

「パスワードの強度を判定」するツールにご注意を を見て、この記事にて言及されているオープンソースのパスワード強度チェックツール zxcvbn を利用したパスワード強度チェッカーを作ってみました。

zxcvbn によるパスワード強度の判定がどんなものかは zxcvbn: realistic password strength estimation が参考になります。

※写真 : 写真素材ぱくたそ

パスワード強度チェッカー

チェックしたいパスワードを入力しよう

チェック結果

※詳細のパラメータの意味は後述

チェック結果 ( 詳細 )

特徴

特徴としては

  • 単純な記号や数字の利用による強度判定を否定
  • 文字の置き換えを考慮 ( l33t  substitution 等 )
    s -> $, a -> @, l -> 1, e -> 3 等の置き換えが代表的。文字種を増やす事には貢献するが、この種の置き換えはよく知られており、現在ではパスワードの強度を増す事にはならないとされている。
  • 一般的な単語をランダムに並べた十分な長さのパスワードは許可
    関連のない単語をランダムに並べた十分な長さの文字列をコンピュータが予測するのは困難

といった点があげられるかと思います。上記リンク先 ( zxcvbn: realistic password strength estimation ) にはどういった考えの元強度判定を行っているかの説明があります。
また、上記基準を満たす例に対する各種サイトでの判定に関しても記載があります ( 以下 )

パスワード例 強度判定
qwER43@! キーボード配列順にタイプした悪い例。だがこの例が Great (Strong) と判定されるサイトは多い。
zxcvbn では Weak と判定される。
Tr0ub4dour&3 文字が置き換えられている例。
Tr0ub4dour は Troubadour になる。
correcthorsebatterystaple 記号や数字がないためこの例が Weak 判定されるサイトは多いが、zxcvbnでは十分な強度と判定される。

インストール手順

インストール手順に関しては、README.md に記載があります。
簡単に言えば、

  • zxcvbn をWebサイトに追加すればOK

との事。以下手順を書いてみます。

  1. 以下 Javascript ファイルを取得し、Webサイトの適当なディレクトリに配置します。
    • zxcvbn.js
    • zxcvbn-async.js
  2. zxcvbn を利用するページで zxcvbn.js を読み込みます。
  3. <script type="text/javascript" src="zxcvbn.js">
    </script>
    
  4. チェック対象のパスワードを引数にして zxcvbn() を呼出し、結果をチェックします。
    var result = zxcvbn(password);
    

    result オブジェクトには以下のプロパティが含まれます。

    result.entropyエントロピー (ビット)
    パスワードの「乱雑さ」「複雑さ」を表す指標と捉えればよいと思う。
    result.crack_time推定クラック時間 (秒)
    result.crack_time_displayresult.crack_time と同じ。より判りやすい表現にしたもの。
    "instant", "6 minutes", "centuries" 等
    result.score0, 1, 2, 3, 4 の何れか。
    それぞれ crack_time が [10**2, 10**4, 10**6, 10**8, 無限] より小さい場合に設定される。
    パスワード強度のバー表示に利用できる
    result.match_sequenceエントロピー計算に用いたパターンのリスト
    result.calc_time答えを計算するのにかかった時間 (ミリ秒)
    通常は数ミリ秒

まとめ

有名サイトにおけるパスワード強度チェックでも意外と当てにならない場合があるようです。

もし構築しているサイトでパスワードの強度チェック機能を実装する場合、xzcvbn の利用を考えてみてはいかがでしょうか。
下手な独自ロジックを利用するよりは妥当な強度チェックが行えるのではないかと思います。

自分が利用しているパスワードの強度チェックを行いたい場合もどうぞ。
※当ページでは弊社サーバへのパスワード送信等は行っていません ( zxcvbn を利用した Javascript でのチェックのみ実施 )