Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Passkey 概論 ~ はてな 秋の京都オフ会 ~

Izuho Fujiwara
November 24, 2023
130

Passkey 概論 ~ はてな 秋の京都オフ会 ~

Izuho Fujiwara

November 24, 2023
Tweet

Transcript

  1. Passkey 概論
    ~ はてな 秋の京都オフ会 ~
    葬送のフリーレンがみたい
    id:fujishan2212
    1

    View full-size slide

  2. id:fujishan2212
    エンジニア
    自己紹介
    名前: 藤原 出帆 (ふじわら いずほ)
    生年月日: 2002年12月22日 (20歳)
    生まれと育ち: 岡山県 倉敷市
    所属: 東京電機大学 学部3年
    2

    View full-size slide

  3. 趣味
    ● Twitter の TL を下に引っ張ること
    ● Webサービスの設計を考えること
    ● Webセキュリティの文献を読むこと
    ● 麻雀 🥰
    ● VTuber 🥰
    ○ 星川サラ / 笹木咲 / 夢月ロア / はっか
    ● アニメ 🥰
    ○ 宇宙よりも遠い場所 / 日常 / メイドインアビス / の
    んのんびより / 女子高生の無駄遣い /
    あそびあそばせ / ひぐらし
    id:fujishan2212
    エンジニア
    3

    View full-size slide

  4. 🔑 Passkey ご存知ですか
    4

    View full-size slide

  5. Passkey とは
    ❏ パスワードなしでセキュアかつ簡単に認証を行う新しい方法
    5

    View full-size slide

  6. Passkey とは
    ❏ パスワードなしでセキュアかつ簡単に認証を行う新しい方法
    ❏ Passkey = multi-device FIDO credential
    ❏ FIDO 認証は公開鍵暗号方式を用いた認証の仕組み
    ❏ これに用いるクレデンシャルの1つが Passkey である
    6

    View full-size slide

  7. FIDO 認証の一般的なフロー
    ユーザー ブラウザ
    認証器 サーバー
    ① 認証要求
    ② 認証要求
    ④ チャレンジレスポンス
      (乱数を返却)
    ③ 乱数生成
    ⑤ 乱数, サイトの情報
    7

    View full-size slide

  8. FIDO 認証の一般的なフロー
    ユーザー ブラウザ
    認証器 サーバー
    ⑦ 署名要求
    ⑥ 確認
      (指紋, 顔認証, etc)
    ⑧ 乱数に署名
    ⑨ 署名返却
    ⑨ 署名返却
    ➉ 署名返却
    8

    View full-size slide

  9. FIDO 認証の一般的なフロー
    ユーザー ブラウザ
    認証器 サーバー
    ⑪ 署名の検証
    ⑫ 認証成功
    ⑬ 認証成功
    9

    View full-size slide

  10. FIDO 認証の一般的なフロー
    ユーザー ブラウザ
    認証器 サーバー
    ⑦ 署名要求
    ⑥ 確認
      (指紋, 顔認証, etc)
    ⑧ 乱数に署名
    ⑨ 署名返却
    ⑨ 署名返却
    ➉ 署名返却
    TPM と呼ばれるセキュリティチップの内部に
    秘密鍵は暗号化して保存
    10

    View full-size slide

  11. FIDO 認証の一般的なフロー
    ユーザー ブラウザ
    認証器 サーバー
    ⑦ 署名要求
    ⑥ 確認
      (指紋, 顔認証, etc)
    ⑧ 乱数に署名
    ⑨ 署名返却
    ⑨ 署名返却
    ➉ 署名返却
    TPM と呼ばれるセキュリティチップの内部に
    秘密鍵は暗号化して保存
    端末外に持ち出せない
    11

    View full-size slide

  12. Passkey とは
    ❏ パスワードなしでセキュアかつ簡単に認証を行う新しい方法
    ❏ Passkey = multi-device FIDO credential
    ❏ FIDO 認証は公開鍵暗号方式を用いた認証の仕組み
    ❏ これに用いるクレデンシャルの1つが Passkey である
    ❏ 従来の FIDO 認証では端末ごとに秘密鍵を所持していた
    ❏ 不便すぎて普及しなかった
    12

    View full-size slide

  13. Passkey とは
    ❏ パスワードなしでセキュアかつ簡単に認証を行う新しい方法
    ❏ Passkey = multi-device FIDO credential
    ❏ FIDO 認証は公開鍵暗号方式を用いた認証の仕組み
    ❏ これに用いるクレデンシャルの1つが Passkey である
    ❏ 従来の FIDO 認証では端末ごとに秘密鍵を所持していた
    ❏ 不便すぎて普及しなかった
    ❏ パスワードマネージャー × FIDO 認証
    ❏ 端末間での秘密鍵共有を可能に (= multi-device)
    13

    View full-size slide

  14. 💡 実装事例の紹介
    14

    View full-size slide

  15. 実装事例① - Google, Amazon
    ❏ ユーザー識別子の入力が必要な UX
    15

    View full-size slide

  16. 実装事例① - Google, Amazon
    16

    View full-size slide

  17. 実装事例① - Google, Amazon
    17

    View full-size slide

  18. 実装事例① - Google, Amazon
    18

    View full-size slide

  19. 実装事例① - Google, Amazon
    19

    View full-size slide

  20. 実装事例① - Google, Amazon
    ❏ ユーザー識別子の入力が必要な UX
    ❏ 2段階認証の要求がある (Amazon)
    ❏ Passkey を登録している人のみに選択肢を表示できる
    ❏ 混乱を防ぐことが出来る
    ❏ ユーザー識別子から紐づいているクレデンシャルを指定
    ❏ ユーザーに選択させることがない
    20

    View full-size slide

  21. 実装事例② - GitHub
    ❏ ユーザー識別子の入力が不必要な UX
    21

    View full-size slide

  22. 実装事例② - GitHub
    22

    View full-size slide

  23. 実装事例② - GitHub
    23

    View full-size slide

  24. 実装事例② - GitHub
    ❏ ユーザー識別子の入力が不必要な UX
    ❏ 2段階認証の要求がない
    ❏ Passkey を登録しているかどうかを確実に判定する方法がない
    ❏ “Sign in with passkey” の出し分けが難しい
    ❏ ユーザーにクレデンシャルを選択させる必要がある
    ❏ あまり選ぶ必要がある状況はなさそう?
    ❏ 複数アカウントの場合などは必要
    24

    View full-size slide

  25. 🤔 実装にあたって
    25

    View full-size slide

  26. ユーザー識別子を用いない Passkey による認証認可
    ❏ Client-side discoverable Credential
    ❏ 今までは ResidentKey って呼ばれてました
    26

    View full-size slide

  27. ユーザー識別子を用いない Passkey による認証認可
    ❏ Client-side discoverable Credential
    ❏ 今までは Resident Credential って呼ばれてました
    27

    View full-size slide

  28. ユーザー識別子を用いない Passkey による認証認可
    ❏ Client-side discoverable Credential
    ❏ ユーザー識別子すら用いない認証を可能にする
    ❏ クレデンシャルを指定せずユーザーに選ばせる
    28

    View full-size slide

  29. ユーザー識別子を用いない Passkey による認証認可
    ❏ Client-side discoverable Credential
    ❏ ユーザー識別子すら用いない認証を可能にする
    ❏ クレデンシャルを指定せずユーザーに選ばせる
    ❏ 2023年11月現在ほぼの環境で利用することが出来る
    ❏ 2022年11月辺りだと Android の Chrome が対応してなかった
    ❏ 1Password, LastPass, iCloud が Passkey に対応
    29

    View full-size slide

  30. Server-side Credential に関わる余談
    ❏ 秘密鍵を必ずしも認証器の中で保管する必要がない
    ❏ 物理キーに秘密鍵を保管するストレージは必ずしも必要ない
    ❏ Credential ID に暗号化した秘密鍵を含めてしまう
    ❏ 暗号化は物理キーのマスターキーで行う
    ❏ W3C の標準規格にもステートレスな実装方法として例示
    30

    View full-size slide

  31. “Sign in with passkey” の出し分けをどうやるか
    ❏ サイトに紐づくクレデンシャルがあるかどうかを確認できない
    ❏ 2023年11月現在そんな API は存在しない
    ❏ とにかく “Sign in with passkey” という選択肢を表示するしかない
    ❏ Passkey を利用していないユーザーからすると困惑
    ❏ なんらかの方法で Passkey を使用した端末を記憶する必要がある
    ❏ deviceId, fingerprint, etc…
    31

    View full-size slide

  32. ブラウザで配信画面をデザインできるサービス「スコラボ」
    32

    View full-size slide

  33. 配信素材を売買できるプラットフォーム「スコマド」
    33

    View full-size slide

  34. おしまい!
    34
    Special Thanks: tomo

    View full-size slide