これを読んでいる Web Authentication: An API for accessing Public Key Credentials Level 1
4章まで読んだとはつまりまだ本編に入っていないという意味である
TerminologyがTerminologyだけで理解できないところがいくつかあり、今後を読み進めながら理解した上で再度読み直し、ある程度噛み砕いた説明をできるようになったら会社のブログにまとめる予定
以下、読みながらとっていたメモ
Introduction
- webauthnは認証のための公開鍵ベースのクレデンシャルを作るAPIだよ
- 公開鍵はRPに所属するOriginからしかさわれないよ
- 他のRPからはデータの中身とか存在性とか見れないよ
- Web Authentication APIはRegistrationとAuthenticationの2つの区分があるよ
- 認証機はWeb Authentication APIを使ってUAとやりとりする
1.1 Specification Roadmap
- 想定してる読み手がUAの開発者とかRPの開発者とか認証器の開発者とかいろいろいるけどどの辺読んだらいいんだ?が書いてある
1.2 Use Cases
いわゆるユースケース
1.2.1 Registration
- 携帯電話で
1.2.2 Authentication
1.2.3 New Device Registration
1.2.4 Other Use Cases and Configurations
- その他のユースケースの紹介
1.3 Platform-Specific Implementation Guidance
一般的なユースケースについて定義してるけど特定のプラットフォームでサポートする場合はプラットフォーム側の仕様とか制約とか見てくれよな
2 Conformance
- 各要素が何に適合してないとダメか、みたいな話
2.1 User Agents
- UAの実装者は、仕様を守ってくれよな!
2.2 Authenticators
- 認証器の実装者は、仕様を守ってくれよな!
2.2.1 Backwards Compatibility with FIDO U2F
- U2Fしかサポートしない場合、UserHandleは常にnullにしてくれよな!
- UserHandleは要するに認証器側が持ってるユーザーIDみたいなやつ
- U2FはIDレス認証ないので
2.3 WebAuthn Relying Parties
- 認証器の実装者は、仕様を守ってくれよな!
2.4 All Conformance Classes
- CBORの仕様を守ってくれよな!
- 守ってないやつは、許すな!
3 Dependencies
- WebAuthnが依存してる他の仕様一覧
- Base64url encodingはこの定義に合わせてるぞ、とか
- ここでいうCBORはこれのことだぞ、みたいな
4 Terminology
- アテステーション
- 認証器や、認証器が出力したデータ(credeitnal idとかキーペアとか署名回数とか)の出どころを証明する文章
- 登録時にアテステーションオブジェクトの中に入れて送信する
- アテステーション証明書
- 認証器が自身の製造元とか性能を証明するために認証器自体が利用するアテステーションキーペアのためのX.509証明書
- 登録時に認証器はアテステーション秘密鍵をRP専用の公開鍵(と追加データ)に署名するために利用する。この公開鍵はauthenticatorMakeCredentialを通じて生成される
- RPはアテステーション署名検証のために証明書のアテステーション公開鍵を利用する
- 認証式
- 認証アサーション
- authenticatorGetAssertionの結果として返る暗号で署名されたAuthenticatorAssertionResponseオブジェクト
- 認証器
- 認証ジェスチャー
- バイオメトリクス認証
- 個人の生態学的もしくは行動パターンを元にした自動的な認証
- バイオメトリクス認証器
- バイオメトリクス認証を実装している認証器
- Bound credential
- Boundは境界の方じゃなくてBindの過去分子
- 管理認証器だけが認証器に紐づけられた公開鍵クレデンシャルソースのためのアサーションを生成できること
- セレモニー
- 人間とか物理デバイスとかコンピューティングとかが連携してよしなに頑張ること(多分・・・)
- の一連の流れのことをセレモニーという、という認識でよさそう
- WebAuthnの文脈では登録と認証のこと
- 人間とか物理デバイスとかコンピューティングとかが連携してよしなに頑張ること(多分・・・)
- クライアントプラットフォーム
- クライアントサイド
- 認証器とクライアントプラットフォーム
- レジデントクレデンシャル / クライアントサイドレジデント公開鍵クレデンシャルソース
- 認証器、クライアントもしくはクライアントデバイスに保存されているクレデンシャル秘密鍵が属する公開鍵クレデンシャルソースのこと。 // TODO 関係性がよくわからんのでわかったら追記
- そのようなクライアント再度のストレージはレジデントクレデンシャルに対応している認証器を必要とし、認証器がRP IDだけを渡された場合に、ユーザーとやりとりすることで秘密鍵を選択できる必要がある
- 定義では、クレデンシャル秘密鍵は認証器によってのみ常にコントロールされる。レジデントクレデンシャルの場合、認証器は認証器自身からラップされたキーマテリアルのストレージをクライアントデバイスにオフロードするが、クライアントデバイスはそのキーストレージをリモートエンティティ(RPサーバーとか)には送信しない
- Conforming User Agent
- クレデンシャルID
- 公開鍵クレデンシャルソースとその認証アサーションのID
- 認証器が生成する
- 公開鍵クレデンシャルソースとその認証アサーションのID
- クレデンシャル公開鍵
- RPに登録するときにRPに対して発行されるキーペアの公開鍵の方
- 公開鍵の方はRPに送る
- Human Palatability
- 人間が理解できて、覚えられるようなID
- ランダムなバイトシーケンスとかじゃないやつ
- 公開鍵クレデンシャルソース
- 認証アサーション生成のために認証器が利用するクレデンシャルソース
- authenticatorMakeCredentialが公開鍵クレデンシャルソースを生成し、管理している認証器に紐づけ、秘密鍵に紐づいた公開鍵を返す。RPはこの公開鍵を、公開鍵クレデンシャルソースによって作成される認証アサーションの検証に使う。
- あやふや。// TODO
- 公開鍵クレデンシャル
- Rate Limiting
- いわゆるレートリミット
- 認証器にブルートフォース対策として実装される
- 間違えすぎると指数的に遅くなったり禁止されたり
- 登録 / 登録セレモニー
- ユーザー、RP、ユーザーのクライアント(1つ以上の認証器を含む)が一緒に頑張って公開鍵クレデンシャルをつくってそれをRPのアカウントに紐づける一連の行為
- ユーザーの存在チェックとかユーザー認証も含む
- Relying Party / WebAuthn Relying Party.
- Web Authentication API で登録、認証をやるWebアプリをもつエンティティ
- Relying Party Identifier / RP ID
*登録、認証セレモニーが実行されるRPを特定する有効なドメイン文字列
- 公開鍵クレデンシャルは登録時にRP IDで指定されたエンティティと同じエンティティからのみ利用できる
- ドメイン名のみでスキーマとかポートは含まない
- https://login.example.com:1337だったらlogin.example.comかexample.com
- Test of User Presence
- シンプルな認証ジェスチャ
- 要するにユーザーが認証器にタッチするやつ(タッチじゃなくてもよい)
- Booleanの結果が返る
- 要するにユーザーが認証器にタッチするやつ(タッチじゃなくてもよい)
- 存在性チェックだけで、user verification ではない
- シンプルな認証ジェスチャ
- User consent
- User Handle
- User Verification
- 認証器が authenticatorMakeCredential と authenticatorGetAssertion でローカルで認証するやつ
- いくつかの認証ジェスチャーによって行われる
- タッチしてPIN入力とかパスワード入れたりとかバイオメトリック認証とか
- 各ユーザーの区別に使える
- User Present / UP
- user presence testによる、ユーザーの、「自分、いますよ」
- User Verified / UV
- User Verificationによる、ユーザーの、「自分、本当に自分ですよ」
- Client / WebAuthn Client
- Client Device / WebAuthn Client Device