9.2. Key Usage (密钥使用)
9.2. Key Usage (密钥使用)
有效密钥大小由主密钥的大小决定 (上界), 对于加密来说, 还包括盐密钥 (salting key) 的大小。任何加法流密码都容易受到使用明文源的统计知识来实现密钥碰撞和时间-内存权衡攻击 [MF00] [H80] [BS00] 的攻击。这些攻击利用明文之间的共性, 并为密码分析者提供了一种方法, 可以在多个密钥或多个字节的输出上分摊解密的计算工作量, 从而降低密码的有效密钥大小。[MF00] 中提供了对这些攻击及其对互联网流量加密的适用性的详细分析。总之, 当 SRTP 用于使用 m 个不同密钥的安全系统时, SRTP 的有效密钥大小等于密码的密钥大小减去 m 的对数 (以 2 为底)。通过简单地增加所用密钥的大小可以提供对此类攻击的保护, 这里可以通过使用盐密钥来实现。请注意, 盐密钥必须 (MUST) 是随机的, 但可以 (MAY) 是公开的。(建议的) 112 位的盐大小可以防止最多使用 2^112 个密钥的场景中的攻击。这对于所有实际目的都足够了。
实现应该 (SHOULD) 使用尽可能大的密钥。请注意, 在许多情况下, 增加密码的密钥大小不会影响该密码的吞吐量。
在预定义转换中使用 SRTP 和 SRTCP 索引固定了可以用相同密钥保护的最大数据包数量。当独立考虑 SRTP 和 SRTCP 时, 对于 SRTP 流, 此限制固定为 2^48 个 SRTP 数据包, 对于 SRTCP 数据包, 此限制固定为 2^31 个。例如由于重新密钥, 达到此限制可能与索引回绕一致, 也可能不一致, 因此发送方必须 (MUST) 保持数据包计数。但是, 当相关 SRTP 和 SRTCP 流的会话密钥从相同的主密钥派生时 (默认行为, Section 4.3), 实际上必须考虑的上限是两个量中的最小值。也就是说, 当使用相同密钥保护了 2^48 个 SRTP 数据包或 2^31 个 SRTCP 数据包 (以先发生的为准) 时, 必须 (MUST) 调用密钥管理来提供新的主密钥 (先前存储和使用的密钥绝对不能 (MUST NOT) 再次使用), 或者必须 (MUST) 终止会话。如果 RTCP 的发送方发现 SRTP (或 SRTCP) 的发送方在发送属于同一 SRTP (SRTCP) 流的 2^48 个 SRTP (或 2^31 个 SRTCP) 数据包之前没有更新主密钥或会话密钥, 则由 RTCP 发送方的安全策略决定如何行动, 例如是否应该发送 RTCP BYE 数据包和/或是否应该记录该事件。
注意: 在大多数典型应用中 (假设每 128,000 个 RTP 数据包至少有一个 RTCP 数据包), 将是 SRTCP 索引首先达到上限, 尽管发生这种情况的时间非常长: 即使以 200 个 SRTCP 数据包/秒的速度, SRTCP 的 2^31 索引空间也足以保护大约 4 个月的通信。
请注意, 如果主密钥要在同一 RTP 会话内的 SRTP 流之间共享 (Section 9.1), 尽管上述界限是基于每个流 (即每个 SSRC) 的, 但发送方必须 (MUST) 基于序列号空间首先耗尽的流来做出重新密钥决策。
密钥派生限制了用固定会话密钥加密并提供给攻击者进行分析的明文量, 但密钥派生不会延长主密钥的生命周期。要理解这一点, 只需考虑我们避免两次一密的要求: 两个不同的数据包必须 (MUST) 要么使用不同的 IV 处理, 要么使用不同的会话密钥处理, 并且 IV 和会话密钥的不同性 (对于预定义的转换) 都依赖于数据包索引的不同性。
请注意, 对于密钥派生, 即使派生的会话密钥要长得多, 有效密钥大小最多也是主密钥的大小。对于预定义的认证转换, 会话认证密钥是 160 位, 但默认情况下主密钥只有 128 位。做出这一设计选择是为了符合 [RFC2104] 中的某些建议, 以便现有的 HMAC 实现可以毫无问题地插入 SRTP。由于默认标签大小为 80 位, 因此对于所考虑的应用, 从安全角度来看也被认为是可接受的。对此有顾虑的用户建议 (RECOMMENDED) 在密钥派生中改用 192 位主密钥。但是, 选择不强制使用 192 位密钥, 因为用于密钥派生的现有 AES 实现可能并不总是支持 128 位以外的密钥长度。由于 AES 未定义 (或未正确分析) 用于 160 位密钥, 因此不建议 (NOT RECOMMENDED) 使用临时密钥填充方案将较短的密钥填充到 192 或 256 位。