Passkey
パスワードの代わりに端末の中にある秘密鍵で署名する仕組みのこと
秘密鍵は端末から出ず、ユーザ自身も知らないので、漏れない、盗めない、騙せない
仕組みの全体像
1. 登録時
端末(Authenticator)が鍵ペアを生成する
公開鍵だけをサーバに送って保存してもらう
秘密鍵は端末のセキュアな領域に閉じ込められ、外に出ない
サーバ → 端末
ランダムなチャレンジ文字列を送る
端末 → ユーザ
「秘密鍵を使うのでロック解除して」と生体認証を要求
端末 → サーバ
チャレンジを秘密鍵で署名したものを返す
サーバ
保存してある公開鍵で署名を検証 → OKならログイン成功
つまり送られるのは「署名」だけで、秘密鍵そのものもパスワードも一切ネットワークに出ない
生体認証はパスキーには直接は関係ない
端末ローカルで秘密鍵をアンロックするために使っているだけ
指紋や顔データはサーバに送られないどころか、端末の生体認証モジュールから外に出ない
生体認証は「鍵を使う人が本人か」を端末が確認する手段の一つにすぎない
従来手法と比べてすごいところ
table:_
パスワード パスワード+TOTP パスキー
サーバに秘密が渡る ✅ 毎回渡る ✅ 渡る ❌ 公開鍵のみ
サーバ侵害で漏れる ✅ ハッシュが漏れる ✅ シード漏洩リスク ❌ 公開鍵が漏れても無害
フィッシング耐性 ❌ 騙されて入力 ❌ コードも入力させられる ✅ ドメインに紐づく
ユーザが秘密を知る ✅ 知ってる(漏らせる) ✅ ❌ 知りようがない
特に強調すべき点:
パスワードが「サーバに渡らない」のではなく、そもそも存在しない
サーバ漏洩しても公開鍵しか出ないので、攻撃者は何もできない
フィシング耐性が仕組みで担保されている
パスキーは「どのドメイン用に作った鍵か」を覚えていて、偽サイトには署名しない
ユーザの注意力に依存しない
ユーザが秘密を知らない=渡しようがない
ソーシャルエンジニアリングで「パスワード教えて」が成立しない
https://www.youtube.com/watch?v=Ao2tY0J-xyE
https://youtu.be/joHJJSklFic?t=1413
パスキーは Apple、Google、Microsoft が協調して使う FIDO クレデンシャルの名前です。エンドユーザーのみなさんがパスワードの代わりとして認識し、直感的にログインできるよう「パスキー」というブランドとアイコンが決まりました。 passkeyがあれば自動的に2FAみたいな話をしてた気がする mrsekut.iconがあまりその辺を理解していない