Slide 1

Slide 1 text

パスワードレスな ユーザー認証時代を迎えるために サービス開発者が しなければならないこと 1 @ritou builderscon tokyo 2018

Slide 2

Slide 2 text

● エヴァンジェリスト @ OpenID ファウンデーション ジャパン ○ OAuth / OpenID Connect ○ 「OAuth 2.0 脆弱性」で検索→ ● エンジニア @ 株式会社ミクシィ ○ Identity, Platform ● #idcon 2 Ryo Ito @ritou

Slide 3

Slide 3 text

パスワード認証 3

Slide 4

Slide 4 text

パスワード認証に求められる環境 ● 推測が困難な文字列を考えられるユーザー ● (複数の)文字列を覚えられる/思い出せるユーザー ● ユーザーを安全に保護するサービス 4

Slide 5

Slide 5 text

パスワード認証に求められる環境 ● 推測が困難な文字列を考えられるユーザー ● (複数の)文字列を覚えられる/思い出せるユーザー ● ユーザーを安全に保護するサービス 特定デバイス不要の 最強の認証方式 5

Slide 6

Slide 6 text

パスワード認証の現実 ● 推測困難な文字列は考えられない -> 簡単なパスワード ● 複数覚えられない -> 使い回しからのパスワードリスト攻撃 ● ばらつくサービスの仕様や運用に振り回されるユーザー ○ 英数のみ、最長●文字、記号を少なくとも ○ メールで送信してみたり、漏洩してみたり ○ 定 期 変 更 は 必 要 で す か 6

Slide 7

Slide 7 text

パスワード認証をやめるべき理由 ● ユーザーへの負担 ○ ユーザーのスペック不足 ● サービス側のコスト、リスク ○ CSによるリカバリー対応 ○ 漏洩対策 ○ 攻撃対策 7

Slide 8

Slide 8 text

本セッションについて 8 ● パスワードレスなユーザー認証が注目されている ● 開発者は何をすべき? ● 自分のサービスをパスワードレスにする準備をしよう 現状 最新 動向 課題 & 対策

Slide 9

Slide 9 text

現状 9

Slide 10

Slide 10 text

10

Slide 11

Slide 11 text

パスワード、通知、多要素認証 ● ユーザー識別 : メールアドレス / SMS / サービス内のID ● 認証方法 : パスワード ● 多要素認証 ○ ワンタイムパスワード / セキュリティキー ● リカバリー ○ メール/SMSでURL/短い文字列を送信 ○ リカバリーコード 11 よくある実装

Slide 12

Slide 12 text

パスワード、通知、多要素認証 ● ユーザー識別 : メールアドレス / SMS / サービス内のID ● 認証方法 : パスワード ● 多要素認証 ○ ワンタイムパスワード / セキュリティキー ● リカバリー ○ メール/SMSでURL/短い文字列を送信 ○ リカバリーコード 12 よくある実装 ←←←←←←← 複雑になりがち ←←←←←←←

Slide 13

Slide 13 text

アカウントライフサイクルと認証方法の設定 ● 新規登録時 ○ メールアドレス / SMS の確認 -> リカバリー ○ パスワード設定 -> パスワード認証 ● アカウント設定から ○ 多要素認証の設定 : ワンタイムパスワード, SecurityKey ○ リカバリーコードの払い出し 13

Slide 14

Slide 14 text

14

Slide 15

Slide 15 text

ソーシャルログイン ● 外部の Identity Provider のアカウントを利用 ● ソーシャルログイン機能のみを利用している場合、そのサービス上 ではパスワードレスと言えるかも ● パスワード認証とセットで利用されることも多い 15

Slide 16

Slide 16 text

なぜソーシャルログイン + パスワード? ● IdP、IdP上のアカウントに問題が発生したときへの準備 ● 「パスワード確認」機能 16

Slide 17

Slide 17 text

アカウントライフサイクルと認証方法の設定 ● 新規登録時 ○ ソーシャルログイン : 確認済みメアド/SMSがあればリカバリー用途に ○ (サービスによっては)パスワード設定 : パスワード認証 ● アカウント設定から ○ 多要素認証の設定 : ワンタイムパスワード, SecurityKey ○ リカバリーコードの払い出し 17

Slide 18

Slide 18 text

最新動向 18

Slide 19

Slide 19 text

キーワード ● FIDO 2.0 ● Web Authn(Web Authentication) API 19

Slide 20

Slide 20 text

FIDO ● FIDO 1.0 ○ UAF (Universal Authentication Framework) : パスワードレスなユー ザー認証のための仕様 ○ U2F (Universal Second Factor) : 2要素認証のための仕様 ● FIDO 2.0 = UAF + U2F 20

Slide 21

Slide 21 text

Web Authn(Web Authentication) API ● FIDO 2.0 の Web API仕様 ○ https://www.w3.org/TR/webauthn/ ● 登録 : navigator.credentials.create() 認証情報の生成 ● 認証 : navigator.credentials.get() 認証情報の参照 21

Slide 22

Slide 22 text

22 https://webauthn.org/

Slide 23

Slide 23 text

23

Slide 24

Slide 24 text

24

Slide 25

Slide 25 text

25

Slide 26

