跳到主要内容

3.4. Secure RTCP (安全 RTCP)

3.4. Secure RTCP (安全 RTCP)

安全 RTCP (Secure RTCP) 遵循安全 RTP (Secure RTP) 的定义。SRTCP 向 RTCP 数据包定义添加了三个强制性的新字段 (SRTCP 索引、"加密标志" encrypt-flag 和认证标签 authentication tag) 以及一个可选字段 (MKI)。这三个强制性字段必须附加到 RTCP 数据包以形成等效的 SRTCP 数据包。添加的字段位于任何其他配置文件特定扩展之后。

根据 [RFC3550] 的 Section 6.1, 复合数据包 (compound packets) 有一个必需的数据包格式。SRTCP 必须按照该要求给出数据包, 即第一部分必须是发送方报告 (sender report) 或接收方报告 (receiver report)。但是, 该章节中指定的 RTCP 加密前缀 (一个随机的 32 位量) 不得使用, 因为如其中所述, 它仅适用于 [RFC3550] 中指定的加密方法, 而 SRTP 中使用的加密机制不需要它。

  0                   1                   2                   3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+<+
|V=2|P| RC | PT=SR or RR | length | |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
| SSRC of sender | |
+>+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ |
| ~ sender info ~ |
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
| ~ report block 1 ~ |
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
| ~ report block 2 ~ |
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
| ~ ... ~ |
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
| |V=2|P| SC | PT=SDES=202 | length | |
| +=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ |
| | SSRC/CSRC_1 | |
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
| ~ SDES items ~ |
| +=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ |
| ~ ... ~ |
+>+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ |
| |E| SRTCP index | |
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+<+
| ~ SRTCP MKI (OPTIONAL) ~ |
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
| : authentication tag : |
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
| |
+-- Encrypted Portion Authenticated Portion -----+

图 2. 安全 RTCP 数据包格式的示例, 由底层 RTCP 复合数据包组成, 包含发送方报告和 SDES 数据包。

SRTCP 数据包的加密部分 (Encrypted Portion) 包括对等效复合 RTCP 数据包的 RTCP 负载的加密 (Section 4.1), 从第一个 RTCP 数据包开始, 即从第九 (9) 个八位字节到复合数据包的末尾。SRTCP 数据包的认证部分 (Authenticated Portion) 包括整个等效 (最终为复合) RTCP 数据包、E 标志和 SRTCP 索引 (在对负载应用任何加密之后)。

添加的字段包括:

E-flag: 1 位, 必需

E 标志指示当前 SRTCP 数据包是加密的还是未加密的。[RFC3550] 的 Section 9.1 允许将复合 RTCP 数据包分成两个较低层数据包, 一个加密, 一个以明文发送。E 位设置为 "1" 表示加密数据包, "0" 表示非加密数据包。

SRTCP index: 31 位, 必需

SRTCP 索引是 SRTCP 数据包的 31 位计数器。与 SRTP 使用的 "隐式" 索引方法相反, 该索引在每个数据包中明确包含。在发送第一个 SRTCP 数据包之前, SRTCP 索引必须设置为零, 并且在发送每个 SRTCP 数据包后必须模 2^31 加一。特别是, 在重新密钥后, SRTCP 索引不得再次重置为零。

Authentication Tag: 可配置长度, 必需

认证标签用于携带消息认证数据。

MKI: 可配置长度, 可选

MKI 是主密钥指示符 (Master Key Indicator), 并根据 Section 3 中的 MKI 定义运作。

SRTCP 默认使用 SRTP 的加密上下文参数和数据包处理, 但有以下更改:

  • 接收方不需要"估计"索引, 因为它在数据包中明确标识。

  • 预定义的 SRTCP 加密如 Section 4.1 中所述, 但使用本章节中给出的 SRTCP 加密部分定义, 并使用 SRTCP 索引作为索引 i。加密转换和相关参数应当默认与为保护关联的 SRTP 流选择的相同, 而 NULL 算法应当应用于 RTCP SDES 项 (因此必须以明文发送)。

  • 预定义的 SRTCP 消息认证和完整性如 Section 4.2 中所述, 但以 SRTCP 认证部分作为输入, 并使用 SRTCP 索引作为索引 i。认证转换和相关参数 (会话认证密钥等) 应当默认与为保护关联的 SRTP 流选择的相同。

  • 预定义的 SRTCP 密钥派生如 Section 4.3 中所述, 使用 SRTCP 索引作为索引 i。主密钥和主盐值应当与关联的 SRTP 流相同, 而会话密钥长度和 key_derivation_rate 可以与 SRTP 使用的不同。

与 SRTP 一样, 可以在数据包中包含 MKI 用于 SRTCP 主密钥指示。