葡萄牙VS尼日利亚直播_葡萄牙VS尼日利亚直播高清免费观看_葡萄牙VS尼日利亚直播在线观看免费无插件

  • 发布于:2026-06-10 23:10:58
  • 来源:24直播网

葡萄牙VS尼日利亚直播_葡萄牙VS尼日利亚直播高清免费观看_葡萄牙VS尼日利亚直播在线观看免费无插件

【0】简介

安全实时传输协议 (Secure Real-time Transport Protocol,SRTP) 是在实时传输协议 (Real-time Transport Protocol,RTP) 基础上定义的一个协议,旨在为单播和多播应用程序中的实时传输协议的数据提供加密、消息认证、完整性保证和重放保护,由 David Oran (思科) 和 Rolf Blom (爱立信) 开发,并最早由 IETF 于 2004 年 3 月作为 RFC3711 发布;

安全实时传输协议有一个伴生协议,即安全实时传输控制协议 (Secure RTCP,SRTCP),安全实时传输控制协议为实时传输控制协议 (RTCP) 提供类似的与安全有关的特性;

【1】协议格式

【1.1】SRTP 协议格式

SRTP 部首各字段说明

字段长度说明补充V2 bit版本号取值 2P1 bit填充位当负载的长度不够 32bit 的整数倍时则需要填充X1 bit扩展位若为 1 则固定的包头后增加一个 32 bits 的扩展CC4 bitCSRC 的数目CSRC,提供源标识符M1 bit标志位含义取决于携带净荷的类型,对于视频,

标记一帧的结束;对于音频,标记会话的开始PT7 bit载荷的格式 序列号16 bit会话开始时,发送端生成随机数作为初始值,

传送 RTP 分组时,每传送一组该字段增 1在会话存在期间,顺序发送的一串 RTP 分组的序号是递增的,

接收端可以根据序号检测是否存在分组丢失或错序时间戳32 bit净荷中第一个采样数据的采样时间,每一个采样数据的采样时间通过一个单调且线性递增的时钟获得时钟频率取决于净荷数据的编码格式,相邻两个 RTP 分组的时间戳差值,取决于前一个 RTP 分组净荷中包含的采样数据数目SSRC32 bit同步源标识符标明同步源,同步源是一个负责发送 RTP 分组并

在 RTP 分组中设置序号和时间戳的实体CSRC32 bit负载中的有效贡献源 RTP extension

(可选)32 bitRTP 扩展项(可选) payload 加密的载荷末尾可能包含 RTP padding 和 RTP pad countSRTP MKI

(可选) master key 生成器用来生成 session 加密密钥的随机位串标识符Authentication tag 认证标签 

1. 加密部分 Encrypted Portion,由 payload,RTP padding 和 RTP pad count 部分组成,即仅对 RTP 负载数据加密;2. 需要校验部分 Authenticated Portion,由 RTP Header,RTP Header extension 和 Encrypted Portion 部分组成;

【1.2】SRTCP 协议格式

各个字段的含义参考 【网络通信 -- 直播】网络通信协议简介 -- RTP/RTCP

1. 加密部分 Encrypted Portion 为 RTCP Header 之后的部分2. E-flag 显式给出了 RTCP 包是否加密3. SRTCP index 显示给出了 RTCP 包的序列号,用来防重放攻击4. 待校验部分 Authenticated Portion 由 RTCP Header 和 Encrypted Portion 部分组成

【2】加密环境简介

通信参与者的 SRTP/SRTCP 会话 (SRTP/SRTCP Session),在 SRTP/SRTCP 协议中,使用二元组 的方式来标识;流 (stream),一个 SRTP/SRTCP Session 由多个 stream 组成,在 SRTP 协议中使用三元组 来标识一个 stream;加密环境 (Cryptographic Context),每个 stream 的加解密相关参数的描述,加密环境 ID 由 SSRC,目的网络地址和目的传输端口号唯一确定,即 Cryptographic_Context_ID =

加密环境保存两类参数,分别为变换相关参数和变换无关参数;

变换相关参数指与所使用具体加密变换方法和认证变换方法有关的参数,如密码组大小,会话密钥,初始化向量信息数据等;变换无关参数包括

1. 一个 32 位的循环计数器 (ROC),用来记录 16 bit 的 RTP 序列号有多少次超过 65535 后被置位 0,根据 ROC 来产生 SRTP 数据包索引 index,其中 index = 2^16 * ROC + SEQ,SEQ 为 RTP 数据包序列号,从数据包中获取;2. 一个 16 bit 序列号保存接收方接收到的最高 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 是两个 48bit 的 SRTP 包索引号5) 一个计数器,记录用该主密钥处理的 SRTP 包数量9. 两个非负整数 n_e 和 n_a 来表示加密会话密钥和认证会话密钥的长度

【3】SRTP 密钥

会话密钥 (Session Key),在同一个 SRTP/SRTCP Session 中,每个 Stream 使用到的属于自己的,加解密 Key,Authentication Key 的集合;

Session Key 通过对 Master Key 使用 KDF (Key Derivation Function) 导出;

KDF,用于导出 Session Key 函数;

例如,在完成 DTLS 后,协商得到的 SRTP 加密算法的 Profile 如下

则对应的 KDF 为 AES128_CM;

Session Key 产生过程

Session Key 导出依赖的参数

key_label,根据导出的 Key 的类型不同,key_label 取值如下

master_key,DTLS 完成后,协商得到的 Key;master_salt,DTLS 完成后,协商得到的 Salt;packet_index,RTP/RTCP 的包序号;

