WEB+DB PRESS Vol.114

WebAuthN 導入のモチベーションは何か
💵
セキュリティ キーや顔認証でログインしたい
── Cacoo チーム @shoozhoo
- 2018年4月
- 社内ハッカソンで実装
- Google WebAuthnDemo を改造
- 単要素ユーザネームレス認証に対応 (社内アカウント限定)
- Credential ID は local storage にストア
2018年4月 WebAuthN をリリースしなかった理由
- ユーザ エージェントへの不安
- ハッカソン発表当日に Chrome 65 => 66 の更新でエラー (April 17, 2018)
- Edge の WebAuthn API に Polyfill が必要だった
- makeCredential/getAssertion <=> create/get
- 今後も Web ブラウザの実装差分を追うのは不安
2018年4月 WebAuthN をリリースしなかった理由
- W3C WebAuthn 仕様への不安
- 勧告候補から勧告に進むまで欠陥が発見されないか不安
- ユーザが登録した公開鍵クレデンシャルが WebAuthn の仕様変更で動作しなくなる = 夜も眠れなくなる不安
- 自分たちの WebAuthn の使い方が正しいのか確信が持てなかった
- 単要素パスワードレス認証と 2FA OTPでは単要素では?
- local storage ではなくないか?
2018年4月 WebAuthN をリリースしなかった理由
- 認証器の普及率への不安
- セキュリティ キーをユーザが購入する方法では普及するとは思えなかった (U2F)
- FIDO2 対応のクロスプラットフォーム セキュリティ キーも当時は存在しなかった
- スマートフォンは理想のセキュリティ デバイスだった (UAF)
- iPhone (Safari) の WebAuthn サポート予定が当時は存在しなかった
- Android は…
2019年10月 WebAuthN の状況は
- W3C WebAuthn 仕様
- ユーザ エージェント
- Brave, Chrome, Chromium, Edge, Firefox, Opera, Safari
- Android (>= 7.0), Windows 10 (>= Version 1903)
- 認証器
- FIDO2
- Android 指紋認証, Touch ID (Chrome for macOS)
- BioPass FIDO2, SoloKeys, YubiKey 5
- FIDO1
ログインをどのような設計に落としたか
- 認証フローの設計
- 2要素認証
- ユーザは本当にうれしいのか?
- 利便性の真の改善にはつながらない
- 単要素パスワードレス認証
- 多要素パスワードレス認証
- 利便性と安全性を両立
- FIDO2 認証器が少しだけ普及してきた
- ユーザネームレス認証
- Windows 10 以外で普及したとは思えなかった (2019年5月)
🤔 サイド メニューへのフィードバック
🎉 サイド メニューをネスト化して改善
🤔 名称と登録機能へのフィードバック
🎉 セキュリティ デバイスに名称変更して改善
🎉 生体認証のユーザ ヘルプを画面に追加して改善
🎉 パスワードレス認証には ISUVPAA による制限を設けて改善
🤔 サポート環境へのフィードバック
🎉 サポート環境は外部のヘルプ デスクに用意
アカウント リカバリの設計
- 認証器を盗難/損傷/紛失したユーザ
- 従来のパスワード認証でログインして認証器の登録を削除
- パスワードを削除したユーザ
仕様の網羅 (どこまで対応したのか)
- Attestation Statement
- Basic, Self, AttCA, ECDAA, None
- packed, tpm, android-key, android-safetynet, fido-u2f, none
- FIDO Metadata Service (MDS)
- Resident Key
- Token Binding
- Extensions (WebAuthn)
- HMAC Secret Extension (CTAP2)
- RS256 (-257) expires 2020-04-19
対応端末や実際の認証器は
- Windows 10 バージョン 1903 以降
- Windows Hello 顔認証は素早く便利 (PC の性能による)
- プラットフォーム認証器 => ローミング認証器の切替えに注意
- Chrome for macOS Touch ID
- Android 7.0 以上
- Chrome WebView に対応すると指紋認証が使えるので便利
- FIDO2 セキュリティ キーは NFC/BLE が便利
実装が困難だった点
- Chrome for macOS の Touch ID 複数登録の後勝ち問題
- パスワードレス認証で Touch ID を登録
- 2FA で Touch ID を登録
- 2FA では Touch ID は使える (後勝ち)
- パスワードレス認証で Touch ID が使えなくなる
- Demo
- Chromium は rp.id + user.id (user handle) をキーに上書き?
実装が困難だった点
- エラー ハンドリング
- 詳細を忘れてしまった 🙇
- DOMException が Web ブラウザ毎に解釈が違った?
- or DOMException から的確な警告を出せなかった?
実装が困難だった点
- アカウント新規作成でパスワードレス
- アカウント作成の入り口が backlog.com,cacoo.com と typetalk.com に分かれている
- FIDO AppID Extension (appid) で解決できそうでは?
指紋が変わって生体認証が使えなくなったらどうすれば
- PIN で認証器を解除して生体情報を再登録
- 生体情報が RP サーバ側にある印象を持たれる
- ローカル認証のメンタル モデルがまだ浸透していない
パスワード削除でモバイルが使えない
- パスワード削除機能と 2FA の強制
- 管理者が 2FA を強制
- ユーザが多要素パスワードレス認証を設定
- パスワード認証が残っているため,2FA 強制は NG
- ユーザがパスワード認証を削除 (2FA も自動削除)
- パスワード認証が無効化されたため,2FA 強制は OK
- ユーザは全端末から強制サインアウト
- ユーザがモバイルからも強制サインアウト
- ユーザはモバイルでアプリが使えない
- ユーザはパスワード認証を再設定
プラットフォーム WebAuthn API と ローミング認証器
- プラットフォーム セキュリティ モジュールが未搭載のデバイス上で,FIDO2 ローミング認証器が使えない
Touch ID が使えなくなった
- 2FA で登録した Chrome for macOS の Touch ID が使えない
- 公開鍵クレデンシャル登録時の Chrome の Profile に紐付く
- Demo
使用可能な認証器がわからない
- 使用可能なデバイスやセキュリティ キーを書くとよさそう
- すべての認証器をすべての環境で試す環境は持っていないのでヘルプ化し難い
まとめ
- ✅ 標準化
- ✅ ユーザ エージェント
- ✅ 認証器
- ✅ RP サーバ ライブラリ
- □ Web サービスに実装!
- @ritou さん builderscon で Nulab をありがとうございました 🎉
WebAuthN 実際に導入してどうだったか web-study - WebAuthN Study @サイボウズ 東京オフィス 2019/10/28 @kasecato