跳到主要内容

4. Exporter Definition (导出器定义)

4. Exporter Definition (导出器定义)

导出器的输出旨在用于单个作用域, 该作用域与 TLS 会话, 标签和上下文值相关联。

导出器接受三个输入值:

  • 消歧标签字符串,

  • 使用导出器的应用程序提供的每关联上下文值, 以及

  • 长度值。

如果未提供上下文, 则计算:

PRF(SecurityParameters.master_secret, label,
SecurityParameters.client_random +
SecurityParameters.server_random
)[length]

如果提供了上下文, 则计算:

PRF(SecurityParameters.master_secret, label,
SecurityParameters.client_random +
SecurityParameters.server_random +
context_value_length + context_value
)[length]

其中 PRF 是会话使用的 TLS 伪随机函数 (Pseudorandom Function)。输出是从 master_secret 生成的长度为 length 字节的伪随机比特串。(这种结构允许与不使用上下文值的较旧导出器类型结构的互操作性, 例如 [RFC5281])。

这里的标签与 TLS 中的定义相同, 即没有终止 NULL 的 ASCII 字符串。以 "EXPERIMENTAL" 开头的标签值可以在没有注册的情况下用于私有用途。所有其他标签值必须通过 RFC 5226 [RFC5226] 描述的规范要求 (Specification Required) 进行注册。请注意, 导出器标签有可能与现有的 PRF 标签发生冲突。为了防止这种情况, 标签应该以 "EXPORTER" 开头。这不是必须的, 因为存在一些现有的使用具有不以此前缀开头的标签。

上下文值允许使用导出器的应用程序将其自己的数据与 TLS PRF 混合用于导出器输出。这可能有用的一个示例是身份验证设置, 其中客户端凭据对多个身份有效; 然后可以使用上下文值将预期身份混合到密钥材料中, 从而防止替换攻击。上下文值长度编码为无符号 16 位数量 (uint16; 参见 [RFC5246] 第 4.4 节), 表示上下文值的长度。上下文可以是零长度。因为上下文值通过 PRF 与 master_secret 混合, 所以只要攻击者不会知道 master_secret, 将机密信息混合到导出器中是安全的。