TutorialsTypetalk検索...ヌーラボについてヌーラボは最先端のコラボレーションツールを開発する集団です。TutorialsWebサービスでアカウントを登録する際、パスワードを入力する度にその安全度を表してくれる強度メーター。皆様もおそらく目にしたことがあるのではないでしょうか。GoogleやFacebook、Twitterのような大規模なサービスでも、サインアップ画面等に設置されています。Research)の論文によると類推されづらいパスワードを促してサービスの安全性を高めることに効果的だということが証明されています。お客様自身の大事な情報を守る上でとても重要なパスワード。ヌーラボアカウントでも、類推されにくいより強度の高い設定を促すためにパスワード強度メーターを設置しました。この記事では、パスワード強度メーターを設置するに当って得た知見をもとに、その裏側の仕組みをご紹介させていただきます。?そもそもパスワード強度とはなんなのか。要約すると、対象のパスワードの長さや複雑さ等を考慮して、類推されにくい安全性の高さを数値化したものです。ヌーラボアカウントでは、1から5の数値で評価しています。いった規則を満たすだけで本当に安全なのでしょうか?確かに、アルファベットがAからZ、数字が0から9、記号の96通り文字が8桁あれば、96の8乗で7200兆を超える気の遠くなるようなパターンが生成されます。コンピューターが単純に総当り攻撃をしかけても、簡単に到達する数値ではありません。測定の際に考慮する要点としてはこれだけでよさそうですね。しても自分が覚えやすい単純なもの、なにかしら意味付けられたものを設定しがちです。そのような類推されやすい単語を優先的に組み合わせて検証していく辞書を使った攻撃の前では、7200兆の膨大なパターンもある程度絞られて、類推される可能性も高くなります。以下の引用を御覧ください。一部ハッカーなどは「良く的中する効率が良い辞書」の育成の為に、「過去の流出したパスワードからの傾向性分析」などに血道をあげる者もおり、あるいはどちらの辞書が優秀か、ハッカー同士で競い合うケースもある。[Wikipedia]恐ろしい事この上なしですね。そのような意味付けられたパスワードも考慮して強度を測定する必要があるようです。?強度測定を実装する上で、他のサービスはどのような基準で測定を行っているのか調査しましたが、その基準は各サービスによって異なり、さらにほとんどがブラックボックスな状態でした。あるサービスで強いと測定されたものが、他のサービスでは弱いと測定されることが十分にあり得るのです。これでは、ユーザが混乱してしまいますね。zxcvbnという選択肢パスワード強度を測定するには、文字の種類や長さ等の一般的な規則だけではなく、様々な角度からパスワード強度を検証するアルゴリズムを持たせる必要があることは解りました。具体的な検証ポイントを0から考えるとなると、それこそサービス特有のブラックボックス化したものになりやすくユーザーを混乱させてしまうのではないかといった懸念が生まれます。それを踏まえた上で、オープンな資料やライブラリを調査していたところ、前述した要件を満たす素晴らしいものと出会いました。その名も、zxcvbnです。Dropbox社が提供するパスワード強度を測定するためのライブラリです。JavaScriptで実装されています。ヌーラボアカウントとしては測定用のAPIを設けてサーバーサイドで処理したいといった願望がありました。ヌーラボアカウント自体Javaで構築されているという背景や、zxcvbn自体Javaアプリケーションで利用したいといった声もIssuesに上がっていたこともあり、思い切ってJavaへのポーティングとJava版ライブラリとしての公開に踏み切りました。出来上がったのが、zxcvbn4jです。真のパスワード強度アルゴリズム実際にzxcvbnをJavaへポートする過程で、そのアルゴリズムを学びました。これは、ただ利用するだけでは得られない大きな知見です。興味深い内容であるため、以下にその5つのアルゴリズムご紹介させていただきます。~zxcvbnは10万個に渡るパスワードとして利用されやすい単語で構成された辞書を持ち、対象のパスワードと総当りでマッチングしています。等、パスワードとしてよく利用されているであろう文字列です。