3.1. Secure RTP (安全 RTP)
3.1. Secure RTP (安全 RTP)
SRTP 数据包的格式如 Figure 1 所示。
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|X| CC |M| PT | sequence number | |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
| timestamp | |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
| synchronization source (SSRC) identifier | |
+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ |
| contributing source (CSRC) identifiers | |
| .... | |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
| RTP extension (OPTIONAL) | |
+>+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
| | payload ... | |
| | +-------------------------------+ |
| | | RTP padding | RTP pad count | |
+>+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+<+
| ~ SRTP MKI (OPTIONAL) ~ |
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
| : authentication tag (RECOMMENDED) : |
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
| |
+- Encrypted Portion* Authenticated Portion ---+
Figure 1. SRTP 数据包的格式。*加密部分对于 Section 4 预定义变换与明文大小相同。
SRTP 数据包的 "Encrypted Portion" (加密部分) 由等效 RTP 数据包的 RTP 有效载荷 (包括存在时的 RTP 填充) 的加密组成。加密部分可以 (MAY) 与明文大小完全相同, 或者可以 (MAY) 更大。Figure 1 显示了 RTP 有效载荷, 包括 RTP [RFC3550] 的任何可能的填充。
预定义的加密变换都不使用任何填充; 对于这些变换, RTP 和 SRTP 有效载荷大小完全匹配。添加到 SRTP 的新变换 (遵循 Section 6) 可能需要填充, 因此可能产生更大的有效载荷。RTP 提供了自己的填充格式 (如 Fig. 1 所示), 由于 RTP 头部中的填充指示器, 相对于使用无前缀代码的填充, 在紧凑性方面具有优点。这种 RTP 填充应当 (SHALL) 是需要填充的变换的默认方法。变换可以 (MAY) 指定其他填充方法, 然后必须 (MUST) 指定其填充的数量、格式和处理。重要的是要注意, 使用填充的加密变换容易受到微妙的攻击, 特别是在不使用消息认证时 [V02]。每个新加密变换的规范都需要仔细考虑并描述其使用的填充的安全影响。消息认证码定义了自己的填充, 因此此默认值不适用于认证变换。
OPTIONAL 的 MKI 和 RECOMMENDED 的 authentication tag 是 SRTP 定义的仅有的不在 RTP 中的字段。仅假设 8 位对齐。
MKI (Master Key Identifier, 主密钥标识符): 可配置长度, OPTIONAL。MKI 由密钥管理定义、发信号并使用。MKI 标识派生出对特定数据包进行认证和/或加密的会话密钥的主密钥。请注意, MKI 不应 (SHALL NOT) 标识 SRTP 密码上下文, 该上下文根据 Section 3.2.3 进行标识。密钥管理可以 (MAY) 使用 MKI 用于重新密钥的目的, 在密码上下文内标识特定的主密钥 (Section 3.2.1)。
Authentication tag (认证标签): 可配置长度, RECOMMENDED。authentication tag 用于携带消息认证数据。SRTP 数据包的 Authenticated Portion (认证部分) 由 RTP 头部后跟 SRTP 数据包的加密部分组成。因此, 如果同时应用加密和认证, 则应当 (SHALL) 在发送端先应用加密然后应用认证, 在接收端反之。authentication tag 提供 RTP 头部和有效载荷的认证, 并且通过认证序列号间接提供重放保护。请注意, MKI 不受完整性保护, 因为这不会提供任何额外的保护。