SRTP 使用 48-bits 的隐式包序号,SRTCP 使用 31-bits 包序号;key_derivation_rate,key 导出速率,记为 kdr,默认取值为 0,执行 1 次 Key 导出;

取值范围 {{1,2,4,...,2^24}在 key_derivation_rate > 0 的情况下,在加密之前,执行一次 key 导出,后续在 packet_index/key_derivation_rate > 0 时,执行 key 导出;

【4】序号管理

SRTP 序列号管理,在 RTP 包结构定义中使用 16 bit 来描述序列号;考虑到防重放攻击,消息完整性校验,加密数据,导出 SessionKey 的需要,在 SRTP 协议中,使用隐式方式 (标识 i) 来记录包序列号 packet_index;

SRTCP 序列号管理,SRTCP 的序号在 SRTCP 包,使用 31-bits 中显示描述

【5】防重放攻击

重放攻击,攻击者将截获的 SRTP/SRTCP 包保存下来,然后重新发送到网络中,实现了包的重放;

SRTP 接收者通过维护一个重放列表 (ReplayList) 来防止这种攻击;

理论上 Replay List 应该保存所有接收到并完成校验的包的序列号 index;实际情况下 ReplayList 使用滑动窗口 (sliding window) 来实现防重放攻击,使用 SRTP-WINDOW-SIZE 来描述滑动窗口的大小;

SRTP 防重放攻击

接收者根据接收到的 SRTP 包的 SEQ,ROC,s_l 估算出 SRTP 包的 packet_index,将接收者已经接收到 SRTP 包的最大序列号,记为 local_packet_index,计算差值 delta;

分如下 3 种情况说明:

1. delta > 0 : 表示收到了新的包2. delta < -(SRTP-WINDOW-SIZE - 1) < 0 : 表示收到的包的序列号,小于重放窗口要求的最小序号,libSRTP 收到这样的包时,会返回 srtp_err_status_replay_old = 10,表示收到旧的重放包;3. delta < 0,delta >= -(SRTP-WINDOW-SIZE - 1) : 表示收到了重放窗口之内的包;如果在 ReplayList 找到对应的包,则是一个 index 重复的重放包,libSRTP 收到这样的包时,会返回 srtp_err_status_replay_fail = 9;否则表示收到一个乱序包;

SRTCP 防重放攻击 悉尼FC数据分析

在 SRTCP 中,packet index 显式给出,在 libsrtp 中,SRTCP 的防重放攻击的窗口大小为 128,使用 window_start 记录防重放攻击的起始序列号;

SRTCP 防重放攻击的检查步骤

1. index > window_start + 128,收到新的 SRTCP 包2. index < window_start,收到包的序列号在重放窗口的左侧,可以认为收到了比较老的包,libsrtp 收到这样的包之后,会返回 srtp_err_status_replay_old = 10;3. replay_list_index = index - window_start,在 ReplayList 中 replay_list_index 对应的标识位为 1,表示已经收到包,libsrtp 返回 srtp_err_status_replay_fail = 9;对应的标识位为 0,表示收到乱序包;

【6】加密和校验算法

在 SRTP 中,使用 CTR (Counter mode) 模式的 AES 加密算法,CTR 模式通过递增一个加密计数器以产生连续的密钥流,计数器可以是任意保证长时间不产生重复输出的密钥,根据计数方式的不同,分为以下两种类型;

AES-ICM : ICM 模式 (Integer Counter Mode,整数计数模式),使用整数计数运算;AES-GCM : GCM 模式 (Galois Counter Mode,基于伽罗瓦域计数模式),计数运算定义在伽罗瓦域;

在 SRTP/SRTCP 中,使用 AES-ICM 完成加密算法,同时使用 HMAC-SHA1 完成 MAC 计算,对数据进行完整性校验,加密和 MAC 计算需要分两步完成;

SRTP 和 SRTCP 计算 Authentication tag,使用的 K 对应 Key 管理部分描述的 RTP auth key 和 RTCP auth key,使用的 Hash 算法为 SHA-1,Authentication tag 的长度为 80-bits;SRTP 中的 M 为,M = Authenticated Portion + ROCSRTCP 中的 M 为,M = Authenticated Portion

AES-ICM (加密)

图示为 AES-ICM 的加密和解密过程,图中的 K 是通过 KDF 导出的 SessionKey;

 

加密,通过对 Counter 进行加密并与明文 P 异或运算得到加密数据 C;解密,通过对 Counter 进行加密并与密文 C 异或运算得到明文数据 P;Counter 生成依赖于 Session Salt,包的索引 (packet index) 和包的 SSRC,Counter 是 128 bits 的计数,生成方式如下

HMAC-SHA1 (完整性校验)

散列消息认证码 (Hash-based message authentication code,缩写为 HMAC),是一种通过特别计算方式之后产生的消息认证码 (MAC),使用密码散列函数,同时结合一个加密密钥,可以用来保证数据的完整性,同时可以用作某个消息的身份验证;

HMAC 通过一个标准算法,在计算哈希的过程中,把 key 混入计算过程中,HMAC 的加密实现如下;

文献资料

【1】The Secure Real-Time Transport Protocol(SRTP)

参考致谢

本博客为博主的学习实践总结,并参考了众多博主的博文,在此表示感谢,博主若有不足之处,请批评指正。

【1】WebRTC 传输安全机制第二话:深入显出 SRTP 协议

【2】RTP/RTCP 和 SRTP/SRTCP协议

【3】WebRTC 学习一常见网络协议

【4】流媒体协议介绍(RTP/RTCP/RTSP/RTMP/MMS/HLS)

相关阅读: