最近工作上需要理解srtp协议,学习协议最好的方式就是阅读RFC文档,但英文文档读起来有点费劲,网上也找不到对应的中文翻译,所以便决定把RFC3711翻译成中文,一来是逼迫自己读懂每一段每一句,二来希望对从事音视频开发的程序员有帮助。
rtp(实时传输协议)用于传输实时音视频数据;rtcp(实时传输控制协议)是rtp的配套协议,用于实时数据传输的监控和反馈、保证服务质量;srtp是rtp的profile,工作于rtp与传输层(例如udp)之间,为rtp提供数据加密、消息认证和重放保护,srtcp为rtcp提供类似功能。
1 序言
本文描述安全实时传输协议(SRTP),实时传输协议(RTP)的profile,它为RTP传输和RTP控制传输(RTCP)提供加密、消息认证、重放保护。
SRTP为RTP和RTCP流的加密、消息认证、重放保护提供一个框架。SRTP定义了一个加密变化的集合,并支持新的加密变化在未来被引入进来。同适合的key管理一道,为单播和多播RTP应用程序提供安全性。
SRTP可以实现高的吞吐和低的包膨胀,SRTP被证明能为异构环境(有无线混合)提供合适的保护。为获得这些特征,描述默认的变换,基于额外的流密文实现加密,基于带key的散列函数用于消息认证,和基于RTP顺序号的一个隐式的索引实现顺序化和同步,和为了SRTCP的索引号。
2 目标和特征
srtp的安全目标是为了
为rtp、rtcp的负载(payload)提供加密,保证机密性。
为rtp、rtcp整个包提供完整性保护。
为rtp、rtcp提供包重放保护。
上述安全服务是可选的、且相互独立,只有srtcp的完整性保护是必选的。
另外,功能上,协议的目标是:
支持升级新变化算法的框架
低带宽消耗,例如,框架支持rtp头部的高效压缩
并且,预定义变换支持:
低计算消耗
为支持节省带宽,限制包膨胀
独立于被RTP使用的底层传输、网络、和物理层,高容错丢包和乱序
这些特征确保srtp无论在有线还是无线网络环境下,都是rtp/rtcp的合适的安全保护方案。
2.1 特征
单独的master key,为srtp流和对应的srtcp流提供用于加密和完整性保护的key素材。这是通过一个key派生函数实现的,key派生函数从master key派生出session keys,用于各自的安全操作。
key派生可以被配置成周期性刷新session keys,限制每个session key产生的密文数,从而用于对抗对手的解密分析。
salting keys用于防范预计算和时间-空间置换攻击。
3 SRTP框架
srtp存在于rtp应用和网络传输层之间,在发送端,srtp拦截rtp包,并将它转换为srtp包;在接收端,srtp拦截srtp包,并将对应rtp包传递给rtp应用。
3.1 安全RTP
srtp包格式
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-&#