随着网络技术的发展和标准的制定,实时音频、视频的应用越来越广泛,这 些应用反过来又促进了相关协议标准的发展。1996年IETF在RFC1889中定义了传输实时数据的Internet标准协议RTP,并在2003年制定了升级版本RFC3550。
二 简介
SRTP & SRTCP
安全实时传输协议(Secure Real-time Transport Protocol或SRTP)是在实时传输协议(Real-time Transport Protocol或RTP)基础上所定义的一个协议,旨在为单播和多播应用程序中的实时传输协议的数据提供加密、消息认证、完整性保证和重放保护。它是由 David Oran(思科)和Rolf Blom(爱立信)开发的,并最早由IETF于2004年3月作为RFC 3711发布。
由于实时传输协议和可以被用来控制实时传输协议的会话的实时传输控制协议(RTP Control Protocol或RTCP)有着紧密的联系,安全实时传输协议同样也有一个伴生协议,它被称为安全实时传输控制协议(Secure RTCP或SRTCP);安全实时传输控制协议为实时传输控制协议提供类似的与安全有关的特性,就像安全实时传输协议为实时传输协议提供的那些一样。
在使用实时传输协议或实时传输控制协议时,使不使用安全实时传输协议或安全实时传输控制协议是可选的;但即使使用了安全实时传输协议或安全实时传输控制协议,所有它们提供的特性(如加密和认证)也都是可选的,这些特性可以被独立地使用或禁用。唯一的例外是在使用安全实时传输控制协议时,必须要用到其消息认证特性。
为了提供对数据流的保密,需要对数据流进行加密和解密。关于这一点,安全实时传输协议(结合安全实时传输控制协议)只为一种加密算法,即AES制定了使用标准。这种加密算法有两种加密模式,它们能将原始的AES块密文转换成流密文:分段整型计数器模式和f8模式。
除了AES加密算法,安全实时传输协议还允许彻底禁用加密,此时使用的是所谓的“零加密算法”。它可以被认为是安全实时传输协议支持的第二种加密算法,或者说是它所支持的第三种加密模式。事实上,零加密算法并不进行任何加密,也就是说,加密算法把密钥流想像成只包含“0”的流,并原封不动地将输入流复制到输出流。这种模式是所有与安全实时传输协议兼容的系统都必须实现的,因为它可以被用在不需要安全实时传输协议提供保密性保证而只要求它提供其它特性(如认证和消息完整性)的场合。
以上列举的加密算法本身并不能保护消息的完整性,攻击者仍然可以伪造数据——至少可以重放过去传输过的数据。因此,安全实时传输协议标准同时还提供了保护数据完整性以及防止重放的方法。
为了进行消息认证并保护消息的完整性,安全实时传输协议使用了HMAC-SHA1算法。这种算法使用的是默认160位长度的HMAC-SHA1认证密钥。但是它不能抵御重放攻击;重放保护方法建议接收方维护好先前接收到的消息的索引,将它们与每个新接收到的消息进行比对,并只接收那些过去没有被播放过的新消息。这种方法十分依赖于完整性保护的使用(以杜绝针对消息索引的欺骗技术)。三 协议的数据报文结构
数据报文包括包头、数据主体以及认证信息三个部分。
(1)32bits:
V 2bits 版本号,现在已经是版本2
P 1bit 填充位,当负载的长度不够32bits的整数倍时,需要填充位
X 1bit 扩展位,若为1,则固定的包头后增加一个32bits的扩展(rtp extension)
CC 4bits CSRC的数目
M 1bit 允许在比特流中标记重要的事件
PT 7bits 负载类型
序列号16bits 每发送一个RTP数据包,序列号加1,根据此来判断序列号的顺序
(2)时间戳 32bits
(3)SSRC标识符 32bits synchronizating source identifier 识别同步源
(4)CSRC标识符 n个32bits contributing source identifiers 识别负载重的有效贡献源
(5)可选存在的RTP extension
(6)加密的payload(末尾可能包含RTP padding和RTP pad count)
(7)包尾是SRTP MKI(可选),master key identifier,是用来生成session加密密钥的随机位串标识符。
(8)认证标签(Authentication tag)
与RTP包的主要区别是负载加密、SRTP MKI(主密钥标识符,由密钥管理协议决定)、认证标签。
3、协议的工作流程
(1)协议中涉及哪些密钥和重要参数
主密钥 master key
主密钥是一个长度不定的随机位串,用来生成会话密钥
会话密钥 session key
会话密钥就是用于消息加密和认证的密钥
master salt 不知道怎么翻译
salt是指一种在生成会话密码时的输入参数,salt增加了字典式攻击的难度,每增加1bit的salt,就会使字典攻击的难度和时间翻倍。
key_derivation_rate
生成会话密钥的速率,必须是{1,2,4,……2^24}中的一个,必须为2的幂数
<from,to>
这是两个48bits的时间值,表示master key的有效时间。
ROC(rollover counter)
记录序列号的重置次数,用来计算SRTP包的索引
Index = 2^16 * ROC + SEQ
(2)会话密钥的产生
在协议中,密钥生成过程的描述是通过数学函数来说明的,如下:
key_session = PRF (key_master, x);
r = index/key_derivation_rate;;//label长度8位
key_id = <label> || r;
x = key_id XOR master salt;
PRF是一个AES-cm的对称加密函数。
用框图表示,如下:
其中,IV=[ <label>||(index/key_derivation_rate)XOR master_salt ]*2^16
index=2^16*ROC+SEQ
对于生成的不同密钥,8位的label有不同的值:
session_en_key:消息加密密钥,<label>=0x00
session_au_key:消息认证密钥,<label>=0x01
session_salt_key:会话salt,<label>=0x02
(3)具体工作流程
得到会话密钥后,就可以对消息载荷进行安全操作了。
发送方工作流程:
1)确定加密上下文
2)根据ROC、加密上下文中的最高序列号以及RTP包中的序列号,确定SRTP包索引
index=2^16*ROC+SEQ
3)根据index确定master_key和master_salt(需要密钥管理协议)
4)根据密钥管理协议中的各个参数,通过密钥生成器,得到会话密钥
5)利用会话密钥和传输参数设定,对载荷进行加密,作为数据包中的加密载荷
6)如果MKI字段为1,则加入MKI字段
7)计算认证标签,并加在包尾
8)更新ROC和数据包索引
接收端流程
1)确定加密上下文
2)计算包索引
index=2^16*v+SEQ
v={ROC-1,ROC,ROC+1}/2^32
3)如果MKI字段为1,则根据MKI确定主密钥和主密钥salt,否则用index确定主密钥和salt
4)得到会话密钥
5)重播检查,利用index和重播列表来检查重播,如果为重播数据包,则丢弃,并记录log。
执行认证过程,如果不匹配,则丢弃,并记录log。
6)利用会话密钥解密数据载荷
7)根据index,更新ROC、最大序列号、加密上下文中的s_l值,需要时更新重播列表。
8)从数据包中删除MKI和认证标签。
相关推荐
本文以共享桌面项目为驱动,以渐进迭代的授课方式,遵循RFC标准,深入解析STUN/TURN/DTLS/ICE/RTP/RTCP/SRTP/SRTCP等网络传输协议栈,手把手带你实现WebRTC P2P通信核心技术和ICE网络框架。教学过程中还会设计针对性...
### 流媒体协议详解 #### 一、RTP (Real-...RTP、RTCP、SRTP/SRTCP和RTSP等协议各自在不同领域发挥着关键作用,为用户提供了高质量的音视频体验。随着技术的不断进步,这些协议也将继续演进,以满足不断变化的需求。
实时传输协议(Secure Real-time Transport Protocol,简称SRTP)是一种为实时数据通信提供增强安全性的协议,常用于VoIP(Voice over IP)、视频会议、在线游戏等应用中。SRTP 1.4.4是该协议的一个特定版本,通常...
该库包含了实现SRTP和SRTCP(Secure Real-time Transport Control Protocol)所需的所有组件,包括密钥管理、加密和完整性保护算法等。 总的来说,SRTP通过AES加密保证了RTP数据包的机密性,同时通过密钥管理和认证...
标题"srtp加解密库"指的是Secure Real-time Transport Protocol (SRTP)的加密库,这是一个专为实时传输协议(RTP)设计的安全增强版本。SRTP通常用于保护网络音视频通话或者数据传输过程中的隐私和完整性。 描述中...
Libsrtp是一个开源的C语言库,专门用于实现SRTP和SRTCP(Secure Real-time Transport Control Protocol)协议。该库的版本为2.0.0,提供了丰富的API接口,使得开发者能够方便地在各种应用程序中集成SRTP功能。...
6. **身份认证与安全性**:虽然RTP/RTCP本身不提供安全特性,但可以通过与其他协议(如SRTP/SRTCP)结合使用,实现加密和身份验证,保护数据的安全性。 RTP和RTCP广泛应用于VoIP(Voice over IP)、视频会议、在线...
SRTP/SRTCP协议 - **SRTP(Secure Real-time Transport Protocol)**: 用于对RTP数据进行加密,同时提供消息认证和完整性保护,防止重放攻击。 - **SRTCP(Secure Real-time Control Protocol)**: 与SRTP配合工作...
- SRTP通常与SRTCP(Secure Real-Time Control Protocol)一起使用,SRTCP负责提供传输控制层面的安全保障,如反馈和错误检测。 2. **SRTP在游戏开发中的应用** - 游戏中的实时通信:SRTP可确保玩家之间的语音...
由Internet Engineering Task Force (IETF)发布,主要描述了Datagram Transport Layer Security (DTLS)扩展,以便为Secure Real-time Transport Protocol (SRTP)和Secure RTP Control Protocol (SRTCP)流程建立密钥...
libsrtp是一款开源的安全实时传输协议(Secure Real-time Transport Protocol, SRTP)实现库,主要用于提供音频和视频数据在传输过程中的安全保护。SRTP是IETF(互联网工程任务组)定义的一种增强型RTP(Real-time ...
这可能涉及到RTP/RTCP协议,用于传输实时数据,以及SRTP/SRTCP用于确保数据的安全性。 4. **多线程与并发**:由于音视频处理通常需要较高的计算资源,因此开发者可能会使用多线程或异步编程来提高程序性能,确保...
对于RTP,需要理解其工作原理、头字段和如何与其他协议(如SRTP、SRTCP)配合。对于JRTPLIB,需要阅读文档,熟悉其API用法,编写示例程序来实践。至于JThread,理解Java线程模型和同步机制是基础,同时要关注如何...
SRTP和SRTCP(安全RTP) DNS客户端 STUN / TURN / ICE堆栈 BFCP 带有客户端/服务器的HTTP堆栈 网络套接字 抖动缓冲 异步I / O(轮询,epoll,选择,队列) UDP / TCP / TLS / DTLS传输 JSON解析器 实时消息协议...
SDP RTP和RTCP SRTP和SRTCP(安全RTP) DNS客户端STUN / TURN / ICE堆栈BFCP 带有客户端/服务器的HTTP堆栈网络套接字抖动缓冲异步I / O(轮询,epoll,选择,队列) UDP / TCP / TLS / DTLS传输JSON解析器实时消息...
此外,SRTP(Secure RTP)和SRTCP(Secure RTCP)用于增强安全性,而ICE(Interactive Connectivity Establishment)、STUN(Session Traversal Utilities for NAT)和TURN(Traversal Using Relays around NAT)则...
因此,通常需要使用SRTP(Secure Real-time Transport Protocol)来加密RTP数据,并通过SRTCP提供安全控制。 7. **多播组成员管理** 开发者还需要处理多播组成员的动态加入和离开,这可能涉及到IGMP(Internet ...