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
270
パスキー導入の課題と ベストプラクティス、今後の展望
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
780
Webアプリ開発者向け パスキー対応の始め方
ritou
4
6.3k
Other Decks in Technology
See All in Technology
フロントエンドも盛り上げたい!フロントエンドCBとAmplifyの軌跡
mkdev10
2
230
バックオフィス向け toB SaaS バクラクにおけるレコメンド技術活用 / recommender-systems-in-layerx-bakuraku
yuya4
2
220
古き良き Laravel のシステムは関数型スタイルでリファクタできるのか
leveragestech
1
630
YOLOv10~v12
tenten0727
3
840
AIエージェント開発における「攻めの品質改善」と「守りの品質保証」 / 2024.04.09 GPU UNITE 新年会 2025
smiyawaki0820
0
390
OPENLOGI Company Profile
hr01
0
62k
TopAppBar Composableをカスタムする
hunachi
0
170
いつも初心者向けの記事に助けられているので得意分野では初心者向けの記事を書きます
toru_kubota
2
260
システムとの会話から生まれる先手のDevOps
kakehashi
PRO
0
200
SRE NEXT CfP チームが語る 聞きたくなるプロポーザルとは / Proposals by the SRE NEXT CfP Team that are sure to be accepted
chaspy
1
560
10分でわかるfreeeのQA
freee
1
12k
Amebaにおける Platform Engineeringの実践
kumorn5s
6
890
Featured
See All Featured
Producing Creativity
orderedlist
PRO
344
40k
Mobile First: as difficult as doing things right
swwweet
223
9.6k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
32
4.9k
The Cost Of JavaScript in 2023
addyosmani
49
7.7k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
656
60k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
233
17k
VelocityConf: Rendering Performance Case Studies
addyosmani
328
24k
Site-Speed That Sticks
csswizardry
5
480
Testing 201, or: Great Expectations
jmmastey
42
7.4k
We Have a Design System, Now What?
morganepeng
52
7.5k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
26k
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
3.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