SRTP/SRTCP协议

article/2025/10/13 14:02:40

SRTP(Secure Real Time Protocol)安全实时传输协议,SRTCP(Secure Real Time Controle Protocol)安全实时传输控制协议。了解这个两个协议之前,首先需要了解RTP和RTCP协议,SRTP和SRTCP是在RTP和RTCP传输的基础上,对数据进行了加密和完整性认证,使得数据在网络上可以加密传输,避免信息被截取和篡改。

一、RTP协议

RTP 协议(Real TimeProtocol)提供具有实时特征的、端到端的数据传送服务,可用来传送声音和运动图像数据。在这项数据传送服务中包含了装载数据的标识符、序列计数、时戳和传送监视。通常 RTP 的协议元是用 UDP 协议元来装载的,并利用 UDP 的复用和校验和来实现 RTP 的复用。

1.1    固定报头的 RTP 报文结构
RTP协议报头结构
RTP分组头部的各字段含义为:

 V:RTP版本号。为“10”。

P:填充指示位。P为“1”时表示分组结尾含有1个或多个填充字节,其中这部分不属于有效载荷。

X:扩展指示位。X为“1”时,则表示固定头部后还有一个扩展头部,这种情况较复杂,很少使用。

CC:CSRC计数。指示固定头部后的CSRC的个数

M:标志。

PT:负载类型。表示RTP分组的负载类型。我们常用的有:

                                “0”: G.711μ

                                “8”: G.711A

                                “4”: G.723.1

                                “18”: G.729

序列号:序号顾名思义就是表示RTP分组的次序。初值为随机数,每发送一个增加1。可供接收方检测分组丢失和恢复分组次序。

时间戳:表示RTP分组第一个字节的取样时刻。其初值为随机数,每个采用周期加1。如果每次传送20ms的数据,由于音频的采样频率为8000Hz,即每20ms有160次采样,则每传送20ms的数据,时戳增加160。

SSRC:同步源标识(Synchronous Source)。表示信号的同步源,其值应随机选择,以保证同一个RTP会话中任意两个同步源的SSRC标识不同。

CSRC:分信源(贡献源)标识(Contributing Source)。识别该数据包中的有效载荷的贡献源。换句话说,CSRC标识由混合器插入,其值就是组成复合信号的各个分信号的SSRC标识,用以标识各个组成分信号的信源。RTP分组的头部最多可以包含15个CSRC标识,其数目由CC字段指明。

二、RTCP协议

 RTP本身没有提供任何确保及时传送的机制,也没有提供任何传输质量保证的机制,因而业务质量完全由下层网络的质量来决定。同时,RTP不保证数据包按序号传送,即使下层网络提供可靠性传送,也不能保证数据包的顺序到达。包含在RTP中的序列号就是供接收方重新对数据包排序之用。

        RTP需要RTCP为其服务质量提供保证,因此下面介绍一下RTCP的相关知识。RTCP的主要功能是:服务质量的监视与反馈、媒体间的同步,以及多播组中成员的标识。在RTP会话期间,各参与者周期性地传送RTCP包。RTCP包中含有已发送的数据包的数量、丢失的数据包的数量等统计资料,因此,各参与者可以利用这些信息动态地改变传输速率,甚至改变有效载荷类型。RTP和RTCP配合使用,它们能以有效的反馈和最小的开销使传输效率最佳化,因而特别适合传送网上的实时数据。RTCP也是用UDP来传送的,但RTCP封装的仅仅是一些控制信息,因而分组很短,所以可以将多个RTCP分组封装在一个UDP包中。RTCP有如下五种分组类型。

 

发送端报告分组SR(SenderReport)用来使发送端以多播方式向所有接收端报告发送情况。SR分组的主要内容有:相应的RTP流的SSRC,RTP流中最新产生的RTP分组的时间戳和NTP,RTP流包含的分组数,RTP流包含的字节数。

2.2 报文结构
RTCP协议报头结构

三、SRTP

SRTP(SecureReal-time Transport Protocol) 安全实时传输协议,SRTP是在实时传输协议(Real-time Transport Protocol)基础上所定义的一个协议,旨在为单播和多播应用程序中的实时传输协议的数据提供加密、消息认证、完整性保证和重放保护安全实时传输协议。

3.1协议格式

3.2 SRTP加密环境


在SRTP中,发送方和接收方需要为每一个SRTP流维护一份加密状态信息,该信息称为加密环境。一个加密环境ID号由SSRC,目的网络地址和目的传输端口号唯一确定。

Context ID=<SSRC,dest address,drstv port>

注意:如果不能找到某个加密上下文标识符对应的数据包的加密上下文,数据包必须丢。

加密环境保存两类参数,分别为变换相关参数和变换无关参数。变换相关参数指与所使用具体加密变换方法和认证变换方法有关的参数,如密码组大小,会话密钥,初始化向量信息数据等。变换无关参数包括:

