パスキーは「パスワードの後に使う 2 要素目」ではなく、パスワードの代わりとして実装する
パスキーを追加できても、ログイン時に先にパスワードを入れないとパスキーを使えない実装では、パスワードが漏れる・推測される・フィッシングされるリスクが残ったままになる。パスキー単体でログインできるようにしてよい。
どんな実装が問題か
note が 2 段階認証を全クリエイターに開放した際、画面上は「パスキーを追加」になっていたが、ログインするときはパスワードを入力しないとパスキーを使えなかった。@agektmr(Eiji Kitamura さん)は「パスキーはパスワードの代わりなので、パスキーだけでログインできて問題ない」と指摘している。
パスワードの後ろにパスキーを置くと:
- 利用者は毎回パスワードを入力するので、偽サイトにパスワードを入れてしまう機会が減らない。
- パスキーのフィッシング耐性(正規のドメインでしか署名しない性質)の利点を、ログインの入口で生かせない。
- 「パスワードがないと危険」という感覚から設計されがちだが、パスキー自体が端末の所持と生体認証・PIN による本人確認を含んでいる(崎村夏彦さんも、金融機関で WebAuthn を勧めた際に「パスワードがないのは危険」と言われた経験を挙げている)。
実装の方針
- ログイン画面でパスキーを最初から選べるようにする。ユーザー名欄に
autocomplete="username webauthn"を付け、条件付き UI(オートフィルからパスキーを選ぶ)を使う。 - WebAuthn の認証では
userVerification: "required"(またはpreferredで結果の UV フラグを確認)にし、パスキー単体で「所持+本人確認」の 2 要素を満たす扱いにする。 - パスワードは移行期間の代替手段として残してもよいが、パスキーでのログインに前置きしない。パスキーを登録した利用者には、パスワードの削除やパスワードログインの停止を選べるようにすると攻撃面がさらに減る。
- 端末紛失時の回復手段(別端末のパスキー、回復コードなど)は別に用意する。