Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

FIDOのキホン

3,374 views

Published on

#idcon vol.25 fidcon 勝手に Meet up!で発表した内容です。

Published in: Technology
  • Be the first to comment

FIDOのキホン

  1. 1. FIDOのキホン idcon vol.25 fidcon 勝手に Meet up! ヤフー株式会社 2018/10/03 @kg0r0
  2. 2. 社内における認証をよりセキュアで使いやすくする取り組み 興味のある方は是非一緒にどうですか?? 新卒入社2年目 システム統括本部 プラットフォーム開発本部 アイデンティティ&アクセスマネジメント部 自己紹介 合路 健人
  3. 3. アジェンダ 3 1. パスワード認証の課題 2. FIDOとは 3. FIDOの技術仕様 4. デモ 5. まとめ
  4. 4. 4 パスワード認証の課題
  5. 5. 5 パスワード認証の課題(利便性) こんなことはありませんか  認証機会の増加  サービスごとに異なるパスワードを登録  複雑なパスワードの入力操作が不便
  6. 6. 6 パスワード認証の課題(安全性) Client Relying party username + password DB DB LeakPhishing Password List Attack Dictionary Attack
  7. 7. 7 FIDOとは
  8. 8. 8 FIDO(Fast IDentity Online) パスワードへの依存度を減らし、利便性と安全性を向上する Poor Easy WeakStrong USABILITY SECURITY USABILITYSECURITY https://www.slideshare.net/FIDOAlliance/fido-83445442https://www.slideshare.net/FIDOAlliance/introduction-to-fido-alliance-66730790
  9. 9. 9 FIDO認証モデル AuthenticatorUser verification FIDO Authentication challenge gesture signature privatekey publickey  公開鍵暗号方式による認証  オンラインサービスへの登録時に鍵ペアを生成して登録
  10. 10. 10 利便性  認証行為が容易  複数のパスワードを覚える負担を軽減
  11. 11. 11 認証行為が容易  生体認証の導入 • 指紋・虹彩・顔・声紋など  認証器を指定・選択できるポリシー • 認証器の多様性 • 認証器の選択 AuthenticatorUser verification https://www.slideshare.net/FIDOAlliance/getting-to-know-the-fido-specifications-technical-tutorial
  12. 12. 12 複数のパスワードを覚える負担を軽減  パスワード(記憶) • 本人のみが記憶している情報  認証器(所持) • 本人のみが所持している物 • 認証器が利用者本人を検証する機能を持つ
  13. 13. 13 安全性  クレデンシャル情報の通信経路  プライバシーの保護  認証器の信頼性
  14. 14. 14 クレデンシャル情報の通信経路 パスワード認証 リモート認証 (ユーザー名, パスワード) ローカル認証 (指紋など) リモート認証 (署名) FIDO認証モデル User Client User Authenticator client Relying party Relying party
  15. 15. 15 プライバシーの保護 FIDO Authentication Kpub1 Kpub2 RPごとに鍵ペアを生成して登録 rpid1(origin) rpid2(origin) Relying party1 Relying party2 Client  リスト型攻撃に対する耐性  フィッシングに対する耐性 Authenticator Kpriv1 Kpriv2 User Presence
  16. 16. 16 プライバシーの保護(リスト型攻撃) Authenticator FIDO Authentication Kpub1 Kpriv1 RPごとに異なる公開鍵を登録 Kpriv2 rpid1(origin) rpid2(origin) Relying party1 Relying party2 Client Kpub2 User Presence
  17. 17. 17 プライバシーの保護(フィッシング対策) FIDO Authentication Kpriv1 RPごとに異なる秘密鍵を保管 Kpriv2 Client User Presence Kpub1Relying party1 Relying party2 Kpub2 Authenticator Relying party3
  18. 18. 18 認証器の信頼性 Attestation & Metadata Authenticator Registration Attestation privKey Metadata Authentication Keys Signed Attestation Object Relying party Attestation pubKey Attestation Certificate
  19. 19. 19 FIDOの技術仕様
  20. 20. 20 FIDOの3つの技術仕様  FIDO UAF(Universal Authentication Framework)  FIDO U2F(Universal 2nd Factor)  FIDO2
  21. 21. 21 FIDO UAF  パスワードレス型(所持+生体など)  主にスマートフォン端末での利用を想定  生体認証などの認証手段によりパスワードレスを実現 https://www.slideshare.net/FIDOAlliance/fido-83445442
  22. 22. 22 FIDO U2F  パスワード補完型(記憶+所持)  主にPC上でWebブラウザの利用を想定した二要素認証  着脱方式と無線方式に対応 https://www.slideshare.net/FIDOAlliance/fido-83445442
  23. 23. 23 UAFとU2F  ユースケースが異なる • UAF(FIDOクライアント=アプリ) • U2F(ブラウザから利用できるが二要素認証)  ブラウザからパスワードレス認証を!! https://www.slideshare.net/FIDOAlliance/fido-83445442
  24. 24. 24 FIDO2 FIDO認証対応プラットフォームの拡大 Web Authentication API ブラウザからクレデンシャルにアクセスするAPI CTAP クライアントと外部認証器間の通信をサポートするプロトコル FIDO UAF FIDO U2F (@FIDO) CTAP (@FIDO) WebAuthn (@W3C) FIDO2 Project
  25. 25. 25 Web Authentication API ブラウザからクレデンシャルにアクセスするAPI  ブラウザの標準インターフェース  Credential Manegement API の拡張  登録 : navigator.credentials.create()  認証 : navigator.credentials.get()
  26. 26. 26 登録 : navigator.credentials.create() navigator.credentials.create({ publicKey: { rp: { name: "Acme” }, user: { id: new Uint8Array(16), name: "john.p.smith@example.com", displayName: "John P. Smith” }, pubKeyCredParams: [{ type: "public-key", alg: -7 }], attestation: "direct", timeout: 60000, challenge: new Uint8Array([ 0x8C, 0x0A, 0x26, 0xFF, 0x22, 0x91, 0xC1, 0xE9, 0xB9, 0x4E, 0x2E, 0x17, 0x1A, 0x98, 0x6A, 0x73, 0x71, 0x9D, 0x43, 0x48, 0xD5, 0xA7, 0x6A, 0x15, 0x7E, 0x38, 0x94, 0x52, 0x77, 0x97, 0x0F, 0xEF ]).buffer }}) .then((cred) => { console.log("NEW CREDENTIAL", cred); }); サンプル
  27. 27. 27 認証 : navigator.credentials.get() navigator.credentials.get({ publicKey: { timeout: 60000, challenge: new Uint8Array([ 0x79, 0x50, 0x68, 0x71, 0xDA, 0xEE, 0xEE, 0xB9, 0x94, 0xC3, 0xC2, 0x15, 0x67, 0x65, 0x26, 0x22, 0xE3, 0xF3, 0xAB, 0x3B, 0x78, 0x2E, 0xD5, 0x6F, 0x81, 0x26, 0xE2, 0xA6, 0x01, 0x7D, 0x74, 0x50 ]).buffer, allowCredentials: [{ id: cred.rawId, transports: ["usb", "nfc", "ble"], type: "public-key " }] }, }).then((assertion) => { console.log("ASSERTION", assertion); }); サンプル
  28. 28. 28 登録フロー(概略) Authenticator Client Relying party challenge, userInfo challenge, RP ID, userInfo counter++ counter, Kpub, attestCert, attestSign(C, etc) counter, C, S, etc KpubAttstでSを検証 Kpubを保管 RP IDの検証 C S 鍵ペアを生成 (Kpriv, Kpub)
  29. 29. 29 認証フロー(概略) Authenticator Client Relying party C S KpubでSを検証 RP IDなどの検証 鍵ペアの検索 Kprivで署名 counter++ counter, signature(C, etc) counter, C, S challenge, RP ID, userInfo challenge, userinfo Kpubを取り出す
  30. 30. 30 チャレンジレスポンス方式(認証) Authenticator Client Relying party S KpubでSを検証 Kprivで署名 signature(challenge) S challenge challenge Kpubを取り出す
  31. 31. 31 フィッシング対策(認証) Authenticator Client Relying party C S KpubでSを検証 RP Idの検証 C・S challenge, RP ID challenge Kprivで署名 signature(challenge) Kpubを取り出す
  32. 32. 32 リプレイアタック対策(認証) Authenticator Client Relying party C S counter, signature(C, counter) counter, C, S challenge, RP ID challenge Kpubを取り出す Kprivで署名 counter++ KpubでSを検証 RP Idの検証 counterの検証
  33. 33. 33 RP固有の鍵ペア(認証) Authenticator Client Relying party C S Kprivで署名 counter++ counter, signature(C, etc) counter, C, S challenge, RP ID, userInfo challenge, userinfo 鍵ペアの検索 KpubでSを検証 RP Idなどの検証 Kpubを取り出す
  34. 34. 34 RP固有の鍵ペア(登録) Authenticator Client Relying party challenge, userinfo challenge, RP ID, userInfo counter++ counter, Kpub, signature(C, Kpub, etc) counter, C, S, etc KpubでSを検証 RP ID, counterを検証 C S 鍵ペアを生成 (Kpriv, Kpub)
  35. 35. 35 Attestation(登録) Authenticator Client Relying party challenge, userinfo challenge, RP ID, userInfo counter++ counter・Kpub・attestCert・attestSign(C, etc) counter, C, S, etc C S 鍵ペアを生成 (Kpriv, Kpub) KpubAttstと KpubでSを検証 RP Idなどの検証
  36. 36. 36 CTAP クライアントと外部認証器間の通信をサポートするプロトコル  物理的に異なるクライアントと外部認証器が連携  USB・BLE・NFC などをサポート USB, BLE, NFC, Authenticator client
  37. 37. 37 様々な認証器に対応 https://www.slideshare.net/FIDOAlliance/fido-83445442
  38. 38. 38 デモ
  39. 39. まとめ 39  パスワード認証は利便性と安全性に問題  FIDO認証は公開鍵暗号を応用しパスワード認証の課題を解消  FIDO2プロジェクトにより認証対応プラットフォームの拡大
  40. 40. 40 参考 • FIDO認証の概要説明 https://www.slideshare.net/FIDOAlliance/fido-83445442?ref=https://fidoalliance.org/presentations/ • 次世代認証プロトコルFIDOの動向 https://techblog.yahoo.co.jp/security/fido-introduction/ • Webauthn-isig http://slides.com/herrjemand/webauthn-isig • INTRODUCTION TO FIDO ALLIANCE https://www.slideshare.net/FIDOAlliance/introduction-to-fido-alliance-66730790 • MDN web docs WebAuthentication API https://developer.mozilla.org/en-US/docs/Web/API/Web_Authentication_API

×