(1)  一个32位的循环计数器(ROC),用来记录16bit的RTP序列号有多少次超过65535后被置位0。根据ROC来产生SRTP数据包索引index,其中index = 2^16 * ROC + SEQ,SEQ为RTP数据包序列号,从数据包中获取。

(2)      一个16bit序列号保存接收方接收到的最高RTP序列号。

(3)      加密算法的标识符,标识使用哪种加密算法。

(4)      消息认证算法的标识符,标识使用的哪种认证算法。

(5)      重放列表,若启用了消息认证则接收方需保存一张重放列表,记录最近收到并通过认证的SRTP数据包索引号,该列表长度不得低于256。

(6)      MKI指示器(0/1),标识是否包中有MKI。

(7)      MKI值,如果MKI指示器为1,则保存MKI字段长度,发送方当前使用的KMI值。

(8)      主密钥,需要随机和保密,每个主密钥有以下相关参数:

         1)主salt,用来从主密钥推导会话秘钥,是个随机数,可以公开。

         2)密钥推导率,也是用来从主密钥推导会话密钥,是2的幂次方。

         3)对应的MKI值。

         4) <From,To>定义主密钥的存活时间,From,To是两个48bit的SRTP包索引号。

          5)一个计数器,记录用该主密钥处理的SRTP包数量。

(9) 两个非负整数n_e和n_a来表示加密会话密钥和认证会话密钥的长度。

 3.3 SRTP密钥

SRTP使用两种密钥:主密钥(masterkey)和会话密钥(session key)

master key用来生成相应的session key,一个加密环境可以有多个masterkey,处理某个SRTP包时决定使用哪个master key有两种方法:一是在数据包里加MKI字段直接指定,但是这样增加了数据包的长度,加重了网络负担。二是通过加密环境中<From,To>值为每一个主密钥指定其处理的数据包索引号范围,超过该范围,该主密钥失效,但是此方法只能应用于单向或者双向通行中,在多方通信中不能采用。

session key是在加密传输中使用,用于加密变换或者消息认证变换,它由主密钥,主Salt,密钥推导率,会话密钥长度和SRTP索引号决定。

无论是使用加密传输还是消息认证传输,SRTP必须通过密钥生成器来产生sessionkey。

r = index/key_derivation_rate;

key_id = <label> || r;

x = key_id XOR master salt;(XOR为异或运算符)

n位的密钥key通过以下的函数产生

key_session = PRF (key_master, x);PRF是一个AES-cm的对称加密函数。

不同的密钥的产生由一个8位的<label>字段来区分,对于生成的不同密钥,8位的label有不同的值:

session_en_key:会话加密密钥,<label>=0x00

session_au_key:会话认证密钥,<label>=0x01

session_salt_key:会话salt密钥,<label>=0x0

3.4加密算法


(1)在标准中,默认的加密算法为AES(Advanced Encryption Standard),这种加密算法有两种加密模式,它们能将原始的AES块密文转换成流密文并且定义了两种运行模式,加密模式分别为:

           1)Counter模式(分段整型计数器模式):AES in Counter Mode  128-bit

           2)f8模式 : AES inf8-mode    128-bit

(2)为了进行消息认证并保护消息的完整性,安全实时传输协议使用了HMAC-SHA1算法。这种算法使用的是默认160位长度的HMAC-SHA1认证密钥。但是它不能抵御重放攻击;重放保护方法建议接收方维护好先前接收到的消息的索引,将它们与每个新接收到的消息进行比对,并只接收那些过去没有被播放过的新消息。这种方法十分依赖于完整性保护的使用。

(3)安全实时传输协议还允许彻底禁用加密,此时使用的是所谓的“零加密算法”。零加密算法并不进行任何加密,也就是说加密算法把密钥流想像成只包含“0”的流,并原封不动地将输入流复制到输出流。

AES加解密的流程图:

3.5数据包的处理过程


3.5.1发送方工作流程
1)  确定加密上下文

2)  根据ROC、加密上下文中的最高序列号以及RTP数据包中的序列号,确定SRTP数据包索引。Index = 2^16* ROC + SEQ,其中,SEQ为RTP数据包序列号。

3)  根据步骤(2)中确定的SRTP索引,确定master key和master salt

4)  使用master key、master salt、key_derivatio_rate以及session key-length确定session key和session salt。

5)  使用加密上下文中指定的加密算法、session key和session salt,对RTP payload进行加密,作为数据包中的EncryptedPortion。

6)  如果MKI标志为1,则加入MKI字段。

7)  对于消息加密,使用当前的ROC、加密上下文中指定的加密算法以及session key,计算认证Tag以填充数据包的AuthenticatedPortion字段。

