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.4k
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 - パスキーへの移行を見据えたユーザーの準備 + α
ritou
0
69
Password-less Journey - パスキーへの移行を見据えたユーザーの準備 @ AXIES 2024
ritou
4
1.6k
OIDF-J EIWG 振り返り
ritou
2
37
そのQRコード、安全ですか? / Cross Device Flow
ritou
4
420
MIXI Mと社内外のサービスを支える認証基盤を作るためにやってきたこと #MTDC2024
ritou
3
520
Passkeys and Identity Federation @ OpenID Summit Tokyo 2024
ritou
2
760
Webアプリ開発者向け パスキー対応の始め方
ritou
4
6.2k
様々なユースケースに利用できる "パスキー" の 導入事例の紹介とUXの課題解説 @ DroidKaigi 2023
ritou
3
4.8k
パスキーはユーザー認証を どう変えるのか?その特徴と導入における課題 @ devsumi 2023 9-C-1
ritou
6
13k
Other Decks in Technology
See All in Technology
RemoveだらけのPHPUnit 12に備えよう
cocoeyes02
0
270
ウォンテッドリーのデータパイプラインを支える ETL のための analytics, rds-exporter / analytics, rds-exporter for ETL to support Wantedly's data pipeline
unblee
0
120
あなたが人生で成功するための5つの普遍的法則 #jawsug #jawsdays2025 / 20250301 HEROZ
yoshidashingo
2
280
4th place solution Eedi - Mining Misconceptions in Mathematics
rist
0
140
Ruby on Railsで持続可能な開発を行うために取り組んでいること
am1157154
3
140
遷移の高速化 ヤフートップの試行錯誤
narirou
6
1.1k
株式会社Awarefy(アウェアファイ)会社説明資料 / Awarefy-Company-Deck
awarefy
3
11k
AIエージェント入門
minorun365
PRO
31
17k
急成長する企業で作った、エンジニアが輝ける制度/ 20250227 Rinto Ikenoue
shift_evolve
0
130
システム・ML活用を広げるdbtのデータモデリング / Expanding System & ML Use with dbt Modeling
i125
1
320
Iceberg Meetup Japan #1 : Iceberg and Databricks
databricksjapan
0
330
スキルだけでは満たせない、 “組織全体に”なじむオンボーディング/Onboarding that fits “throughout the organization” and cannot be satisfied by skills alone
bitkey
0
170
Featured
See All Featured
Unsuck your backbone
ammeep
669
57k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
29
2.4k
Reflections from 52 weeks, 52 projects
jeffersonlam
348
20k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
29
1k
We Have a Design System, Now What?
morganepeng
51
7.4k
RailsConf 2023
tenderlove
29
1k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
10
510
The Straight Up "How To Draw Better" Workshop
denniskardys
232
140k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
366
25k
Measuring & Analyzing Core Web Vitals
bluesmoon
6
250
It's Worth the Effort
3n
184
28k
Raft: Consensus for Rubyists
vanstee
137
6.8k
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