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.5k
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
“パスワードレス認証への道" ユーザー認証の変遷とパスキーの関係
ritou
1
600
パスキー導入の課題と ベストプラクティス、今後の展望
ritou
8
1.5k
Password-less Journey - パスキーへの移行を見据えたユーザーの準備 + α
ritou
0
81
Password-less Journey - パスキーへの移行を見据えたユーザーの準備 @ AXIES 2024
ritou
4
1.6k
OIDF-J EIWG 振り返り
ritou
2
42
そのQRコード、安全ですか? / Cross Device Flow
ritou
4
470
MIXI Mと社内外のサービスを支える認証基盤を作るためにやってきたこと #MTDC2024
ritou
3
580
Passkeys and Identity Federation @ OpenID Summit Tokyo 2024
ritou
2
790
Webアプリ開発者向け パスキー対応の始め方
ritou
4
6.3k
Other Decks in Technology
See All in Technology
AIコーディングの最前線 〜活用のコツと課題〜
pharma_x_tech
3
1.7k
The Tale of Leo: Brave Lion and Curious Little Bug
canalun
1
120
AI Agentを「期待通り」に動かすために:設計アプローチの模索と現在地
kworkdev
PRO
2
460
watsonx.data上のベクトル・データベース Milvusを見てみよう/20250418-milvus-dojo
mayumihirano
0
120
ドキュメント管理の理想と現実
kazuhe
1
200
クォータ監視、AWS Organizations環境でも楽勝です✌️
iwamot
PRO
1
320
4/17/25 - CIJUG - Java Meets AI: Build LLM-Powered Apps with LangChain4j (part 2)
edeandrea
PRO
0
110
AI AgentOps LT大会(2025/04/16) Algomatic伊藤発表資料
kosukeito
0
140
地味にいろいろあった! 2025春のAmazon Bedrockアップデートおさらい
minorun365
PRO
1
230
生成AIによるCloud Native基盤構築の可能性と実践的ガードレールの敷設について
nwiizo
7
910
PicoRabbit: a Tiny Presentation Device Powered by Ruby
harukasan
PRO
2
230
30代からでも遅くない! 内製開発の世界に飛び込み、最前線で戦うLLMアプリ開発エンジニアになろう
minorun365
PRO
9
1.9k
Featured
See All Featured
Visualization
eitanlees
146
16k
Building an army of robots
kneath
304
45k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
52
2.4k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
23
2.6k
Into the Great Unknown - MozCon
thekraken
37
1.7k
Practical Orchestrator
shlominoach
186
11k
StorybookのUI Testing Handbookを読んだ
zakiyama
29
5.6k
Build The Right Thing And Hit Your Dates
maggiecrowley
35
2.6k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
45
9.5k
Documentation Writing (for coders)
carmenintech
69
4.7k
The Cost Of JavaScript in 2023
addyosmani
49
7.7k
YesSQL, Process and Tooling at Scale
rocio
172
14k
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