WEBアプリケーションのセキュリティチェック項目の中に、
ログイン画面でアカウントの存在有無を検知されないことという項目がありますよね。
確かにその項目があることがありますが、それを満たしていないからといって問題(脆弱)であると考える必要はない項目だと思います。ID を公開していないサービスにおいては保険的対策の一種として機能するもの(根本的対策ではない)かと思います。
不親切なエラーメッセージにすることの目的と不利益
親切なエラーメッセージによって ID またはパスワードのどちらが間違っているか分かると、パスワード探索が容易になるという理由でこの対策が有効であると言われてきたかと思います。
しかしそれは、適切な強度のパスワードを設定しているユーザにとっては無関係です。パスワードが複雑であれば(十分な長さがあれば)、IDが分かったところで攻撃者はパスワードを当てることができません。
適切な強度のパスワードを設定しているユーザからすれば、エラーメッセージが不親切であることは不便になるだけであって、好ましい仕様であるとは言い切れません。
もし親切なエラーメッセージにしてもよいと考えるのであれば、ID とパスワードを同時に入力させずに、まずは ID を入力させてから次のステップでパスワードを入力させるというフォームにした方が自然で分かりやすいと考えられます。
これが Google のように、まずは ID を入力させてから次にパスワードを入力させるというフォームが増えてきた表面的な理由として考えられます。
また、そもそも ID を公開しているサービス(Twitter など)では、ログインフォームで ID を隠す必要がありません。そうした前提の違いによって、エラーメッセージを不親切にする理由がないケースもあります。
親切なエラーメッセージにすることによるデメリットに対する見解
ID を公開していないサービスがエラーメッセージを親切にしてしまうことで、ID の存在が(悪意のある)第三者にバレてしまうことによって何が問題となるでしょうか。
それは、脆弱なパスワードを設定しているユーザに対するパスワード探索が容易になるということです。
しかし、それに対しては別の根本的対策をすべきだと考えるのが、親切なエラーメッセージにしてしまって良いと考える第二の理由です。
根本的対策としては、ユーザに強度のあるパスワードを設定してもらうよう、次のような施策を行う事が考えられます。
- パスワード文字長の制限をなくす
- 複雑なパスワードを強制するために文字種混在を必須にする(これは賛否両論ありますが)
- 使いやすい UI にして、長いパスワード入力をすることの負担を軽減する(例えばパスワードの表示を可能にしたり、ID とパスワードの入力を同時ではなくそれぞれに分けるなど)
- 多要素認証を設定してもらう
パスワードを強固にしたり、多要素認証を設定すること、あるいはアカウントロック(同一IDに対するログイン施行の回数制限)を設けることが根本的対策であって、不親切なエラーメッセージにすることは対策ではないと考えることができます。そうなると不親切なエラーメッセージにするメリットが特にないことになりますので、だったら親切なエラーメッセージに倒したほうがよいだろうと考えるというわけです。
親切なエラーメッセージにすることによるメリット
親切なエラーメッセージというよりは、ID とパスワード入力を別々に分けることによるメリットがあります。
ひとつは、利便性があがるということです。ID を間違えたときに ID が間違っていることに気付けます。パスワードも同様です。
ふたつめは、パスワードの入力がしやすくなることで、強固なパスワードを設定してもらいやすくなるということです。
そしてみっつめは、フィッシングされにくくなるということです。フィッシングサイトでは通常、ID とパスワードの組を騙し取ろうとしますが、パスワード入力欄が最初から隠れていれば(ID 入力欄しか表示されていなければ)、もし誤ってフィッシングサイトにアクセスしてしまった場合にも、パスワードを盗み取られる可能性が少なくなります。
こうしたことを総合的に評価した上で、最初に示されていた「ログイン画面でアカウントの存在有無を検知されないこと」という要件はどのような意味を持つか(または無意味であるか)を検討することができます。
最後に
この回答は徳丸先生の資料セキュリティの都市伝説を暴くを参照しつつ私の見解を記述しています。
より正確な回答を知りたければ、コメント欄で示されているように徳丸先生の徳丸本第2版の当該項目を参照してみてください。何が書いてあるのか私も気になります。