8)  根据需要,更新ROC和数据包索引。

3.5.2接收端流程(认证、解密一个SRTP数据包)


1) 确定加密上下文

2) 根据下式获取SRTP数据包索引。

Index = 2^16 * v + SEQ

其中,SEQ为RTP数据包序列号,v从集合{ROC-1,ROC,ROC+1}(%2^32)中选取。

3) 确定master key和master salt。如果MKI标志为1,则使用NKI确定masterkey和master salt。否则,使用步骤(2)中确定的SRTP索引。

4) 根据master key、master salt、key_derivation_rate和session key-length确定session key和session salt。

5) 对于消息加密和重播保护,首先使用重播列表和步骤(2)确定的索引,检查数据包是否被重播,如果判断数据包被重播过,则丢弃数据包,记录log事件。

接着,使用步骤(2)的ROC、加密上下文中的加密算法以及步骤(4)获取的session key,执行认证Tag的验证。如果结果为FAILURE,丢弃数据包,记录log时间。

6) 使用加密上下文中指定的解密算法、步骤(4)中获取的session key和session salt,以及步骤(2)获取的索引,解密数据包的EncryptedPortion字段。

7) 根据步骤(2)获取的SRTP索引值,更新ROC、数据包的最大序列号、加密上下文中的s_l值。如果提供了重播保护功能,还要更新重播列表。

8) 充数据包中删除MKI和认证Tag字段。

4 SRTCP协议
 

对于SRTCP密钥的产生来说,过程与SRTP相同,区别在于使用的<label>不同,针对SRTCP,<label>分别为:

<label> = 0x03 for the SRTCPencryption key

<label> = 0x04 for the SRTCPauthentication key

<label> = 0x05 for the SRTCP saltingkey.

 

 

 


http://chatgpt.dhexx.cn/article/E3WM9CUv.shtml

相关文章

VoIP之SRTP

互联网已经渗透到生活的方方面面,用户对于网络信息安全的要求非常高。在VoIP领域中&#xff0c;使用SRTP对音频、视频数据进行加密&#xff0c;保证数据安全。 SRTP的作用如下&#xff1a; 1. 保证RTP包中负载&#xff08;音视频数据&#xff09;的机密性 2. RTP包完整性确认&…

音视频协议-SRTP

1 SRTP环境搭建 1.1 SRTP简介 STRP它是 思科的开源安全 RTP 库。RTP 是实时传输协议&#xff0c;一种用于传输实时数据&#xff08;如电话、音频和视频&#xff09;的 IETF 标准&#xff0c;由RFC 3550定义。SRTP用于为 RTP 数据提供机密性以及对 RTP 标头和有效负载进行身份…

关系型数据库设计

目录 一、本章目标 二、为什么需要设计数据库 三、设计数据库的步骤 四、数据库设计E-R图 4.1为什么使用E-R图 4.2绘制E-R图 4.3实体间的映射关系 五、数据库设计模型转换 5.1关系型数据库设计分类 5.2各模型之间的元素对应关系 5.3基本转换原理 5.4将实体关系转化为表…

个人博客数据库设计

前言 最近要做数据库大作业&#xff0c;在思考了很久之后&#xff0c;还是设计一个简单的个人博客数据库&#xff0c;数据库采用的时MySQL5.7。 数据库下载&#xff08;提取码: s2f9&#xff09; 一、 概述及分析 1.1 项目背景 随着互联网的发展&#xff0c;越来越多的人拥…

[数据库设计]如何合理和有效的进行数据库设计

#前言 通常情况下&#xff0c;可以从两个方面来判断数据库设计的是否规范: 1)一是看看是否拥有大量的窄表 窄表往往对于OLTP比较合适&#xff0c;符合范式设计原则 2)宽表的数量是否足够的少。 所谓的宽表就是字段比较多的表&#xff0c;包含的维度层次比较多&#xff0c;造成冗…

数据库设计实战(一):数据库设计规范

一、数据库设计流程 1、需求分析 确定用户对数据库系统的使用要求和各种约束条件&#xff0c;形成用户需求规约 2、概念设计 对用户要求描述的现实世界&#xff0c;通过对其分类、聚集和概括&#xff0c;建立抽象的概念数据模型 3、逻辑设计 将现实世界的概念数据模型设计…

详解数据库设计的四个阶段

一、系统需求分析阶段 数据库设计的第一步&#xff0c;就是了解与分析用户需求&#xff0c;确定系统边界信息需求、处理需求、安全性和完整性需求&#xff0c;然后编写系统分析报告。 系统分析报告的内容主要包括&#xff1a; 随系统分析报告需提供的附件还有&#xff1a; …

MySQL数据库设计-案例

