認証について思うところ
昔から気になっていたことだが、Microsoftのアクチベーションのポリシーにはちょっと変わったところがあるように思う。
それは、認証に失敗したときに、
「アカウントのIDが違うのか、パスワードが違うのかを教えてくれる」
ということである。
今は亡きMicrosoftのメッセンジャー(その後Windows Liveとか言われてたやつ)もそうだったし、現在のMicrosoftアカウントというやつもそうなっている。
昔の私はMicrosoft信者であった。皆が得意げにJavaの設計論を語っている中、私はATLやDCOMを学習していたものだ。自分が担当するシステムの設計においても、MicrosoftのUIデザインを参考にしていたこともある。
そんな中、とあるシステムのログイン画面を設計しているときに、私はMicrosoftに倣って、認証失敗時に
「ログインIDが違います」
「パスワードが違います」
と別々に表示するように設計した。
結果、これはレビューで却下された。理由は想像するに容易いだろうが、
「それではセキュリティに問題がある。アカウントをハックしようとする者に対して必要以上の情報を提供してしまうことになる。」
ということだ。
そのとき私は、その却下理由に少し違和感を覚えていたが、こだわるほどの反論理由も執着心もなかったので、すんなり従ったが、今にして思うとどうだろう。
今では私はすっかり、Microsoftを微塵も信用しない人間になってしまったが、本件に関してのみ考えると、エラーメッセージを別々に表示することは別に悪くないと思う。そもそも、ログイン用のアカウントというのは大抵はメールアドレスであるからして、そんなものは最初から隠されていないのだ。
メールアドレスが違うのか、パスワードが違うのかを教えてくれるというのは、むしろユーザーにとって親切なのではないだろうか。それを「セキュリティを強固にする」という目的で隠すことに、どれほど効果があるのか私には疑問である。
また、パスワードの作成時に、「アルファベットと数字を混在させなければならない」というのもどうかと思う。そんな意味のわからない文字列を作るよりも、いわゆるパスフレーズという意味のある文章を使った方が良いのではないだろうか。
まあ、もっとも、一般ユーザーはいくつものパスワードやパスフレーズを覚えておけないだろうから、アカウントの管理はOSやブラウザの記録に任せておくのだろう。それであれば、そもそもログインに失敗することがないのだから、今回の話はそもそも起きないことに対するどうでもよい話ということになるのだろう。
確かに、長いパスフレーズをログインのたびに、iPhoneのようなデバイスで入力するのはしんどいものがある。そう考えるとやはり、ブラウザのキャッシュ機能やOSのキーチェーン管理は、しっかりしたものであって欲しいね。