跳到主要内容

1. 简介

1. 简介

本文档描述一种机制, 用于通过 DTLS [RFC4347] 为 SRTP [RFC3711] 和 SRTCP [RFC3711] 流建立密钥. SRTP 和 SRTCP 在无歧义时统称为 SRTP, 它们使用对称密钥加密和认证. 它们需要主密钥 (master key), 主盐 (master salt), SRTP 加密算法, SRTP 认证算法以及 SRTP 参数. DTLS 是一种信道安全协议, 支持端点之间的相互认证和密码参数协商. DTLS 握手完成后, 加密数据会作为一系列 DTLS 记录发送. 通过在 DTLS 握手中用信令传递 SRTP 参数, DTLS 可用于为 SRTP 流建立密钥.

本文档定义一个新的 DTLS 扩展, 使 DTLS 对等方能够协商使用 SRTP, 并为双方策略提供参数. 该扩展并不提供 SRTP 策略的完整协商; 扩展中提供的策略必须包含接收端点正确解密流量所需的每一个参数. 该扩展不提供协商是否使用 DTLS-SRTP 的方式, 也不提供协商使用哪一种 SRTP 策略的方式. 必须执行 DTLS 握手, 以提供 SRTP 所需的密钥协商.

开发 DTLS-SRTP 的一个动因是, 当前用于 SRTP 密钥管理的机制已经大量涌现 [RFC4568][RFC4567][SDESCRIPTIONS] [MIKEY]. 另一个动因是支持未来开发诸如密码学绑定身份 (cryptographically bound identity) 之类的功能.

需要注意, DTLS-SRTP 与 SDP Security Descriptions [RFC4568] 高度相似, 并且在很大程度上兼容. 主要差异如下:

  • DTLS-SRTP 为媒体提供端到端安全性, 因为密钥建立发生在媒体路径上. 使用 SDP Security Descriptions 时, 只能确认安全性是逐跳的.
  • DTLS-SRTP 提供有限的身份认证, 在需要强身份时很有用. 使用 SDP Security Descriptions 时, 身份完全通过带外方式提供.
  • DTLS-SRTP 允许对长时会话重新加密钥. 使用 SDP Security Descriptions 时, 重新加密钥通常需要另一次 offer/answer 交换.

面向应用程序的接口设计得非常简单. 应用程序唯一需要提供的信息是密钥材料 (keying material) 的用途; 例如, 它将用于 SRTP. 应用程序不需要提取密钥或密码算法, 因为 RTP 栈已经能够访问它们.

本文档还描述如何在单个 UDP 端口上复用 RTP, RTCP, DTLS 和 STUN 数据包. STUN [RFC5389] 用于允许媒体穿越 Network Address Translators (NATs) 和防火墙. 由于 RTP 和 RTCP 运行在同一主机和端口上, 它们共享同一个 NAT 绑定.