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

oracle-cloud-hangout-cafe-seitaininshounoiroha

 oracle-cloud-hangout-cafe-seitaininshounoiroha

oracle4engineer

April 07, 2021
Tweet

More Decks by oracle4engineer

Other Decks in Technology

Transcript

  1. 生体認証のイロハ Oracle Cloud Hangout Cafe - Season 4 #1 Shuhei

    Kawamura Solutions Engineer Oracle Corporation Japan April 7th, 2021
  2. Copyright © 2021, Oracle and/or its affiliates 2 • (Shuhei

    Kawamura) • • • … • • SIer FW(Java) • • Cercle • etc. • OCHaCafe 1 2 !! @shukawam shukawam shukawam
  3. ゼロ・トラスト時代のセキュリティ対策 考慮点 ゼロトラストセキュリティの考え方 セキュリティ対策例 ネットワーク • 通信を監視し、未許可のクラウドサービスの利用を 制限 • CASB

    • Cloud Proxy • WAF デバイス • デバイスの認証を常に実施 • 全てのデバイスの保護を徹底 • EDR, EPP • MDM IDアクセス管理 • ID・ユーザを必ず検証 • 必要に応じて多要素認証(MFA)を実施 • IAM • MFA • FIDO アプリケーション • すべてのアクセスを制限し、不正操作を監視 • CASB, UEBA • 標的型メール対策 • SIEM, SOAR データ • データが漏洩・改ざんされないように保護 • 必要最小限の権限付与 • 暗号化 • アクセス制御 5 出典: Oracle and KPMG Threat Report 2020 安全なクラウドセキュリティ環境を整備するためには、ネットワークセキュリティだけでなく、 ゼロ・トラスト・セキュリティな対策が必要となる 5 Copyright © 2021, Oracle and/or its affiliates
  4. ユーザー • なるべく簡単にログインしたい • 自分の個人情報はしっかりと管理されていて 欲しい 管理者 • 推測されやすいようなパスワードは設定して ほしくない

    • 漏洩の元となる個人情報は管理したくない 一般的に広く使われている認証方式 (ID/Password)では、「Security」、「Usability」 ともに高い水準で満たすことは難しい ユーザー/管理者がIDアクセス管理に求めること Copyright © 2021, Oracle and/or its affiliates 6 Security Usability 理想的な状態
  5. 管理の煩雑さ(利便性)/流出の可能性(安全性) 管理の煩雑さ(利便性) • そもそも複雑なパスワードをサービス毎に使 い分けるのは、無理がある • あまり使わないサイトのパスワードは忘れて 毎回再設定をしている気がする • スマートフォン等の小型機器からの入力はか

    なり不便(特に複数文字種必要なやつ) 流出の可能性(安全性) • リスト型攻撃の被害を受けやすい • 通信経路上に資格情報が流れるのは、通信傍 受で抜き取られる可能性あり パスワード認証の抱える課題 Copyright © 2021, Oracle and/or its affiliates 7 サービスA サービスB サービスC サービスD ID/Password を入手… 攻撃者 (同一のID/Passwordの場合)不正アクセス成功 サービスA サービスB ユーザー ahYgd&1… d7uA$ha… 英字(大小), 数字, 記号, 最低xx文字 ….
  6. SMSやAuthenticator、生体情報を使用した多要素認証 MFA(Multi-Factor Authentication) • 認証方法の3要素である「記憶」、「所持」、 「生体情報」のうち複数要素を組み合わせる ことで安全性を高めている認証方式 • ID/Password(記憶) +

    SMS/Authenticator(所持) が個人的にはよく見かける 安全性を少しは高めることはできたが、 • 複雑なパスワードをサービス毎に使いわける • スマートフォン等の小型機器からの入力 等の利便性に関する課題や • 通信経路上を資格情報が流れる といった安全性に関する課題は依然として残った まま… パスワード認証の抱える課題(安全性)への代表的なアプローチ Copyright © 2021, Oracle and/or its affiliates 8
  7. 過度なパスワードへの依存を減らすことに注力したオープンな業界団体 FIDO = The Fast IDentity Online (高速なオンライン認証) • 2012年に設立されて、現在約250社で構成される非営利団体

    • ユーザー認証におけるパスワードへの依存度を減らしつつ、利便性と安全性の両方を向上させること を目指す FIDO Alliance is the global industry collaboration dedicated to solving the password problem … with no dependency on “shared secrets” FIDOアライアンスは、パスワード課題の解決に注力する グローバルな業界の連携であり、その特徴は 「共有の秘密」に依存しないことです。 FIDO Alliance Copyright © 2021, Oracle and/or its affiliates 10
  8. ユーザー、認証サーバで共有の秘密に依存する方式 一般的な検証の手順 • ユーザーがID/Passwordを認証サーバに対して 送信する • 認証サーバは受け取ったID/Passwordをあらか じめ保持している情報を用いて検証する 特徴 •

    ユーザー、認証サーバで秘密(Password)を共有 する仕組み • ユーザーの本人性を検証するために、認証 サーバに資格情報を送信する必要がある 共有の秘密に依存しているという事に着目し、 新しい認証規格を作成 → FIDO認証 今までの認証方式(パスワードを使用した認証方式) Copyright © 2021, Oracle and/or its affiliates 11 ユーザー (user001) 認証サーバ user001/Chsu&14h 共有の秘密(Password) 認証結果 資格情報 の検証
  9. ローカル検証とオンライン検証 FIDO認証モデル Copyright © 2021, Oracle and/or its affiliates 12

    認証サーバ ユーザー 公開鍵 秘密鍵 認証器 (Authenticator) 署名付きの 検証結果 利用者 情報(ID) FIDOの認証モデルは、 • 適切な秘密鍵を所有することを検証するロー カル検証 • 公開鍵暗号方式を使用したオンライン検証 に認証プロセスを分離している。 ローカル内で本人性の検証が完了することがポイ ント • 資格情報を認証サーバに送信することなく検 証が完了する • 認証サーバで資格情報を管理する必要がな い • 通信経路上も資格情報が流れない オンライン検証 ローカル検証 検証結果の検証 本人性の検証 (秘密鍵の所有検証)
  10. 認証プロセスの分離や「共有の秘密」に依存しないことによるメリット 認証サーバで、資格情報を管理する必要がない • サイバー攻撃でユーザーの個人情報が流出することがない • 認証サーバーで管理するのは、署名の検証に必要な公開鍵 • 個人情報は認証器の耐タンパ領域*に保存される • 特に生涯変更不可能な個人情報である生体情報を管理する必要がないことはかなりのメリット

    • サーバーに送信した場合、通信経路・サーバー上で様々な攻撃に晒されることに… 認証器の交換が可能 • 手元にある認証器で本人性の検証を実施するため、サーバ側の処理を変更することなく様々な認証器 に対応することができる • ユーザビリティ低下の原因となっていたパスワードを使用しないという選択肢も可能 • 認証器の例 • PIN、USBセキュリティキー、スマートカード、指紋、顔、虹彩、静脈、声紋 etc. • デメリット • 登録時に使用した認証デバイスがないと認証できない… FIDO認証モデルのメリット Copyright © 2021, Oracle and/or its affiliates 13 *耐タンパ領域: データの暗号化や署名に使用する鍵を安全に保管するための領域
  11. ポイントは、共有の秘密に依存しない新しい認証方式 管理の煩雑さ(利便性) • そもそも複雑なパスワードをサービス毎に使 い分けるのは、無理がある • あまり使わないサイトのパスワードは忘れて 毎回再設定をしている気がする • スマートフォン等の小型機器からの入力はか

    なり不便(特に複数種文字必要なやつ) 流出の可能性(安全性) • リスト型攻撃の被害を受けやすい • 通信経路上に資格情報が流れるのは、通信傍 受で抜き取られる可能性あり パスワード認証の抱える課題へのFIDO認証のアプローチ Copyright © 2021, Oracle and/or its affiliates 14 パスワード(記憶)に依存せずに、 本人性を検証する仕組みを導入することで 煩雑なパスワード管理から解放 • 不正アクセスの原因となる「共有の秘密」 を用いない • 認証サーバーで管理するのは、認証サー バー固有(ドメイン固有)の公開鍵のため別 サイトで流出してもリスト型攻撃の被害は 受けない
  12. パスワードレスの認証/2段階認証をサポート FIDO UAF (パスワードレス型) • UAF = Universal Authentication Framework

    • パスワードレスの認証体験をサポートしてい る • FIDO UAFの仕組みがインストールされたデバ イスを使用することにより、デバイスをオン ラインサービスに登録することができる https://fidoalliance.org/specifications/ FIDO U2F (パスワード補完型) • U2F = Universal Second Factor • FIDOセキュリティキー等を使用した2段階認証 をサポートしている • ユーザーのログイン処理に強力な2番目の要素 を追加することで、既存のパスワードのセ キュリティ強化を図る https://fidoalliance.org/specifications/ FIDO UAF/U2F Copyright © 2021, Oracle and/or its affiliates 17
  13. Webでパスワードレスの認証を目指した仕様 プラットフォームの認証器や外部の認証器を使用 した、パスワードレス・MFAサポートする • FIDO2 = WebAuthn + CTAP •

    WebAuthn(Web Authentication) • FIDO認証のサポートを可能にするためにブ ラウザ、プラットフォームに組み込まれて いる標準API • CTAP(Client to Authenticator Protocol) • ClientとAuthenticator(認証器)間の通信プ ロトコルのこと • WebAuthnを補完する仕様 FIDO2 Copyright © 2021, Oracle and/or its affiliates 18 https://fidoalliance.org/fido2-graphic-v2-2/?lang=ja UAF/U2Fを統合し、Webからパ スワードレス認証を可能とした 規格と見做せる!
  14. 19 Copyright © 2021, Oracle and/or its affiliates FIDO2対応の認証器 USB/NFC/BLE

    等対応の外部認証器や、端末付属の認証器など様々なデバイスで対応! Security Key by Yubiko Andoroid Windows Hello iPhone etc.
  15. WebAuthn • FIDO認証をWebで実施できるようにしたWeb API • Credential Management APIの拡張 • W3Cより2018年4月に勧告候補となり、2019年3月に正式勧告となった

    • 現在、主要なブラウザ・プラットフォームはWebAuthnをサポートしている • Chrome, Edge, Firefox, Safari, etc. • Windows 10, Mac, Android, iPhone, etc. • ユーザーの登録/認証用に2つのAPIを持つ • navigator.credentials.create() • publicKeyオプションと併用して、新しいアカウント/既存のアカウントに対して新規の非対称鍵ペアの関 連付けを行うために認証情報を作成する • navigator.credentials.get() • publicKeyオプションと併用して、サービスに対する認証のために、ログインまたは二要素認証として既存 の認証情報セットを取得する • セキュアコンテキスト(HTTPS or localhost)でのみ使用可能 FIDO2 – WebAuthn Copyright © 2021, Oracle and/or its affiliates 20
  16. navigator.credentials.create() FIDO2 – WebAuthn Copyright © 2021, Oracle and/or its

    affiliates 21 const credentialCreationOptions: CredentialCreationOptions = { publicKey: { rp: { name: 'Acme' }, user: { id: new Uint8Array(16), name: '[email protected]', 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 } }; navigator.credentials.create(credentialCreationOptions) // W3C WebAuthn .then(credential => console.log('NEW Credential!', credential)); https://developer.mozilla.org/ja/docs/Web/API/Web_Authentication_API publicKeyオプション 認証情報の新規作成
  17. navigator.credentials.get() FIDO2 – WebAuthn Copyright © 2021, Oracle and/or its

    affiliates 22 const credentialRequestOptions: CredentialRequestOptions = { publicKey: { timeout: 60000, allowCredentials: [{ id: cred.rawId, type: 'public-key', transports: [ 'ble’, 'internal’, 'nfc’, 'usb’ ] }], 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 } } navigator.credentials.get(crentialRequestOptions) // W3C WebAuthn .then(assertion => console.log('ASSERTION', assertion)); // … https://developer.mozilla.org/ja/docs/Web/API/Web_Authentication_API publicKeyオプション 既存の認証情報の取得
  18. クライアントと認証器間の通信をサポートするプロトコル CTAP = Client to Authenticator Protocol • CTAP(シータップ) •

    FIDO Allianceに策定されている仕様で、外部 認証器のインタフェースの仕様 • バージョン • CTAP1 • U2Fの仕様の一部で外部認証器との通信仕様 • CTAP2 • FIDO2用に拡張した通信仕様 • Resident Key(サービスの情報 + ユーザーの情 報を認証器内部に保存し、認証時のユーザビ リティを向上させる仕組み)等が追加 • トランスポート • USB • BLE • NFC • Internal FIDO2 – CTAP Copyright © 2021, Oracle and/or its affiliates 23 Client C T A P C T A P WebAuthn internal BLE/NFC USB Authenticator
  19. FIDO2 - ユーザーの登録フロー Copyright © 2021, Oracle and/or its affiliates

    26 Authenticator Relying Party Client(Browser/JS App) 1. ユーザーの登録要求 DB セキュア 領域
  20. FIDO2 - ユーザーの登録フロー Copyright © 2021, Oracle and/or its affiliates

    27 Authenticator Relying Party Client(Browser/JS App) 1. ユーザーの登録要求 2. challenge* etc. 生成 challenge DB *: リプレイ攻撃防止用のランダムなバイト列 セキュア 領域
  21. FIDO2 - ユーザーの登録フロー Copyright © 2021, Oracle and/or its affiliates

    28 Authenticator Relying Party Client(Browser/JS App) 1. ユーザーの登録要求 challenge 2. challenge etc. 生成 DB challenge セキュア 領域 3. RPで生成した情報をクライアントに返却する
  22. FIDO2 - ユーザーの登録フロー Copyright © 2021, Oracle and/or its affiliates

    29 Authenticator Relying Party Client(Browser/JS App) 1. ユーザーの登録要求 4. navigator.credentials.create() RPから取得した情報を使用して、WebAuthnを実行する。 DB challenge 2. challenge etc. 生成 challenge 3. RPで生成した情報をクライアントに返却する セキュア 領域
  23. FIDO2 - ユーザーの登録フロー Copyright © 2021, Oracle and/or its affiliates

    30 Authenticator Relying Party Client(Browser/JS App) 1. ユーザーの登録要求 4. navigator.credentials.create() 認証器のauthenticatorMakeCredential()を実行する challenge DB challenge 3. RPで生成した情報をクライアントに返却する 2. challenge etc. 生成 4. authenticatorMakeCredential() セキュア 領域
  24. FIDO2 - ユーザーの登録フロー Copyright © 2021, Oracle and/or its affiliates

    32 Authenticator Relying Party Client(Browser/JS App) 1. ユーザーの登録要求 4. navigator.credentials.create() 5. 鍵ペア、 Attestation*生成 public key private key 3. RPで生成した情報をクライアントに返却する DB challenge *: 認証用の公開鍵、Credential ID、署名などをまとめた情報 challenge 2. challenge etc. 生成 保存 4. authenticatorMakeCredential() セキュア 領域
  25. Attestation • 新しく生成・登録するユーザーの公開鍵が、正しくFIDO2の認定を受けている認証器で生成された公 開鍵であるかを保証する機構のこと(≒認証器の妥当性の確認) • Relying Partyでは、Attestationを確認してユーザーの登録処理(公開鍵の登録処理)を完了する • 偽の認証器をつかまされたユーザーの登録を防ぐことができる •

    Attestationの確認 • 認証器の出荷時にFIDO認証ベンダーから埋め込まれた秘密鍵を使用して、署名を生成 • Relying Partyでは、FIDO認証ベンダーの公開鍵(ルート証明書)を使用して署名を検証する (参考) FIDO2におけるAttestation Copyright © 2021, Oracle and/or its affiliates 33
  26. FIDO2 - ユーザーの登録フロー Copyright © 2021, Oracle and/or its affiliates

    34 Authenticator Relying Party Client(Browser/JS App) 1. ユーザーの登録要求 4. navigator.credentials.create() 6. PublicKeyCredential 3. RPで生成した情報をクライアントに返却する DB challenge 認証器が生成した情報がクライアントに返却される { id: "xTzphZPuJyfW12TAT…", // rawIdをbase64urlエンコードしたもの rawId: ArrayBuffer(64) {}, // Credentialを識別するID response: { // 認証用の公開鍵やcredentialID、署名などが含まれている attestationObject: ArrayBuffer(1024) {}, // challengeやoriginなどが含まれている clientDataJSON: ArrayBuffer(116) {} }, type: "public-key" } challenge public key 2. challenge etc. 生成 5. 鍵ペア、 Attestation生成 private key 4. authenticatorMakeCredential() セキュア 領域
  27. DB 3. RPで生成した情報をクライアントに返却する FIDO2 - ユーザーの登録フロー Copyright © 2021, Oracle

    and/or its affiliates 35 Authenticator Relying Party Client(Browser/JS App) 1. ユーザーの登録要求 4. navigator.credentials.create() 6. PublicKeyCredential { id: “xTzphZPuJyfW12TAT…“, rawId: ArrayBuffer(64) response: { attestationObject: ArrayBuffer(1024), clientDataJSON: ArrayBuffer(116) {} }, type: "public-key“ } 7. attestationObject, clientDataJSON challenge public key challenge 2. challenge etc. 生成 5. 鍵ペア、 Attestation生成 private key 4. authenticatorMakeCredential() セキュア 領域
  28. FIDO2 - ユーザーの登録フロー Copyright © 2021, Oracle and/or its affiliates

    36 Authenticator Relying Party Client(Browser/JS App) 1. ユーザーの登録要求 4. navigator.credentials.create() 6. PublicKeyCredential 7. attestationObject, clientDataJSON 8. 検証、 公開鍵の保存 認証器が生成した情報をWebAuthn仕様に基づき検証する https://www.w3.org/TR/webauthn/#sctn-registering-a-new- credential DB challenge public key challenge 2. challenge etc. 生成 3. RPで生成した情報をクライアントに返却する 4. authenticatorMakeCredential() 保存 5. 鍵ペア、 Attestation生成 private key セキュア 領域
  29. FIDO2 - ユーザーの登録フロー Copyright © 2021, Oracle and/or its affiliates

    37 Authenticator Relying Party Client(Browser/JS App) 1. ユーザーの登録要求 4. navigator.credentials.create() 6. PublicKeyCredential 7. attestationObject, clientDataJSON 8. 検証、 公開鍵の保存 DB 2. challenge etc. 生成 3. RPで生成した情報をクライアントに返却する 4. authenticatorMakeCredential() 5. 鍵ペア、 Attestation生成 private key セキュア 領域 public key 再利用されることを防ぐために、生成したchallengeは破棄する
  30. FIDO2 - ユーザーの登録フロー Copyright © 2021, Oracle and/or its affiliates

    38 Authenticator Relying Party Client(Browser/JS App) 1. ユーザーの登録要求 4. navigator.credentials.create() 6. PublicKeyCredential 7. attestationObject, clientDataJSON 8. 検証、 公開鍵の保存 DB 2. challenge etc. 生成 3. RPで生成した情報をクライアントに返却する 4. authenticatorMakeCredential() 自分で実装する必要がある ブラウザ + 認証器が処理するため、 実装上はそこまで気にする必要はない 5. 鍵ペア、 Attestation生成 セキュア 領域
  31. FIDO2 - ユーザーの認証フロー Copyright © 2021, Oracle and/or its affiliates

    40 1. ユーザーの認証要求 Authenticator Relying Party Client(Browser/JS App) public key DB セキュア 領域 private key
  32. FIDO2 - ユーザーの認証フロー Copyright © 2021, Oracle and/or its affiliates

    41 1. ユーザーの認証要求 Authenticator Relying Party Client(Browser/JS App) 2. challenge etc. 生成 challenge DB セキュア 領域 保存 public key private key
  33. FIDO2 - ユーザーの認証フロー Copyright © 2021, Oracle and/or its affiliates

    42 1. ユーザーの認証要求 Authenticator Relying Party Client(Browser/JS App) セキュア 領域 DB 2. challenge etc. 生成 challenge public key challenge 3. RPで生成した情報をクライアントに返却する private key
  34. FIDO2 - ユーザーの認証フロー Copyright © 2021, Oracle and/or its affiliates

    43 1. ユーザーの認証要求 Authenticator Relying Party Client(Browser/JS App) 2. challenge生成 4. navigator.credentials.get() RPから取得した情報を使用して、WebAuthnを実行する。 セキュア 領域 DB public key challenge 3. RPで生成した情報をクライアントに返却する private key challenge
  35. FIDO2 - ユーザーの認証フロー Copyright © 2021, Oracle and/or its affiliates

    44 1. ユーザーの認証要求 Authenticator Relying Party Client(Browser/JS App) 2. challenge生成 4. navigator.credentials.get() DB public key challenge 認証器のauthenticatorGetCredential()を実行する challenge セキュア 領域 3. RPで生成した情報をクライアントに返却する 4. authenticatorGetCredential() private key
  36. FIDO2 - ユーザーの認証フロー Copyright © 2021, Oracle and/or its affiliates

    46 1. ユーザーの認証要求 Authenticator Relying Party Client(Browser/JS App) 2. challenge生成 4. navigator.credentials.get() DB public key challenge challenge セキュア 領域 3. RPで生成した情報をクライアントに返却する 4. authenticatorGetCredential() 5.ユーザー検証、 Assertion*生成 private key challenge 署名 *: 認証器による本人性の検証結果を表す情報
  37. FIDO2 - ユーザーの認証フロー Copyright © 2021, Oracle and/or its affiliates

    47 1. ユーザーの認証要求 Authenticator Relying Party Client(Browser/JS App) 2. challenge生成 4. navigator.credentials.get() 6. PublicKeyCredential DB public key challenge 5.ユーザー検証、 Assertion生成 private key セキュア 領域 3. RPで生成した情報をクライアントに返却する 4. authenticatorGetCredential() 認証器が生成した情報がクライアントに返却される { id: "bLYmTeblx08JDdRZc…", // rawIdをbase64urlエンコードしたもの rawId: ArrayBuffer(64) {}, // Credentialを識別するID response: { // 認証器からの情報(rpIdHash, ユーザーの検証結果 etc. ) authenticatorData: ArrayBuffer(37), // challengeやoriginなどが含まれている clientDataJSON: ArrayBuffer(222) {}, // create()によって作成された秘密鍵によって生成された署名 signature: ArrayBuffer(70) {} }, type: "public-key" } challenge
  38. FIDO2 - ユーザーの認証フロー Copyright © 2021, Oracle and/or its affiliates

    48 1. ユーザーの認証要求 Authenticator Relying Party Client(Browser/JS App) 2. challenge生成 4. navigator.credentials.get() 7. authenticatorData, clientDataJSON, signature, etc. 6. PublicKeyCredential DB public key challenge 3. RPで生成した情報をクライアントに返却する 4. authenticatorGetCredential() { id: "bLYmTeblx08JDdRZc…", rawId: ArrayBuffer(64) response: { authenticatorData: ArrayBuffer(37) {}, clientDataJSON: ArrayBuffer(222) {}, signature: ArrayBuffer(70) {}, … }, type: "public-key“ } challenge 5.ユーザー検証、 Assertion生成 private key セキュア 領域
  39. FIDO2 - ユーザーの認証フロー Copyright © 2021, Oracle and/or its affiliates

    49 1. ユーザーの認証要求 Authenticator Relying Party Client(Browser/JS App) 2. challenge生成 4. navigator.credentials.get() 7. authenticatorData, clientDataJSON, signature, etc. 6. PublicKeyCredential 8. 検証 DB 3. RPで生成した情報をクライアントに返却する 4. authenticatorGetCredential() public key challenge challenge 署名の検証 5.ユーザー検証、 Assertion生成 private key セキュア 領域 認証器が生成した情報をWebAuthn仕様に基づき検証する https://www.w3.org/TR/webauthn/#sctn-verifying-assertion
  40. FIDO2 - ユーザーの認証フロー Copyright © 2021, Oracle and/or its affiliates

    50 1. ユーザーの認証要求 Authenticator Relying Party Client(Browser/JS App) 2. challenge生成 4. navigator.credentials.get() 7. authenticatorData, clientDataJSON, signature, etc. 6. PublicKeyCredential 8. 検証 DB 3. RPで生成した情報をクライアントに返却する 4. authenticatorGetCredential() 5.ユーザー検証、 Assertion生成 private key セキュア 領域 再利用されることを防ぐために、生成したchallengeは破棄する public key
  41. FIDO2 - ユーザーの認証フロー Copyright © 2021, Oracle and/or its affiliates

    51 1. ユーザーの認証要求 Authenticator Relying Party Client(Browser/JS App) 2. challenge生成 4. navigator.credentials.get() 4. authenticatorGetCredential() 7. authenticatorData, clientDataJSON, signature, etc. 6. PublicKeyCredential 8. 検証 ブラウザ + 認証器が処理するため、 実装上はそこまで気にする必要はない DB 3. challenge etc. 自分で実装する必要がある 5.ユーザー検証、 Assertion生成 セキュア 領域 private key public key
  42. FIDO2 - ユーザーの認証フロー Copyright © 2021, Oracle and/or its affiliates

    53 1. ユーザーの認証要求 Authenticator Relying Party Client(Browser/JS App) 2. challenge生成 4. navigator.credentials.get() 4. authenticatorGetCredential() 7. authenticatorData, clientDataJSON, signature, etc. 6. PublicKeyCredential 8. 検証 ブラウザ + 認証器が処理するため、 実装上はそこまで気にする必要はない DB 3. challenge etc. 自分で実装する必要がある 5.ユーザー検証、 Assertion生成 セキュア 領域 private key public key
  43. FIDO2のRelying Partyを実装しているIdentity Providerを使用する メリット • 開発者は、サービスの機能の開発に集中でき る(WebAuthn関連の実装は一切不要) • ID連携も兼ねているため、利用者は各サービス 毎に認証器の登録をする必要がない

    デメリット • ID連携箇所に関しては実装が必要 • Relying Partyの実装は、Identity Providerに依 存してしまう 導入するときの選択肢 ① (個人的おすすめ) Copyright © 2021, Oracle and/or its affiliates 54 etc. Azure Active Directry Identity Platform Oracle Identity Cloud Service Keycloak ※アルファベット順
  44. FIDO2のRelying Partyを自分で実装する 仕様が策定されてから時間が経過したこともあり 各言語でOSSライブラリが揃いつつある状況 メリット • 外部のIdentity Providerなどに依存しない デメリット •

    ドキュメントの読み込みが必要 • https://www.w3.org/TR/webauthn/ • フロント/バックエンドともに実装が必要 導入するときの選択肢 ② Copyright © 2021, Oracle and/or its affiliates 55 https://webauthn.io/
  45. 56 Copyright © 2021, Oracle and/or its affiliates (参考) Chrome

    Virtual Authenticators Tab Chromeの拡張で認証器を仮想的に表現したもの • ちょっとした検証作業やデモ用途であれば十分に活用可能
  46. 58 Copyright © 2021, Oracle and/or its affiliates IDCSのFIDO対応 IDCS

    = Oracle Identity Cloud Service • Oracleが提供するIdentity管理基盤 • 2020年12月(20.4.2)にMFAとして、FIDO認証デバイスを選択できるようになった ※パスワードレス認証自体は、2020年5月(20.1.3) で対応済み リリース時のBlogも読んでいただけると幸いです! 【The Oracle Identity Cloud Service Christmas Gift】 https://blogs.oracle.com/cloudsecurity/the-oracle-identity-cloud-service-christmas-gift
  47. ユーザーの登録(認証器の登録) ~ 登録した認証器 を使用してパスワードレスで認証ができる所まで 実施する • Relying Party = Oracle

    Identity Cloud Service • Authenticator = Security Key by Yubiko デモ: IDCSを使用してFIDO2の一連の流れを体験する Copyright © 2021, Oracle and/or its affiliates 60 Authenticator Relying Party Client IDCS Security Key by Yubiko IDCSが提供する画面
  48. 共有の秘密に依存しない新しい認証方式でセキュリティ・ユーザビリティを向上 FIDOの認証モデル • 本人性を検証するローカル検証 • セキュリティ・ユーザビリティ向上に貢献 • 公開鍵暗号方式を使用したオンライン検証 • セキュリティ向上に貢献

    FIDO認証を支える技術仕様 • FIDO UAF: パスワードレスの体験をサポート • FIDO U2F: 既存のパスワード認証に対して強力な2要素目を追加 • FIDO 2: Webでパスワードレス、多要素認証をサポート • FIDO2 = WebAuthn + CTAP パスワード認証の課題(利便性・安全性)を解決するFIDO認証 Copyright © 2021, Oracle and/or its affiliates 62