4. 「aes128gcm」コンテントコーディング使用上の制限
4. 「aes128gcm」コンテントコーディング使用上の制限
アプリケーションサーバーは MUST で, プッシュメッセージを単一レコードで暗号化しなければならない. これにより単一レコードだけを扱う最小の受信実装が可能になる. アプリケーションサーバーは MUST で, "aes128gcm" コンテントコーディングヘッダの "rs" パラメータを, 平文長, パディング区切り (1オクテット), 任意のパディング, 認証タグ (16オクテット) の長さの合計より大きく設定しなければならない.
プッシュメッセージは MUST で, 暗号化コンテントコーディングヘッダの "keyid" パラメータにアプリケーションサーバーの ECDH 公開鍵を含めなければならない. [X9.62] の非圧縮点形式 (先頭が 0x04 の65オクテット列) が "keyid" 全体を構成する. したがって "keyid" は [RFC8188] が推奨する有効な UTF-8 にはならない.
プッシュサービスは4096オクテットを超えるペイロード本体をサポートする必要はない ([RFC8030] 第7.2節). ヘッダ (86オクテット), パディング (最低1オクテット), AEAD_AES_128_GCM の拡張 (16オクテット) を除くと, 平文は多くて3993オクテットまでとなる.
アプリケーションサーバーは MUST NOT で, プッシュメッセージに他のコンテントエンコーディングを用いてはならない. 特に圧縮するエンコーディングはプッシュメッセージ内容の漏えいにつながり得る. したがって Content-Encoding ヘッダフィールドの値はちょうど一つで, "aes128gcm" である. 複数の "aes128gcm" は許されない.
ユーザエージェントは複数レコードをサポートする必要はない. ユーザエージェントは MAY で "rs" パラメータを無視してよい. レコードサイズを検査しない場合, 妥当なケースでも復号は高い確率で失敗する. パディング区切りオクテットは MUST で検査する. 0x02 以外の値は MUST でメッセージを破棄しなければならない.