跳到主要内容

4.3. Key Derivation (密钥派生)

4.3. Key Derivation (密钥派生)

无论采用何种加密或消息认证变换 (它可能是 SRTP 预定义变换或根据第 6 节新引入的), 可互操作的 SRTP 实现必须使用 SRTP 密钥派生来生成会话密钥。一旦密钥派生率在会话开始时正确地发出信号, 使用 SRTP 密钥派生的各方之间就不需要额外的通信。

                      packet index ---+
|
v
+-----------+ master +--------+ session encr_key
| ext | key | |---------->
| key mgmt |-------->| key | session auth_key
| (optional | | deriv |---------->
| rekey) |-------->| | session salt_key
| | master | |---------->
+-----------+ salt +--------+

图 5: SRTP 密钥派生。

SRTP 至少应该执行一次初始密钥派生, 即, 第一次密钥派生是必需的。根据密码上下文中的 "key_derivation_rate" 值, 可以执行密钥派生的进一步应用。密钥派生函数应该在第一个数据包之前初始调用, 然后, 当 r > 0 时, 每当 index mod r 等于零时就执行密钥派生。这可以被认为是"刷新"会话密钥。"key_derivation_rate" 的值必须在相关主密钥的生命周期内保持固定。

可互操作的 SRTP 实现也可以派生用于加密变换的会话盐化密钥, 如两种预定义变换中所做的那样。

令 m 和 n 为正整数。伪随机函数族是一组密钥函数 {PRF_n(k,x)}, 使得对于 (秘密) 随机密钥 k, 给定 m 位 x, PRF_n(k,x) 是一个 n 位字符串, 在计算上与随机 n 位字符串无法区分, 见 [HAC]。对于 SRTP 中的密钥派生目的, 必须使用具有 m = 128 (或更多) 的安全 PRF, 并且在第 4.3.3 节中定义了默认的 PRF 变换。

令 "a DIV t" 表示 a 除以 t 的整数除法, 向下取整, 并且对于所有 a, 约定 "a DIV 0 = 0"。我们还约定将 "a DIV t" 视为与 a 相同长度的比特串, 因此 "a DIV t" 通常将具有前导零。

密钥派生应该按如下方式定义, 根据 <label> (一个 8 位常数, 见下文), master_salt 和 key_derivation_rate (在密码上下文中确定), 以及 index (数据包索引, 即 SRTP 的 48 位 ROC || SEQ):

  • 令 r = index DIV key_derivation_rate (使用上面定义的 DIV)。

  • 令 key_id = <label> || r。

  • 令 x = key_id XOR master_salt, 其中 key_id 和 master_salt 对齐, 使它们的最低有效位一致 (右对齐)。

对于要派生的每种类型的密钥, <label> 必须是唯一的。我们目前定义 <label> 0x00 到 0x05 (见下文), 未来的扩展可以为其他目的指定范围 0x06 到 0xff 中的新值。此数据包的 n 位 SRTP 密钥 (或盐) 应该从主密钥 k_master 派生如下:

PRF_n(k_master, x).

(PRF 可以在内部指定 x 的额外格式化和填充, 例如, 参见第 4.3.3 节中的默认 PRF。)

会话密钥和盐值现在应该使用以下方式派生:

  • k_e (SRTP 加密): <label> = 0x00, n = n_e。

  • k_a (SRTP 消息认证): <label> = 0x01, n = n_a。

  • k_s (SRTP 盐化密钥): <label> = 0x02, n = n_s。

其中 n_e, n_s 和 n_a 来自密码上下文。

主密钥和主盐值必须是随机的, 但主盐值可以是公开的。

请注意, 对于 key_derivation_rate 为 0 的情况, 密钥派生的应用应该恰好执行一次。

上面 DIV 的定义纯粹是为了符号方便。对于允许的密钥派生率集合中的非零 t, "a DIV t" 可以实现为按 t 的以 2 为底的对数进行右移。如果选择的速率是 256 的幂, 则进一步促进派生操作, 但该粒度被认为太粗糙而不能成为本规范的要求。

使用相同主密钥可以保护的数据包数量的上限 (见第 9.2 节) 独立于密钥派生。