少し前に書いた「キーストローク・ダイナミックスによる個人認証」の最後で同時入力を認識する認証を提案していたのを実際に作ってみた。

この方法では「↓, ↓+→, →+a」というようなコマンド入力で認証ができる。 「↓, ↓, →, →, a」と順番に押すだけでは認証は成功しない。

ソース表示

このサンプルの実装では、JavaScriptを使って入力されたキーと、そのキーが入力された時間を記録し、それをPHPに送信している。

そのデータを受信したPHPでは、1つ前の入力から150msec以内に次の入力があった場合、それを同時入力とみなしている。 3キー以上の同時入力はうまくできないことがあるので、すばやく連続入力して同時入力とみなされるように、少し長めの150msecに設定してある。 ゲームによくあるコマンド入力のような、入力の開始から終わりまでの時間制限はない。 失敗したらBackSpaceで入力を取り消すこともできる。

すばやく連続して押されたキーは同時入力とみなしているので、それらの順番が逆となっていても認証は成功する。 例えば、「a + s, d + f」と「s + a, d + f」は同じ入力とみなされる。 すばやく連続入力されたキーの入力順序を区別しないと、同時入力の認識とは違ったものになるが、それでも通常の入力よりは安全性が高くなる。

同時入力を認識することで、「a, s, d, f, g, h」というような単純なパスワードを「a + s + d, f, g + h」として、パスワード入力しているところを見られてもバレにくくすることができる。 キー入力の回数を増やすことなく、パスワードの安全性を高めることができるところがポイント。