「The Privacy Token HTTP Authentication Scheme」という提案仕様が、AppleとCloudflareの方らによって提出されています。
これは、Proxy-Authorizationヘッダで指定できる新しいHTTP認証です。RSAブラインド署名を使います。クライアントを認証するサーバは、特定の鍵で署名されている事は分かるが、クライアントを識別できません。
RSAブラインド署名そのものについては、「RSA Blind Signatures」にて、署名や検証の方法が書かれている。
この仕様では、RSAブラインド署名データを含むPrivacy Tokenを規定する。しかし、クライアントがそれをどのように取得するかは規定されていない。
具体的なユースケースについては、今後出てくるものと思われる。
PrivacyToken 認証方式
このHTTP認証では下記のとおりである。Proxy-Authorizationヘッダで、認証方式としてPrivacyTokenを指定し、base64urlエンコードしたPrivacyTokenの中身が続く。
Proxy-Authorization: PrivacyToken token=abc...
PrivacyToken
PrivacyTokenは次のような構造を持ちます
struct { uint8_t version; uint8_t key_id[32]; uint8_t message[32]; uint8_t signature[Nk]; } Token;
- version: この仕様では1です。
- key_id: 署名を生成するのに使用した鍵のハッシュ値。
- message: 32オクテットのランダムな値。署名される
- signature: messageへのRSAブラインド署名
クライアントはmessageに対してRSAブラインド署名をしてもらいます。署名者が何かしらの方法でクライアントを認証してたとしても、messageの中身を知ることは出来ないため、以後使用されるmessageの値をもってしてクライアントを識別することは出来ません。
(署名者と、PrivacyToken認証を行うサーバは同じ主体とは限りません)PrivacyToken認証を行うサーバは、署名者によって署名されている事は分かります。しかし、クライアントを特定することは出来ません。