大家好&#xff0c;我是忘鱼。分享一下数据库设计&#xff08;案例&#xff09; 目录 一、案例 二、代码 三、总结 一、案例 如下进行数据库设计。这是黑马上的一道练习题。 二、代码 drop table if EXISTS music; drop table if EXISTS song; drop table if EXI…

数据库设计流程

数据库设计的步骤 数据库设计的流程总共有三步&#xff1a; 现实世界的实体模型通过建模转换为信息世界的概念模型&#xff08;即 E-R 模型&#xff09;概念模型经过模型转化&#xff0c;得到数据库使用的数据模型&#xff08;在关系数据库设计中为关系模型&#xff09;数据模…

浅谈数据库设计

第一章 需求分析 设计简介 根据业务需要&#xff0c;结合选用的DBMS&#xff0c;设计出最有的数据存储模型并建立好数据库中的表结构及表与表之间的关系使之有效的存储和高效的访问。 数据库设计 在系统设计开始就应该对数据库进行良好的设计&#xff0c;这样才能保证以后对…

数据库设计与实现

一个良好的设计对于数据库系统至关重要&#xff0c;它可以减少数据冗余&#xff0c;确保数据的一致性和完整性&#xff0c;同时使得数据库易于维护和扩展。 实体关系图 实体关系图&#xff08;Entity-Relationship Diagram&#xff0c;ERD&#xff09;是一种用于数据库设计的结…

数据库设计(二)——简单设计实例

Mysql设计步骤 一、设计一套系统数据库的步骤 1、实现什么样的功能&#xff08;保证项目功能的完整性&#xff0c;列出所有模块&#xff09;。 2、通过思维导图将每个功能模块串联起来&#xff08;放射状&#xff0c;细节可以用文字描述&#xff09;。 …

数据库设计的一般步骤

经过几天给韶关某个高校进行数据库设计的实训&#xff0c;对数据库设计的过程有了更加深刻的理解。 一、数据库设计的步骤 &#xff08;1&#xff09;了解功能需求 在设计数据库之前&#xff0c;设计人员必须要先了解系统的功能需求。这里可以通过阅读产品需求规格说明书&…

9.数据库设计

数据库设计 1、数据库设计概述 数据库设计。广义地讲&#xff0c;是数据库及其应用系统的设计&#xff0c;即设计整个数据库应用系统&#xff1b;狭义地讲&#xff0c;是设计数据库本身&#xff0c;即设计数据库的各级模式并建立数据库&#xff0c; 这是数据库应用系统设计的一…

数据库设计-概念结构设计

文章目录 数据库设计概念设计结构概念结构设计ER模型的基本元素实体/实体集属性区别实体和属性联系 二元联系的关系1:11:nm:n 一元联系1:11:nm:n 三元联系 采用ER模型的概念设计设计局部ER模型例题设计全局ER模型全局ER模型的优化 数据库设计 数据库设计&#xff1a;构造最优的…

数据库设计—图书管理数据库系统设计

如下代码供学习交流&#xff0c;获取完整代码&#xff0c;请关注公众号&#xff08;coding加油站&#xff09;获取 1、项目简介 图书馆数据库&#xff0c;该项目同时提供pythonweb可视化展示界面&#xff0c;也可提供相关报告数据&#xff0c;可以用来作为数据库系统设计的期…

数据库设计(一)——数据库设计

一、数据库设计简介 按照规范设计&#xff0c;将数据库的设计过程分为六个阶段&#xff1a; A、系统需求分析阶段 B、概念结构设计阶段 C、逻辑结构设计阶段 D、物理结构设计阶段 E、数据库实施阶段 F、数据库运行与维护阶段 需求分析和概念结构设计独立于任何数据库管理系统…

数据库设计的六个基本步骤

按照规范设计的方法&#xff0c;考虑数据库及其应用系统开发全过程&#xff0c;可将数据库设计分为以下6个阶段&#xff0c;分别为&#xff1a;1.需求分析&#xff0c;2.概念结构设计&#xff0c;3.逻辑结构设计&#xff0c;4.物理结构设计&#xff0c;5.数据库实施&#xff0c…

数据库设计(一)

目录 数据库设计的基本概念&#xff1a; 数据库设计包括以下几个部分&#xff1a; 需求设计&#xff1a; 1、数据&#xff1a; 2、处理&#xff1a; 概念结构设计&#xff1a; 实体&#xff1a; 例如&#xff1a; 联系类型&#xff1a; 1、一对一&#xff1a; 2、一对多&a…

数据库:数据库设计(需求,设计,运行,维护)

1&#xff0c;数据库设计概述 1.1&#xff0c;数据库设计的基本概念 数据库设计是指对于一个给定的应用环境&#xff0c;构造&#xff08;设计&#xff09;优化的数据库逻辑模式和物理结构&#xff0c;并据此建立数据库及其应用系统&#xff0c;使之能够有效地存储和管理数据&…