3.2.1. Transform-independent parameters (与变换无关的参数)
3.2.1. Transform-independent parameters (与变换无关的参数)
与变换无关的参数独立于所使用的特定加密或认证变换而存在于密码上下文中。SRTP 的密码上下文的与变换无关的参数包括:
-
一个 32 位无符号 rollover counter (ROC, 翻转计数器), 它记录 16 位 RTP 序列号在通过 65,535 后被重置为零的次数。与 SRTP 从 RTP 数据包头部提取的序列号 (SEQ) 不同, ROC 由 SRTP 维护, 如 Section 3.3.1 中所述。
我们将与给定 ROC 和 RTP 序列号对应的 SRTP 数据包的索引定义为 48 位数量
i = 2^16 * ROC + SEQ. -
仅用于接收者, 一个 16 位序列号 s_l, 可以被认为是接收到的最高 RTP 序列号 (关于其处理, 参见 Section 3.3.1), 它应该 (SHOULD) 被认证, 因为消息认证是推荐的 (RECOMMENDED),
-
加密算法的标识符, 即密码及其操作模式,
-
消息认证算法的标识符,
-
一个 replay list (重放列表), 仅由接收者维护 (当提供认证和重放保护时), 包含最近接收和认证的 SRTP 数据包的索引,
-
一个 MKI 指示符 (0/1), 指示 MKI 是否存在于 SRTP 和 SRTCP 数据包中,
-
如果 MKI 指示符设置为 1, 则为 MKI 字段的长度 (以八位字节为单位), 以及 (对于发送者) 当前活动的 MKI 的实际值 (MKI 指示符和长度的值必须 (MUST) 在上下文的生命周期内保持固定),
-
主密钥, 它必须 (MUST) 是随机的并保密,
-
对于每个主密钥, 有一个计数器记录使用该主密钥处理 (发送) 的 SRTP 数据包的数量 (对安全性至关重要, 参见 Sections 3.3.1 和 9),
-
非负整数 n_e 和 n_a, 确定用于加密和消息认证的会话密钥的长度。
此外, 对于每个主密钥, SRTP 流可以 (MAY) 使用以下关联值:
-
一个 master salt (主盐), 用于会话密钥的密钥派生。该值在使用时必须 (MUST) 是随机的, 但可以 (MAY) 是公开的。强烈推荐 (RECOMMENDED) 使用 master salt, 参见 Section 9.2。"NULL" 盐被视为 00...0。
-
集合 {1,2,4,...,2^24} 中的整数, 即 "key_derivation_rate" (密钥派生速率), 未指定的值被视为零。2 的幂的约束简化了会话密钥派生的实现, 参见 Section 4.3。
-
一个 MKI 值,
-
<From, To> 值, 指定主密钥的生命周期, 以两个 48 位索引值表示, 主密钥在其范围内 (包括范围端点) 有效。对于 <From, To> 的使用, 参见 Section 8.1.1。<From, To> 是 MKI 的替代方案, 并假设主密钥与定义 <From, To> 范围的 SRTP 会话密钥一一对应。
SRTCP 默认应当 (SHALL) 与 SRTP 共享密码上下文, 但以下情况除外:
-
不需要维护 rollover counter 和 s_l 值, 因为 RTCP 索引明确包含在每个 SRTCP 数据包中,
-
维护单独的重放列表 (当提供重放保护时),
-
SRTCP 为其主密钥维护单独的计数器 (即使主密钥与 SRTP 的相同, 见下文), 作为维护使用该密钥处理的 SRTCP 数据包数量的手段。
特别要注意的是, 如果使用预定义变换 (包括密钥派生), 主密钥可以 (MAY) 在 SRTP 和相应的 SRTCP 之间共享, 但会话密钥绝对不能 (MUST NOT) 共享。
此外, 在某些情况下 (参见 Sections 8 和 9.1), 给定 RTP 会话内的多个 SRTP 流 (由其同步源 (SSRC, 是 RTP 头部的一部分) 标识) 可能共享大部分密码上下文参数 (可能包括主密钥和会话密钥)。在这种情况下, 就像上面正常的 SRTP/SRTCP 参数共享一样, 仍然必须 (MUST) 为每个流 (SSRC) 维护单独的重放列表和数据包计数器。此外, 还必须 (MUST) 维护单独的 SRTP 索引。
有关上述参数 (和其他 SRTP 参数) 的参数摘要、预定义变换和默认值, 可以在 Sections 5 和 8.2 中找到。