Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
Chrome + WebAuthn で実現できる パスワードレスなユーザー認証体験と 開発者の課題 Ryo Ito (@ritou) DroidKaigi:2019 1
Slide 2
Slide 2 text
Ryo Ito (ritou) https://ritou.hatenablog.com • エヴァンジェリスト@OpenIDファウンデーション・ ジャパン –OpenID Connect, OAuth • エンジニア@株式会社ミクシィ –Identity, Platform • #idcon DroidKaigi:2019 2
Slide 3
Slide 3 text
パスワード認証について • 脆弱? • 時代遅れ? • パスワードリスト攻撃? • 総当たり攻撃? • 辞書攻撃? • オー〇リーサングラス今日限り活動特価2499円? DroidKaigi:2019 3
Slide 4
Slide 4 text
パスワード認証の要件 • ユーザー –推測が困難な文字列を考えられる –(複数の)文字列を覚えられる/思い出せる –正しい入力フォームにのみ入力する • サービス –パスワードを安全に管理し、ユーザーを保護できる DroidKaigi:2019 4
Slide 5
Slide 5 text
DroidKaigi:2019 5 人間の記憶機能のみで実現できる 至高の認証方式
Slide 6
Slide 6 text
パスワード認証の現状(ユーザー) • 推測困難な文字列は考えられない →簡単なパスワードを設定し推測される • 複数の文字列を記憶できない →使い回しからのパスワードリスト攻撃 • 偽の入力フォームに騙される →フィッシング攻撃 現実的対策 : ハード/ソフトウェアによるサポート DroidKaigi:2019 6
Slide 7
Slide 7 text
パスワード認証の現状(サービス) • 使用可能なパスワード文字列の仕様 →英数のみ、最大文字数1桁、大文字小文字記 号を少なくとも… • パスワードを安全に管理できない →メールで送信、漏洩 現実的対策 : 徳丸本やIPAのドキュメントで学ぶ、 脆弱性診断、スーパーエンジニア、ritouを雇う DroidKaigi:2019 7
Slide 8
Slide 8 text
パスワード認証に対する認識 • 圧倒的な人間のスペック不足 –ユーザーはついてこれない –サービス側のコストも大きい 何かしらのデバイスが必要だとしても 人間が適応可能な認証方式を 使っていきましょう。 DroidKaigi:2019 8
Slide 9
Slide 9 text
Web Authentication API (WebAuthn, ウェブオーセン) 概要 DroidKaigi:2019 9
Slide 10
Slide 10 text
日本語の情報も充実! DroidKaigi:2019 10 https://techblog.yahoo.co.jp/advent-calendar-2018/webauthn/ https://gihyo.jp/dev/column/newyear/2019/webauthn
Slide 11
Slide 11 text
FIDO認証: 標準的な公開鍵暗号方式を利用した堅牢な認証 • FIDO=生体認証ではない • 公開鍵暗号方式 –デバイスが鍵ペアを生成,秘密鍵を保存,署名生成 –サービスは公開鍵を保存,署名検証 • ローカル認証 on デバイス –PIN,生体認証など –認証処理に必要な情報はデバイスにとどまる DroidKaigi:2019 11
Slide 12
Slide 12 text
FIDO2プロジェクト • WebAuthn(Web Authentication) –WebアプリケーションがFIDO認証を利用するための JavaScript API • CTAP(Client To Authenticator Protocol) –セキュリティキー等とブラウザの間をつなぐしくみ DroidKaigi:2019 12
Slide 13
Slide 13 text
https://www.w3.org/TR/webauthn/ DroidKaigi:2019 13
Slide 14
Slide 14 text
WebAuthnの登場人物 • Authenticator: 認証/秘密鍵の管理/署名生成 –Cross-platform Authenticator:セキュリティキーなど –Platform Authenticator: OS提供機能など • Relying Party: 認証結果を利用するWebアプリ • Client: ブラウザ DroidKaigi:2019 14
Slide 15
Slide 15 text
WebAuthnの登場人物 DroidKaigi:2019 15 https://gihyo.jp/dev/column/newyear/2019/webauthn
Slide 16
Slide 16 text
Android Chrome+WebAuthn DroidKaigi:2019 16
Slide 17
Slide 17 text
Android Chrome, Yahoo! JAPANの対応 DroidKaigi:2019 17
Slide 18
Slide 18 text
Android Chrome + WebAuthn • Relying Party : Webアプリケー ション • Client : Android Chrome • Platform : Android – ローカル認証 : 指紋認証(パターン) – USB/NFC/BLE で Cross-Platform Authenticator DroidKaigi:2019 18 https://gihyo.jp/dev/column/newyear/2019/webauthn
Slide 19
Slide 19 text
AuthenticatorをRP上のUserに紐づけ DroidKaigi:2019 19 • navigator.credentials.create() –Challenge –RP情報、ユーザー情報 –その他オプション(ユーザー情報の格納、 UserVerificationの要求など) • 実際は鍵ペアの作成と公開鍵の要求 • 単純なアカウント登録のしくみではない
Slide 20
Slide 20 text
Sample Code by Google DroidKaigi:2019 20 https://developers.google.com/web/updates/2018/05/webauthn
Slide 21
Slide 21 text
AuthenticatorをRP上のUserに紐づけ DroidKaigi:2019 21 1. パラメータ作成 3. Androidの機能を 呼び出す 2. JS API呼び出し 4.ローカル認証 鍵ペア生成、 署名作成 5. 新しい公開鍵と署名 6. JS APIのレスポンス 7.各種検証 公開鍵の保存 Android Android Chrome Relying Party
Slide 22
Slide 22 text
実装例 : Yahoo! JAPAN の登録情報における挙動 DroidKaigi:2019 22
Slide 23
Slide 23 text
実装例 : Yahoo! JAPAN の登録情報における挙動 DroidKaigi:2019 23
Slide 24
Slide 24 text
利用する際に気を付けること • ユーザー情報を渡すため、新規登録時に紐づけ 処理を行う場合も「ユーザーにIDがふられた」状 態から紐づけを行う必要がある • (特にC向けサービスでは)ユーザーに入力させた 名前と一緒に公開鍵を保存するなど、ユーザー が管理しやすいしくみが必要 DroidKaigi:2019 24
Slide 25
Slide 25 text
Authenticatorを用いてRPにログイン DroidKaigi:2019 25 • navigator.credentials.get() –Challenge –公開鍵のリスト –UserVerificationの要求など • 公開鍵に紐づく署名つきの本人確認結果を要求 • 公開鍵を指定する/しない場合でUXが変わる
Slide 26
Slide 26 text
Sample Code by Google DroidKaigi:2019 26 https://developers.google.com/web/updates/2018/05/webauthn
Slide 27
Slide 27 text
Authenticatorを用いてRPにログイン DroidKaigi:2019 27 1. パラメータ作成 3. Androidの機能を 呼び出す 2. JS API呼び出し 4.ローカル認証 署名生成 5.ユーザーに紐づいた 公開鍵で検証可能な署名 6. JS APIのレスポンス 7.各種検証 ログイン処理 Android Android Chrome Relying Party
Slide 28
Slide 28 text
Authenticatorを用いてRPにログイン(2step) DroidKaigi:2019 28
Slide 29
Slide 29 text
Authenticatorを用いてRPにログイン(1step) DroidKaigi:2019 29
Slide 30
Slide 30 text
2種類のログインフローの違い • 2step –ユーザー識別を行い、紐づく公開鍵のリストを指定 –Authenticator は公開鍵に対応した本人確認を行う • 1step : Resident Key(FIDO2) –公開鍵のリストを指定しない –ユーザー情報を Authenticator 内に鍵ペア(秘密鍵) とともに保存しておき、アカウント選択画面から選ぶ –Clientの実装が出そろうのはもう少し先 DroidKaigi:2019 30
Slide 31
Slide 31 text
WebAuthnの実装パターン DroidKaigi:2019 31
Slide 32
Slide 32 text
WebAuthn がパスワード認証を置き換えた未来 • ユーザー –全てのサービスにAuthenticator の登録が必要? –アクションが発生する限り負担にはなる • 開発者 –安全だとしてもそれなりにコストは発生する –少しでも楽しながら安全なしくみを使いたい DroidKaigi:2019 32
Slide 33
Slide 33 text
現在の認証機能の実装パターン 1. IdentityProviderの認証結果をID連携して利用 2. BaaS / IDaaS の認証機能を利用 3. 独自で実装 → WebAuthn が出てきても変わらない DroidKaigi:2019 33
Slide 34
Slide 34 text
1. WebAuthn に対応したIdentityProviderをID連携で利用 DroidKaigi:2019 34
Slide 35
Slide 35 text
1. WebAuthn に対応したIdentityProviderをID連携で利用 DroidKaigi:2019 35 • ユーザー –IdPで WebAuthn の登録/認証するだけでたくさんの サービスが安全に利用可能 • 開発者 –ID連携のみ実装が必要、導入済なら待つだけ –脆弱性などへの早期の対応も期待できる –高い認証強度を必要とするサービスの場合、強度の 指定や再認証、独自リカバリーなど要検討
Slide 36
Slide 36 text
2. WebAuthn に対応した BaaS / IDaaS を利用 DroidKaigi:2019 36
Slide 37
Slide 37 text
2. WebAuthn に対応した BaaS / IDaaS を利用 • ユーザー –サービス毎に Authenticator の登録は必要 • 開発者 –WebAuthn の実装は不要 –WebAuthn 必須にできる –認証、再認証を行うドメインを統一させておくなど、 WebAuthn の特徴を考慮する必要がある DroidKaigi:2019 37
Slide 38
Slide 38 text
3. ライブラリ、サーバーを用いて実装 • Webアプリ –OSSプロダクトの認証モジュール –ライブラリ • 各種言語で開発が盛ん –サーバー • Server Requirements and Transport Binding Profile • FIDOアライアンスの認証済サーバーもOSS提供予定 DroidKaigi:2019 38
Slide 39
Slide 39 text
3. ライブラリ、サーバーを用いて実装 • 【番外編】モバイルアプリ向け –lyokato/WebAuthnKit • FIDO認証をWebAuthnライクに利用可能 • RPというよりはClient実装 • FaceID??? →→→→→→→→→→ DroidKaigi:2019 39
Slide 40
Slide 40 text
開発者の課題と考え方 DroidKaigi:2019 40
Slide 41
Slide 41 text
どのように導入するか • 多要素/多段階認証として導入 –既にノウハウはありそう • パスワード認証と共存、からの置換 –ソーシャルログインからさらに一歩先へ –「新しい認証方式を受け入れる」とは? DroidKaigi:2019 41
Slide 42
Slide 42 text
一番重要なのは「詰まない」こと • パスワード認証 –パスワード忘れたぐらいじゃ詰まない –再設定フローも利用できない→「詰んだ」 • FIDO認証 –スマホ、セキュリティキー壊れた/失くした→「詰んだ」 –仕様としても検討中だが、まずは無効化+再紐づけ DroidKaigi:2019 42
Slide 43
Slide 43 text
パスワード認証(の定石)を分解する • 登録 : メアド/SMS番号確認後、パスワード設定 • ログイン : メアド/SMS番号+パスワードを送信 • リカバリー : メアド/SMS番号にリンクや確認コード を送ってパスワードを再設定 2種類の認証方式が存在 FIDO認証が置き換えるのは 分解後のパスワード認証 DroidKaigi:2019 43
Slide 44
Slide 44 text
【重要】複数の認証方式と設定変更機能の用意 • リカバリー = 別の認証方式 + 設定変更 • 認証強度が弱いところが攻撃される • カスタマーセンターからの本人確認も同様 –KYC (Know Your Customer) DroidKaigi:2019 44
Slide 45
Slide 45 text
まとめ DroidKaigi:2019 45
Slide 46
Slide 46 text
まとめ • WebAuthnでWebアプリケーションでもFIDO認証 • Android Chrome+WebAuthn で実現できること • 3種類の実装パターン ← Qiita • 開発者は複数の認証方式を意識せよ ← Qiita DroidKaigi:2019 46
Slide 47
Slide 47 text
終わり • 質問 : 質疑応答 or @ritou にメンション • 感想 : エゴサで見つかるようにお願いします • Digital Identity分野に興味を持ったら #idcon • We are hiring!!! https://mixi.co.jp/recruit/ DroidKaigi:2019 47