2. プッシュメッセージ暗号化の概要
2. プッシュメッセージ暗号化の概要
プッシュメッセージの暗号化では, P-256 曲線 [FIPS186] 上で楕円曲線 Diffie-Hellman (ECDH) [ECDH] を用いて共有秘密を確立する (第3.1節参照). さらに認証用の対称秘密を用いる (第3.2節参照).
ユーザエージェントは作成する各サブスクリプションに ECDH 鍵対と認証秘密 (authentication secret) を関連付けて生成し, ECDH 公開鍵と認証秘密をプッシュサブスクリプションのその他の詳細とともにアプリケーションサーバーへ送る.
メッセージ送信時, アプリケーションサーバーは ECDH 鍵対とランダムな salt を生成する. ECDH 公開鍵は暗号化コンテントコーディングヘッダの "keyid" パラメータに, salt は同じヘッダの "salt" パラメータに符号化される ([RFC8188] 第2.1節参照). メッセージの暗号化後, その ECDH 鍵対は破棄してよい.
プッシュメッセージの内容はコンテント暗号化鍵 (content encryption key) と nonce で暗号化または復号される. これらの値は "keyid" と salt を第3節の手続きへの入力として導出する.
2.1. 鍵と秘密の配布
サブスクリプションを利用するアプリケーションは, サブスクリプション公開鍵と認証秘密を認可されたアプリケーションサーバーへ配布する. ユーザエージェントが提供するプッシュサブスクリプション URI など, 他のサブスクリプション情報と一緒に送ってもよい.
アプリケーションはこの目的のために, 認証され機密性の保護された通信経路を MUST で用いなければならない. [RFC8030] に述べる理由に加え, 認証秘密が権限のない実体に漏れないようにする. 漏洩すると, その実体はユーザエージェントが受け入れるプッシュメッセージを生成できてしまう.
プッシュメッセージを使うアプリケーションの多くは, サブスクリプションデータの配布に使えるアプリケーションサーバーとの既存関係を持つ. 十分な機密性と完全性を備えた認証付き通信機構 (例: HTTPS [RFC2818]) で足りる.