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

WebAuthn in a nutshell - NTT Tech Conf #3 (ja)

WebAuthn in a nutshell - NTT Tech Conf #3 (ja)

3月にW3Cで勧告候補になったWeb Authentication仕様。生体認証による利便性と、仕様レベルで組み込まれたフィッシング対策による安全性が特長の新しいWeb認証方式です。
如何にしてWebAuthn仕様が利便性と安全性を両立しているか、サーバーサイドをOSSライブラリとして実装して得られた知見を元に仕様を解説し、また、ブラウザ、認証デバイスの対応状況についても紹介します。

4c890eaa89584732ef2f1f1c2422a412?s=128

Yoshikazu Nojima

August 31, 2018
Tweet

Transcript

  1. Copyright © Yoshikazu Nojima 2018 入門 WebAuthn 安全・便利な新しいWeb認証方式 2018-08-31 能島

    良和 (@shiroica)
  2. Copyright © Yoshikazu Nojima 2018 自己紹介 • 能島良和 • NTTコミュニケーションズ

    クラウドサービス部所属 • 昨年までNTTコムウェアで社内向けにSpringのプロジェクト支援に従事 • Apache CloudStack Commiter(活動休止中。。) • WebAuthn周りは趣味 • Twitter:@shiroica • GitHub:ynojima 1
  3. Copyright © Yoshikazu Nojima 2018 突然ですが・・・ この中にオンラインサービスのアカウントを 乗っ取られた経験のある方はいますか? 2

  4. Copyright © Yoshikazu Nojima 2018 恥ずかしながら私はあります・・・ 3

  5. Copyright © Yoshikazu Nojima 2018 原因 恐らく別のサービスから流出したID/Passwordによるリスト型攻撃。 ID/Passwordを色々なサービスで使いまわしていた為に攻撃されました。 (※業務で使用していたパスワードとは別でした、念の為) 4

  6. Copyright © Yoshikazu Nojima 2018 パスワードの限界 そもそもパスワードには以下の問題があります。 • フィッシング攻撃耐性 •

    本物そっくりの偽物サイトを作成し、ユーザーを誤認させたうえでID/Passwordを入力させ詐取 • 精巧に作成されたフィッシングサイトは45%のユーザーが騙されるという研究結果も • リスト型攻撃耐性 • 脆弱な他サービスで流出したID/Passwordを用いた攻撃 • 自サービスは堅牢でも、ユーザーがパスワードを使いまわした場合、巻き添え被害の可能性 • モバイルデバイス対応 • モバイルデバイスでは複雑なパスワードの入力が不便 パスワード要求はユーザーの離脱率に顕著な悪影響 パスワード認証に代わる認証手段が必要 5
  7. Copyright © Yoshikazu Nojima 2018 Web Authentication仕様とは 最近W3Cで勧告候補になった、パスワード認証の問題点を克服したセキュアな認証を 実現するためのWeb標準。セキュリティキーによる二段階認証や生体認証を実現。 ▪主な特徴

    • 指紋認証や顔認証など認証方式を差し替え可能 • 生体情報をサーバーで保存せず、安全性が高い • フィッシング攻撃、 CSRF攻撃対策の組込 6
  8. Copyright © Yoshikazu Nojima 2018 デモ 7

  9. Copyright © Yoshikazu Nojima 2018 Web Authenticationの認証フロー(概略) • ユーザー登録 ユーザー

    認証デバイス ブラウザ サーバー DB RP固有公開鍵 の保存 承認ジェスチャ (指紋スキャン等) の実施 • RP固有公開鍵 • Credential Id • ドメイン(RP Id)のハッ シュ • その他 を送信 • RP固有公開鍵 • Credential Id • ドメイン(RP Id)のハッシュ • その他 を送信 耐タンパ 領域 RP固有秘密鍵 を保存 RP固有公開鍵・秘密鍵ペアを生成 • チャレンジ • チャレンジ、ドメイン(RpId) その他のハッシュ クライアントデータのハッシュ、 RP Idに対する署名を生成 ドメイン(RP Id) チャレンジ その他の検証 耐タンパ 領域 • ローカル認証情報(生体情報等) を検証 ユーザー検証機能付き認証デバイスの場合
  10. Copyright © Yoshikazu Nojima 2018 Web Authenticationの認証フロー(概略) • ユーザー認証 ユーザー

    認証デバイス ブラウザ サーバー 承認ジェスチャ (指紋スキャン等) の実施 • Credential Id • 認証デバイスデータ • RP Idのハッシュ • フラグ • カウンタ • 資格情報データ • 署名 を送信 • Credential Id • チャレンジ、ドメイン (RpId)その他 • 認証デバイスデータ • RP Idのハッシュ • フラグ • カウンタ • 資格情報データ • 署名 を送信 • RP Idのハッシュ • チャレンジ、ドメイン(RpId) その他のハッシュ RP固有秘密鍵でRpIdのハッシュ、 フラグ、カウンタ、クライアント データのハッシュを署名 ドメイン(RP Id)、署名 チャレンジ、その他の検証 • チャレンジ を送信 ユーザー検証機能付き認証デバイスの場合 耐タンパ 領域 • ローカル認証情報(生体情報等) を検証 RP固有秘密鍵を読込 ローカル認証 公開鍵認証 DB RP固有公開鍵 の読込
  11. Copyright © Yoshikazu Nojima 2018 WebAuthnの技術的な特徴 ローカル認証と公開鍵認証の組み合わせ • ローカル認証 •

    ユーザーと認証デバイス間の認証 認証方式は交換可能(例:指紋認証、虹彩認証、PIN) • 公開鍵認証 • 認証デバイスとサーバー間の認証 10 ユーザー 認証デバイス サーバー ローカル認証 (指紋認証等) 公開鍵認証
  12. Copyright © Yoshikazu Nojima 2018 生体認証をローカル認証とするメリット 生体認証をリモート認証とした場合のリスク • 生体情報は変更不可能なことから究極のプライバシー情報。取扱は慎重さが求められる •

    サーバーに生体情報を保存する生体認証では、生体情報は経路上で様々な攻撃に晒される • WebAuthnでは生体情報が認証デバイスから外に流通せず、安全性が高い(ローカル認証) • クライアント(ブラウザ)とサーバーは公開鍵と、公開鍵で検証できる署名を受け取るのみ • 生体情報と秘密鍵は認証デバイスのTPMやセキュアエレメントのような耐タンパ領域に保存 • デメリット • 登録時に使用した認証デバイスがないと認証できない 11 ユーザー 認証デバイス ブラウザ サーバー DB 生体情報の 検証 承認ジェスチャ (生体情報) の提供 • 生体情報 • 生体情報
  13. Copyright © Yoshikazu Nojima 2018 フィッシング攻撃に対する効果 • ユーザー認証 ユーザー 認証デバイス

    ブラウザ サーバー 承認ジェスチャ (指紋スキャン等) の実施 • Credential Id • 認証デバイスデータ • RP Idのハッシュ • フラグ • カウンタ • 資格情報データ • 署名 を送信 • Credential Id • チャレンジ、ドメイン (RpId)その他 • 認証デバイスデータ • RP Idのハッシュ • フラグ • カウンタ • 資格情報データ • 署名 を送信 • RP Idのハッシュ • チャレンジ、ドメイン(RpId) その他のハッシュ RP固有秘密鍵でRpIdのハッシュ、 フラグ、カウンタ、クライアント データのハッシュを署名 • チャレンジ を送信 ユーザー検証機能付き認証デバイスの場合 耐タンパ 領域 • ローカル認証情報(生体情報等) を検証 RP固有秘密鍵を読込 ドメイン(RP Id)、署名 その他の検証 DB RP固有公開鍵 の読込 秘密鍵はRpId(≒ドメイン)毎に保存されており、 フィッシング攻撃で他ドメインから認証要求を受けて も秘密鍵は不正利用されない
  14. Copyright © Yoshikazu Nojima 2018 リスト型攻撃に対する効果 • ユーザー認証 ユーザー 認証デバイス

    ブラウザ サーバー 承認ジェスチャ (指紋スキャン等) の実施 • Credential Id • 認証デバイスデータ • RP Idのハッシュ • フラグ • カウンタ • 資格情報データ • 署名 を送信 • Credential Id • チャレンジ、ドメイン (RpId)その他 • 認証デバイスデータ • RP Idのハッシュ • フラグ • カウンタ • 資格情報データ • 署名 を送信 • RP Idのハッシュ • チャレンジ、ドメイン(RpId) その他のハッシュ RP固有秘密鍵でRpIdのハッシュ、 フラグ、カウンタ、クライアント データのハッシュを署名 • チャレンジ を送信 ユーザー検証機能付き認証デバイスの場合 耐タンパ 領域 • ローカル認証情報(生体情報等) を検証 RP固有秘密鍵を読込 ドメイン(RP Id)、署名 その他の検証 DB RP固有公開鍵 の読込 サーバー側に保存されるのはRP固有の公開鍵であり、 他サイトで漏洩してもリスト型攻撃を受ける心配は不要
  15. Copyright © Yoshikazu Nojima 2018 モバイルデバイス対応 近年のスマホで充実している、生体認証(指紋、顔認識)を ローカル認証に活用することで、パスワードを打ち込む 煩雑さからユーザーを開放し、離脱率を抑えることが期待 14

  16. Copyright © Yoshikazu Nojima 2018 導入のハードル(1/2) ブラウザ FIDO-U2F (=HWトークン による二要素認証)

    FIDO 2.0 (≒生体認証) 備考 Chrome(Desktop) 67以降 Canaryで実装中 Chrome(Android) Canaryで実装中 Canaryで実装中 Firefox 60以降 未サポート Safari 未サポート 未サポート 最近、正式に開発開始 Edge Edge 18 Preview以降 今秋正式リリース見込 Windows Hello対応 認証デバイスもサポート IE 未サポート 未サポート 15 ▪ブラウザの対応状況 Safariを除く主要ブラウザでは動く実装が揃いつつある。Safariも最近、開発開始 2018年8月現在
  17. Copyright © Yoshikazu Nojima 2018 導入のハードル(2/2) ▪認証デバイス • 認証デバイスが必要(組込、USB、NFC、BLE) •

    FIDO U2Fの認証デバイスも利用可能、2000円台後半~ • Windows Hello対応認証デバイスを使用可能(Edge) • Android標準の認証デバイスも利用可能(Android版Chrome) • Touch IDが利用可能予定(Mac版Chrome) ▪サーバーサイド • 各言語でOSSライブラリが出始めている • 手前味噌ながら自分もJava/Springで実装 • https://github.com/webauthn4j/webauthn4j • https://github.com/ynojima/spring-security-webauthn 16
  18. Copyright © Yoshikazu Nojima 2018 WebAuthn導入時の位置づけ 一般公開サイト: • 全ユーザーへの強制は望めないが、セキュリティ、利便性を重視するユーザーに選択肢を提供 社内システム用途:

    • 各マシンへの認証クライアントソフトの配布が不要な為、 既存の生体認証システムと比べ展開が容易な選択肢になり得る 17
  19. Copyright © Yoshikazu Nojima 2018 まとめ • パスワード認証には限界がある • フィッシング攻撃対応

    • リスト型攻撃対応 • モバイルデバイス対応 • W3Cで新しい認証方式としてWeb Authentication仕様の策定が進められている • ローカル認証と公開鍵認証の組み合わせ • 生体情報をサーバーで保存する必要がなく安全性が高い • 仕様としてフィッシング攻撃対策、CSRF攻撃対策を盛込済 • 主要ブラウザで実装が進行中 • Edge/Chrome/Firefox/Safari 18
  20. Copyright © Yoshikazu Nojima 2018 APPENDIX 19

  21. Copyright © Yoshikazu Nojima 2018 rpId:WebAuthnでサイトを区別するスコープの単位 rpIdで指定したドメイン自身、及びそのサブドメインで資格情報(鍵ペア)は共有 例)以下のように、複数のサブドメインに跨って存在するサイトがあるとする ◆ rpIdが”example.com”の場合

    資格情報は上記すべてのドメインで有効 ◆ rpIdが”admin.example.com”の場合 資格情報は”admin.example.com”のみで有効 20 id.example.com www.example.com admin.example.com
  22. Copyright © Yoshikazu Nojima 2018 以下のように、複数のTLD(トップレベルドメイン)に跨って存在するサイトがあるとする このようなドメイン自体が異なる場合でも、パスワード認証では認証用DBさえ共有していれば、 同一ID/Passでログインさせることが出来ていた。 WebAuthn仕様では同一サイトとして扱えず、登録時のドメインと同一のドメインでのみ認証可 異なるドメイン間での資格情報の共有(1/2)

    21 example.co.jp example.com example.co.uk
  23. Copyright © Yoshikazu Nojima 2018 サービスのリブランド、会社合併等によるドメイン名変更も、 既存ユーザーが認証出来なくなる問題が存在 異なるドメイン間での資格情報の共有(2/2) 22 旧サイト名.com

    新サイト名.com ブランディング上の ドメイン名の変更
  24. Copyright © Yoshikazu Nojima 2018 WebAuthnで異ドメイン間で資格情報を共有出来ない問題は、 異ドメイン間をOpenID ConnectやSAMLでシングルサインオン させることで緩和可能 緩和策:異ドメイン間でのシングルサインオン

    23 example.co.jp example.com example.co.uk ログイン後、 SSOによるリダイレクト ログイン後、 SSOによるリダイレクト 代表ドメインに WebAuthnでログイン
  25. Copyright © Yoshikazu Nojima 2018 24

  26. Copyright © Yoshikazu Nojima 2018 Web Authenticationの認証フロー(詳細) • ユーザー登録 ユーザー

    認証デバイス ブラウザ サーバー DB RP固有公開鍵 の保存 承認ジェスチャ (ローカル認証情報) の提供 • RP固有公開鍵 • Credential Id • 構成証明公開鍵証明書 • 署名 • カウンタ を送信 • クライアントデータ • 構成証明 • RP Idのハッシュ • カウンタ • Credential Id • RP固有公開鍵 • 構成証明公開鍵証明書 を送信 耐タンパ 領域 RP固有秘密鍵を保存 RP固有公開鍵・秘密鍵ペアを生成 構成証明 証明書を読込 • チャレンジ • RP Id • 他 • RP Idのハッシュ • クライアントデータのハッシュ クライアントデータのハッシュ、 RP Idに対する署名を生成 クライアントデータ、 構成証明、署名、認証 パス他の検証 • クライアントデータ • チャレンジ • オリジン • TokenBinding ID • 他 を生成 耐タンパ 領域 • ローカル認証情報(生体情報等) を検証 ユーザー検証機能付き認証デバイスの場合
  27. Copyright © Yoshikazu Nojima 2018 Web Authenticationの認証フロー(詳細) • ユーザー認証 ユーザー

    認証デバイス ブラウザ サーバー 承認ジェスチャ (ローカル認証情報) の提供 • Credential Id • 認証デバイスデータ • RP Idのハッシュ • フラグ • カウンタ • 資格情報データ • 署名 を送信 • Credential Id • クライアントデータ • 認証デバイスデータ • RP Idのハッシュ • フラグ • カウンタ • 資格情報データ • 署名 を送信 • RP Idのハッシュ • クライアントデータのハッシュ を送信 RP固有秘密鍵でRP Idのハッシュ、 フラグ、カウンタ、クライアント データのハッシュを署名 クライアントデータ、 認証デバイスデータ、署名 他の検証 • チャレンジ を送信 • クライアントデータ • チャレンジ • オリジン • TokenBinding ID • 他 を生成 ユーザー検証機能付き認証デバイスの場合 耐タンパ 領域 • ローカル認証情報(生体情報等) を検証 RP固有秘密鍵を読込
  28. Copyright © Yoshikazu Nojima 2018 Web Authenticationの認証フロー(詳細) • ユーザー登録(二要素認証への適用) ユーザー

    認証デバイス ブラウザ サーバー DB RP固有公開鍵 の保存 承認ジェスチャ (ボタン押下) の提供 • RP固有公開鍵 • Credential Id(NonceとMAC) • 構成証明公開鍵証明書 • 署名 • カウンタ を送信 • クライアントデータ • 構成証明 • RP Idのハッシュ • カウンタ • Credential Id • RP固有公開鍵 • 構成証明公開鍵証明書 を送信 耐タンパ 領域 デバイスシークレットをキーに NonceとRP Idのハッシュから RP固有公開鍵・秘密鍵ペアを導出 構成証明秘密鍵、 構成証明公開鍵証明書、 デバイスシークレット を読込 • チャレンジ • RP Id • 他 • RP Idのハッシュ • クライアントデータのハッシュ を送信 構成証明秘密鍵でRP Id、 クライアントデータのハッシュ、 Credential Id、RP固有公開鍵を署名 クライアントデータ、 構成証明、署名、認証パス 他の検証 • クライアントデータ • チャレンジ • オリジン • TokenBinding ID • 他 を生成 Yubico社のFIDO-U2F認証デバイスの場合 RNGでNonce を生成 デバイスシークレットをキーに RP固有秘密鍵とRP IdからMACを生成
  29. Copyright © Yoshikazu Nojima 2018 Web Authenticationの認証フロー(詳細) • ユーザー認証(二要素認証への適用) ユーザー

    認証デバイス ブラウザ サーバー DB Credential Id リストの取得 承認ジェスチャ (ボタン押下) の提供 • フラグ • カウンタ • 署名 を送信 • Credential Id • クライアントデータ • 認証デバイスデータ • RP Idのハッシュ • フラグ • カウンタ • 資格情報データ • 署名 を送信 耐タンパ 領域 デバイスシークレットをキーに NonceとRP Idのハッシュから RP固有公開鍵・秘密鍵ペアを導出 デバイスシークレット を読込 • RP Idのハッシュ • クライアントデータのハッシュ • Credential Id(NonceとMAC) を送信 RP固有秘密鍵でRP Idのハッシュ、 フラグ、カウンタ、クライアント データのハッシュを署名 クライアントデータ、 認証デバイスデータ、署名 他の検証 • Credential Idリスト • チャレンジ、RP Id、他 を送信 Yubico社のFIDO-U2F認証デバイスの場合 ID/Passの入力 ID/Passの送信 • クライアントデータ • チャレンジ • オリジン • TokenBinding ID • 他 を生成 DB RP固有公開鍵 の読込
  30. Copyright © Yoshikazu Nojima 2018 デモ 29

  31. Copyright © Yoshikazu Nojima 2018 デモ 30

  32. Copyright © Yoshikazu Nojima 2018 デモ 31

  33. Copyright © Yoshikazu Nojima 2018 デモ 32

  34. Copyright © Yoshikazu Nojima 2018 デモ 33

  35. Copyright © Yoshikazu Nojima 2018 デモ 34