Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
WebAuthn @ DroidKaigi 2019
Search
ritou
February 07, 2019
Technology
5
6.2k
WebAuthn @ DroidKaigi 2019
Chrome + WebAuthn で実現できるパスワードレスなユーザー認証体験と開発者の課題 - DroidKaigi 2019
Room 6 - 2019/02/07 17:10-17:40
ritou
February 07, 2019
Tweet
Share
More Decks by ritou
See All by ritou
Password-less Journey - パスキーへの移行を見据えたユーザーの準備 @ AXIES 2024
ritou
3
1.4k
OIDF-J EIWG 振り返り
ritou
2
26
そのQRコード、安全ですか? / Cross Device Flow
ritou
4
380
MIXI Mと社内外のサービスを支える認証基盤を作るためにやってきたこと #MTDC2024
ritou
3
470
Passkeys and Identity Federation @ OpenID Summit Tokyo 2024
ritou
2
700
Webアプリ開発者向け パスキー対応の始め方
ritou
4
6.1k
様々なユースケースに利用できる "パスキー" の 導入事例の紹介とUXの課題解説 @ DroidKaigi 2023
ritou
3
4.6k
パスキーはユーザー認証を どう変えるのか?その特徴と導入における課題 @ devsumi 2023 9-C-1
ritou
6
12k
Android/Chromeで体験できる 認証のための標準化仕様の 現在と未来 @ DroidKaigi 2022
ritou
2
6.9k
Other Decks in Technology
See All in Technology
kargoの魅力について伝える
magisystem0408
0
210
Snykで始めるセキュリティ担当者とSREと開発者が楽になる脆弱性対応 / Getting started with Snyk Vulnerability Response
yamaguchitk333
2
190
AWS re:Invent 2024で発表された コードを書く開発者向け機能について
maruto
0
190
WACATE2024冬セッション資料(ユーザビリティ)
scarletplover
0
210
ブラックフライデーで購入したPixel9で、Gemini Nanoを動かしてみた
marchin1989
1
540
DevOps視点でAWS re:invent2024の新サービス・アプデを振り返ってみた
oshanqq
0
180
普通のエンジニアがLaravelコアチームメンバーになるまで
avosalmon
0
110
ハイテク休憩
sat
PRO
2
160
組織に自動テストを書く文化を根付かせる戦略(2024冬版) / Building Automated Test Culture 2024 Winter Edition
twada
PRO
17
4.6k
非機能品質を作り込むための実践アーキテクチャ
knih
5
1.5k
Microsoft Azure全冠になってみた ~アレを使い倒した者が試験を制す!?~/Obtained all Microsoft Azure certifications Those who use "that" to the full will win the exam! ?
yuj1osm
2
110
プロダクト開発を加速させるためのQA文化の築き方 / How to build QA culture to accelerate product development
mii3king
1
270
Featured
See All Featured
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
159
15k
Being A Developer After 40
akosma
87
590k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
191
16k
Testing 201, or: Great Expectations
jmmastey
40
7.1k
Reflections from 52 weeks, 52 projects
jeffersonlam
347
20k
A Modern Web Designer's Workflow
chriscoyier
693
190k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
2
170
Optimizing for Happiness
mojombo
376
70k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
8
1.2k
Site-Speed That Sticks
csswizardry
2
190
Building Better People: How to give real-time feedback that sticks.
wjessup
365
19k
Put a Button on it: Removing Barriers to Going Fast.
kastner
59
3.6k
Transcript
Chrome + WebAuthn で実現できる パスワードレスなユーザー認証体験と 開発者の課題 Ryo Ito (@ritou) DroidKaigi:2019
1
Ryo Ito (ritou) https://ritou.hatenablog.com • エヴァンジェリスト@OpenIDファウンデーション・ ジャパン –OpenID Connect, OAuth
• エンジニア@株式会社ミクシィ –Identity, Platform • #idcon DroidKaigi:2019 2
パスワード認証について • 脆弱? • 時代遅れ? • パスワードリスト攻撃? • 総当たり攻撃? •
辞書攻撃? • オー〇リーサングラス今日限り活動特価2499円? DroidKaigi:2019 3
パスワード認証の要件 • ユーザー –推測が困難な文字列を考えられる –(複数の)文字列を覚えられる/思い出せる –正しい入力フォームにのみ入力する • サービス –パスワードを安全に管理し、ユーザーを保護できる DroidKaigi:2019
4
DroidKaigi:2019 5 人間の記憶機能のみで実現できる 至高の認証方式
パスワード認証の現状(ユーザー) • 推測困難な文字列は考えられない →簡単なパスワードを設定し推測される • 複数の文字列を記憶できない →使い回しからのパスワードリスト攻撃 • 偽の入力フォームに騙される →フィッシング攻撃
現実的対策 : ハード/ソフトウェアによるサポート DroidKaigi:2019 6
パスワード認証の現状(サービス) • 使用可能なパスワード文字列の仕様 →英数のみ、最大文字数1桁、大文字小文字記 号を少なくとも… • パスワードを安全に管理できない →メールで送信、漏洩 現実的対策 :
徳丸本やIPAのドキュメントで学ぶ、 脆弱性診断、スーパーエンジニア、ritouを雇う DroidKaigi:2019 7
パスワード認証に対する認識 • 圧倒的な人間のスペック不足 –ユーザーはついてこれない –サービス側のコストも大きい 何かしらのデバイスが必要だとしても 人間が適応可能な認証方式を 使っていきましょう。 DroidKaigi:2019 8
Web Authentication API (WebAuthn, ウェブオーセン) 概要 DroidKaigi:2019 9
日本語の情報も充実! DroidKaigi:2019 10 https://techblog.yahoo.co.jp/advent-calendar-2018/webauthn/ https://gihyo.jp/dev/column/newyear/2019/webauthn
FIDO認証: 標準的な公開鍵暗号方式を利用した堅牢な認証 • FIDO=生体認証ではない • 公開鍵暗号方式 –デバイスが鍵ペアを生成,秘密鍵を保存,署名生成 –サービスは公開鍵を保存,署名検証 • ローカル認証
on デバイス –PIN,生体認証など –認証処理に必要な情報はデバイスにとどまる DroidKaigi:2019 11
FIDO2プロジェクト • WebAuthn(Web Authentication) –WebアプリケーションがFIDO認証を利用するための JavaScript API • CTAP(Client To
Authenticator Protocol) –セキュリティキー等とブラウザの間をつなぐしくみ DroidKaigi:2019 12
https://www.w3.org/TR/webauthn/ DroidKaigi:2019 13
WebAuthnの登場人物 • Authenticator: 認証/秘密鍵の管理/署名生成 –Cross-platform Authenticator:セキュリティキーなど –Platform Authenticator: OS提供機能など •
Relying Party: 認証結果を利用するWebアプリ • Client: ブラウザ DroidKaigi:2019 14
WebAuthnの登場人物 DroidKaigi:2019 15 https://gihyo.jp/dev/column/newyear/2019/webauthn
Android Chrome+WebAuthn DroidKaigi:2019 16
Android Chrome, Yahoo! JAPANの対応 DroidKaigi:2019 17
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
AuthenticatorをRP上のUserに紐づけ DroidKaigi:2019 19 • navigator.credentials.create() –Challenge –RP情報、ユーザー情報 –その他オプション(ユーザー情報の格納、 UserVerificationの要求など) •
実際は鍵ペアの作成と公開鍵の要求 • 単純なアカウント登録のしくみではない
Sample Code by Google DroidKaigi:2019 20 https://developers.google.com/web/updates/2018/05/webauthn
AuthenticatorをRP上のUserに紐づけ DroidKaigi:2019 21 1. パラメータ作成 3. Androidの機能を 呼び出す 2. JS
API呼び出し 4.ローカル認証 鍵ペア生成、 署名作成 5. 新しい公開鍵と署名 6. JS APIのレスポンス 7.各種検証 公開鍵の保存 Android Android Chrome Relying Party
実装例 : Yahoo! JAPAN の登録情報における挙動 DroidKaigi:2019 22
実装例 : Yahoo! JAPAN の登録情報における挙動 DroidKaigi:2019 23
利用する際に気を付けること • ユーザー情報を渡すため、新規登録時に紐づけ 処理を行う場合も「ユーザーにIDがふられた」状 態から紐づけを行う必要がある • (特にC向けサービスでは)ユーザーに入力させた 名前と一緒に公開鍵を保存するなど、ユーザー が管理しやすいしくみが必要 DroidKaigi:2019
24
Authenticatorを用いてRPにログイン DroidKaigi:2019 25 • navigator.credentials.get() –Challenge –公開鍵のリスト –UserVerificationの要求など • 公開鍵に紐づく署名つきの本人確認結果を要求
• 公開鍵を指定する/しない場合でUXが変わる
Sample Code by Google DroidKaigi:2019 26 https://developers.google.com/web/updates/2018/05/webauthn
Authenticatorを用いてRPにログイン DroidKaigi:2019 27 1. パラメータ作成 3. Androidの機能を 呼び出す 2. JS
API呼び出し 4.ローカル認証 署名生成 5.ユーザーに紐づいた 公開鍵で検証可能な署名 6. JS APIのレスポンス 7.各種検証 ログイン処理 Android Android Chrome Relying Party
Authenticatorを用いてRPにログイン(2step) DroidKaigi:2019 28
Authenticatorを用いてRPにログイン(1step) DroidKaigi:2019 29
2種類のログインフローの違い • 2step –ユーザー識別を行い、紐づく公開鍵のリストを指定 –Authenticator は公開鍵に対応した本人確認を行う • 1step : Resident
Key(FIDO2) –公開鍵のリストを指定しない –ユーザー情報を Authenticator 内に鍵ペア(秘密鍵) とともに保存しておき、アカウント選択画面から選ぶ –Clientの実装が出そろうのはもう少し先 DroidKaigi:2019 30
WebAuthnの実装パターン DroidKaigi:2019 31
WebAuthn がパスワード認証を置き換えた未来 • ユーザー –全てのサービスにAuthenticator の登録が必要? –アクションが発生する限り負担にはなる • 開発者 –安全だとしてもそれなりにコストは発生する
–少しでも楽しながら安全なしくみを使いたい DroidKaigi:2019 32
現在の認証機能の実装パターン 1. IdentityProviderの認証結果をID連携して利用 2. BaaS / IDaaS の認証機能を利用 3. 独自で実装
→ WebAuthn が出てきても変わらない DroidKaigi:2019 33
1. WebAuthn に対応したIdentityProviderをID連携で利用 DroidKaigi:2019 34
1. WebAuthn に対応したIdentityProviderをID連携で利用 DroidKaigi:2019 35 • ユーザー –IdPで WebAuthn の登録/認証するだけでたくさんの
サービスが安全に利用可能 • 開発者 –ID連携のみ実装が必要、導入済なら待つだけ –脆弱性などへの早期の対応も期待できる –高い認証強度を必要とするサービスの場合、強度の 指定や再認証、独自リカバリーなど要検討
2. WebAuthn に対応した BaaS / IDaaS を利用 DroidKaigi:2019 36
2. WebAuthn に対応した BaaS / IDaaS を利用 • ユーザー –サービス毎に
Authenticator の登録は必要 • 開発者 –WebAuthn の実装は不要 –WebAuthn 必須にできる –認証、再認証を行うドメインを統一させておくなど、 WebAuthn の特徴を考慮する必要がある DroidKaigi:2019 37
3. ライブラリ、サーバーを用いて実装 • Webアプリ –OSSプロダクトの認証モジュール –ライブラリ • 各種言語で開発が盛ん –サーバー •
Server Requirements and Transport Binding Profile • FIDOアライアンスの認証済サーバーもOSS提供予定 DroidKaigi:2019 38
3. ライブラリ、サーバーを用いて実装 • 【番外編】モバイルアプリ向け –lyokato/WebAuthnKit • FIDO認証をWebAuthnライクに利用可能 • RPというよりはClient実装 •
FaceID??? →→→→→→→→→→ DroidKaigi:2019 39
開発者の課題と考え方 DroidKaigi:2019 40
どのように導入するか • 多要素/多段階認証として導入 –既にノウハウはありそう • パスワード認証と共存、からの置換 –ソーシャルログインからさらに一歩先へ –「新しい認証方式を受け入れる」とは? DroidKaigi:2019 41
一番重要なのは「詰まない」こと • パスワード認証 –パスワード忘れたぐらいじゃ詰まない –再設定フローも利用できない→「詰んだ」 • FIDO認証 –スマホ、セキュリティキー壊れた/失くした→「詰んだ」 –仕様としても検討中だが、まずは無効化+再紐づけ DroidKaigi:2019
42
パスワード認証(の定石)を分解する • 登録 : メアド/SMS番号確認後、パスワード設定 • ログイン : メアド/SMS番号+パスワードを送信 •
リカバリー : メアド/SMS番号にリンクや確認コード を送ってパスワードを再設定 2種類の認証方式が存在 FIDO認証が置き換えるのは 分解後のパスワード認証 DroidKaigi:2019 43
【重要】複数の認証方式と設定変更機能の用意 • リカバリー = 別の認証方式 + 設定変更 • 認証強度が弱いところが攻撃される •
カスタマーセンターからの本人確認も同様 –KYC (Know Your Customer) DroidKaigi:2019 44
まとめ DroidKaigi:2019 45
まとめ • WebAuthnでWebアプリケーションでもFIDO認証 • Android Chrome+WebAuthn で実現できること • 3種類の実装パターン ←
Qiita • 開発者は複数の認証方式を意識せよ ← Qiita DroidKaigi:2019 46
終わり • 質問 : 質疑応答 or @ritou にメンション • 感想
: エゴサで見つかるようにお願いします • Digital Identity分野に興味を持ったら #idcon • We are hiring!!! https://mixi.co.jp/recruit/ DroidKaigi:2019 47