IDまたはパスワードが違います#

昔の認証が必要なサイトでは、ID(やメールアドレスなど)とパスワードを一つのフォーム上で入力させ、まとめて検証するスタイルのものが多かった。

そして、その際のエラーメッセージは「IDが登録されていません」「パスワードが違います」 といったものではなく、 「IDまたはパスワードが違います」のような表記のものが多かった。

これは、前者の場合は攻撃者に対して「そのアカウントは存在する」ということを知られてしまうため、それを防ぐためのものであった。

昔の認証は「アカウント特定」と「本人確認」を「意図的に」混ぜて扱っていたのだ。

しかしながら、現代においてはIDを入力させ、それが成功した場合にパスワードを入力させる、といったUIが主流となっている。

最適な認証手段を提示する#

現代においては、パスワードによる認証は認証の一手段でしかない。

  • ワンタイムパスワード
  • SMS認証
  • パスキー

など、さまざまな方法がある。

これらを、ユーザーに対して柔軟に案内するための仕組みが一般的になっているのだ。

ただし、先にIDを確定しなければ、どの認証手段を提示すべきかは判断できない。

攻撃に対する思想#

セキュリティは、もはや存在秘匿だけで守れるものではなくなっている。

認証側では

  • レート制限 - 認証試行回数を制限し総当たり攻撃対策
  • 挙動監視 - 行動パターンによるスクリプト・ボット対策
  • リスクベース認証 - 状況に応じて追加認証を求めるなど認証強度を変化させる

といったものを組み合わせることによって、本人認証はより強固なものとなっている。

「量での試行を防ぐ」「正しいパスワードであっても怪しい場合は承認しない」「アカウントごとに状況を把握する」という思想を採ることで、旧来のIDを隠すことよりも大きなメリットを得られる。

つまり#

ID入力画面とパスワード入力画面が分かれたのはセキュリティが緩んだわけではない。

認証を「秘密を当てる行為」ではなく、「主体を特定し、状況に応じて検証を積み重ねるプロセス」として再定義した結果、ログインUIもそれに対応した構造へと変化した、といえるだろう。