跳到主要内容

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]) 即已足够.