4.1.1. AES in Counter Mode (计数器模式下的 AES)
4.1.1. AES in Counter Mode (计数器模式下的 AES)
从概念上讲, 计数器模式 [AES-CTR] 包括加密连续的整数。为了随机化整数序列的起始点, 实际定义稍微复杂一些。每个数据包都使用不同的密钥流段进行加密, 该密钥流段应该按如下方式计算。
密钥流段应该是 AES 密码在加密方向上的 128 位输出块的串联, 使用密钥 k = k_e, 其中块索引按递增顺序排列。符号化地, 每个密钥流段如下所示
E(k, IV) || E(k, IV + 1 mod 2^128) || E(k, IV + 2 mod 2^128) ...
其中 128 位整数值 IV 应该由 SSRC, SRTP 数据包索引 i 和 SRTP 会话盐化密钥 k_s 定义, 如下所示。
IV = (k_s * 2^16) XOR (SSRC * 2^64) XOR (i * 2^16)
上述异或和中的三个项中的每一个都根据需要填充尽可能多的前导零, 以使操作定义良好, 被视为 128 位值。
包含 SSRC 允许使用相同的密钥来保护同一 RTP 会话中的不同 SRTP 流, 请参阅第 9.1 节中的安全警告。
对于 SRTCP, 必须使用复合数据包的第一个头部的 SSRC, i 应该是 31 位 SRTCP 索引, k_e 和 k_s 应该被 SRTCP 加密会话密钥和盐值替换。
请注意, 初始值 IV 对于每个数据包是固定的, 并且通过在最低有效位中"保留" 16 个零来形成, 用于计数器的目的。对于任何固定的 IV 值生成的密钥流块数绝对不能超过 2^16, 以避免密钥流重用, 见下文。AES 的块大小为 128 位, 因此 2^16 个输出块足以生成加密最大可能的 RTP 数据包所需的 2^23 位密钥流 (除了 IPv6 "巨型数据报" [RFC2675], 这些不太可能用于基于 RTP 的多媒体流量)。对可以加密的数据包的最大比特大小的这种限制通过限制概率攻击的有效性来确保加密方法的安全性 [BDJR]。
对于特定的计数器模式密钥, 用作输入的每个 IV 值必须是不同的, 以避免两次一密情况的安全暴露 (第 9.1 节)。为了满足此约束, 实现必须确保 ROC || SEQ 的 SRTP 数据包索引的组合以及 IV 构造中使用的 SSRC 对于任何特定密钥都是不同的。未能确保这种唯一性可能对安全 RTP 造成灾难性后果。这与 RTP 本身的情况形成对比, RTP 本身可能能够容忍此类失败。建议, 如果存在专用的安全模块, RTP 序列号和 SSRC 应该由该模块生成或检查 (即, SRTP 系统中的序列号和 SSRC 处理需要像密钥一样受到保护)。