Slide 26 text

26

Slide 27

Slide 27 text

27

Slide 28

Slide 28 text

28

Slide 29

Slide 29 text

登録フロー 29

Slide 30

Slide 30 text

登録フロー 30

Slide 31

Slide 31 text

登録フロー 31 ① RP Serverがブラウザにデータを送信 ● チャレンジ ● ユーザー情報 : 対象ユーザーのID, 表示名など ● RP情報 : ドメインなど

Slide 32

Slide 32 text

登録フロー 32 ② ブラウザはAuthenticator に新しい認証情報を要求 -> authenticatorMakeCredential を呼び出す

Slide 33

Slide 33 text

登録フロー 33 ③ Authenticator はユーザーの確認の後、新しい鍵ペアと証明書を生成 ● ユーザーの確認 : ローカル認証 ○ 存在するか ○ 登録に同意しているか ● 鍵ペアの生成 ○ 秘密鍵は安全に保存 ● 証明書 ○ 公開鍵を含む ● チャレンジへの署名 ○ 秘密鍵で署名生成

Slide 34

Slide 34 text

登録フロー 34 ④ Authenticator はブラウザにデータを返す

Slide 35

Slide 35 text

登録フロー 35 ⑤ ブラウザが RP Server にデータを渡す ● clientData ● attestationObject

Slide 36

Slide 36 text

36 ⑤ RP Server がデータを検証し、登録処 理を行う ● 保存するのは公開鍵

Slide 37

Slide 37 text

37 https://auth0.com/blog/introduction-to-web-authentication/

Slide 38

Slide 38 text

認証フロー 38 ① RP Serverがブラウザにデータを送信 ● チャレンジ ● 公開鍵のidも指定可能

Slide 39

Slide 39 text

認証フロー 39 ② ブラウザはAuthenticator に認証情報を要求

Slide 40

Slide 40 text

認証フロー 40 ③ Authenticator はユーザー確認後、保存している秘密鍵に紐づく認証情報を生成 ● ユーザーの確認 : ローカル認証 ○ 存在するか ○ 登録に同意しているか ● 秘密鍵の呼び出し ● 証明書 ○ 公開鍵を含む ● チャレンジへの署名 ○ 秘密鍵で署名生成

Slide 41

Slide 41 text

認証フロー 41

Slide 42

Slide 42 text

認証フロー 42

Slide 43

Slide 43 text

認証フロー 43

Slide 44

Slide 44 text

44 https://auth0.com/blog/introduction-to-web-authentication/

Slide 45

Slide 45 text

WebAuthn APIを用いる認証が定着するまでは ● ブラウザの対応 ● Authenticator の普及 ● ユーザーへの啓蒙 45

Slide 46

Slide 46 text

課題と対策 46

Slide 47

Slide 47 text

どのようにしてパスワードレスを実現できるか ● 新規サービス : パスワード認証を使わない ● 既存サービス : パスワード認証を使うのをやめる 1. 新たな認証方式の提供 2. 新たな認証方式への移行 3. パスワード認証の撤廃 47

Slide 48

Slide 48 text

課題 : ● どの認証方式を使う? ● UXはどうなる? ● パスワード確認してたとこ、どうする? 48

Slide 49

Slide 49 text

現状のパスワードレスな認証方式 ● メール/SMSにて認証コードを送信/検証 ● ソーシャルログイン ● バックアップコード ○ ユーザーパスワードではないという意味合い ● 特定のモバイル端末で操作を行うことでログインさせる ○ 考えていくと Web Authnっぽくなる 49

Slide 50

Slide 50 text

UXの変化 : 登録フロー ● 今まで ○ メールアドレス/SMS の確認 -> パスワード設定 -> 完了 ○ メールアドレス/SMS 入力 + パスワード設定 -> 完了 + 後で確認 ● パスワードレス : ○ メールアドレス/SMS の確認 -> 完了 ○ メールアドレス/SMS の確認 -> 他の認証方法設定 -> 完了 50

Slide 51

Slide 51 text

UXの変化 : ログインフロー ● 今まで : パスワード認証が最優先、ダメならリカバリーフロー ○ パスワード認証 -> 完了 ○ パスワード認証 -> リカバリー -> 完了 ● パスワードレス : ユーザーに紐づく認証方式毎に処理を分岐 ○ メールアドレス/SMS入力 -> 設定済みの認証フロー -> 完了 ■ GoogleみたいなUXに近いイメージ 51

Slide 52

Slide 52 text

「パスワード確認」相当の処理、どうするか ● 決済/アカウント情報変更など、重要な処理の前に行われてる ● どの認証方式で代替するかのキメが必要 ○ ユーザー認証と同等 (例 : Yahoo! JAPAN) ○ ローカル認証 : 画面ロック解除、PIN... 52

Slide 53

Slide 53 text

まとめ ● パスワード認証を安全に運用することは困難 ● WebAuthn APIによる新しい認証方式はすぐそこまで来ている ● 今ある認証方式でもパスワードレスは始められる ● パスワード認証への依存を意識しよう 53

Slide 54

Slide 54 text

終わりです ● こっそり質問がある方 -> @ritou まで ● この分野、もっと詳しく知りたくなったら -> idcon 54