RSAブラインド署名を用いたHTTP認証の提案仕様

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認証を行うサーバは、署名者によって署名されている事は分かります。しかし、クライアントを特定することは出来ません。