「Webauthn における ResidentKey について」 について

f:id:ritou:20181020210218p:plain

ritouです。

今回はアメブロで言うところのリブログ的な何かです。

おっさん、昨日の夜にこれ読みました。

blog.haniyama.com

  • ResidentKeyの使い所
  • userVerification オプションの指定に "UserVerificationイラネ" はない
  • platform な Authenticator で UserPresent な場合って?
  • そのままで UserPresent として動作し、PIN設定したら UserVerification になる Authenticator の挙動

あたりがガーッと書かれており、熱い想いがつたわってきますね(?)。

こいつら、組み合わせ方によってイレギュラーな動きをするパターンがあるなら別だけど、これらはそれぞれ独立している話っぽい。

なので、個別で考えるのが良いんじゃないかなと思います。

ResidentKey の使い所

自分の中では、

  • 対象のユーザーが特定できている状態からの "WebAutnn 認証" リクエストのみを利用する : ResidentKey 使わなくてもなんとかなる
  • 対象のユーザーが特定できていない、もしくは事前に特定する必要がない状態からの "WebAutnn 認証" リクエストを利用する : ResidentKey 使う必要がある

ぐらいの認識でいて、WebAutnn を用いたログインフローを整理したりしています。

ritou.hatenablog.com

前者は

  • ログイン中のユーザーを WebAuthn で再認証(例:アカウント設定変更時の "パスワード確認" みたいなの)
  • Googleのログインフォームのように先にメアドなどでユーザー識別をした後に認証処理に入る

みたいなところで、ResidentKeyの機能を使わなくてもなんとかなりそうかなと言う感じです。 一方、後者は”生体認証もしくはセキュリティキーを用いてログイン” ボタンから始まるログインフローみたいなので ResidentKey の機能が必要になりそうです。

自分の検討では UserVerification 使うぞって決め打ちなので今の所そんなに悩むとこはないかなーという印象ですが、Authenticator がサポートする認証方式、つまり UserPresent vs UserVerification の話を ResidentKey の話に混ぜちゃうと、Authenticator の挙動に引っ張られて話が発散しそうな予感はします。

User Present な Platform Authenticator?

だが、スマホや PC で UV がない認証がないけど、これってどうなるの?

スマホやPCでUVがない認証、つまり生体認証もPINも不要でAndroidの初期設定みたいな画面タッチだけで通すようなイメージだろうか。 セキュリティカードみたいな使い所とかが platform(internal) な方であるのだろうか?と言うあたりでしょうか。

んで、どっかの仕様でこれを実装/提供してはいけないとか書いてあるのでしょうかね? と言うのが要確認なところ。 それがあれば別だけど、そうでなければこれを用意するかどうかは需要と言うかユースケースがあるかだけな気はします。

UserVerification 任意 はあるけど UserPresent のみでおkを指定できない

これも、要件があるのかどうかってとこですかね。

これは外部 Authenticator も一緒で、たとえば一旦 PIN を設定した YubiKey は、 User Verification オプションをオフにしても PIN の入力が求められることになる。

つまり、サービスA でタッチだけでログインしていたとして(discourage)、他のサービスBで UV が必須(required)だったとする。そこで、サービスB に登録するために新しく PIN を設定すると、サービスA でも PIN が必要になるということ。

そんなんどこに書いてあんねんってのは、CTAP2 の仕様に書いてあったように思うけど、探しても見つからない。

パッと思うのは「こんなの Authenticator(今回はYubiKey) 依存の問題で、細かいとこまで作り込めばいくらでも素直なUXにできるのでは 」ってところだけど、仕様で定義されてるものがあるのか確認が必要ですね。

日本的な言い方で言うところの「コンシューマ領域のユースケースを考慮した WebAuthn Authenticator の設計/実装ガイドライン」みたいなのがあってそれに書いてるなら従うべきだろうし、なかったら Authenticator 作ってる人たちはちゃんと考えなくちゃいけなくて大変そうですね。

まとめ

とりあえずは

  • Authenticator の挙動が仕様に沿ったものなのか、メーカー依存なのかを確認する必要がある
  • Authenticator 周りの事情がはっきりしてから ResidentKey のユースケースを考え直すと良さそう

ってとこでしょうか。 仕様読むの大変なので、もくもく会以外でも継続してオンラインで何かできると良いですね。