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

本文介绍了WebRTC中如何利用SRTP和SRTCP协议确保RTP和RTCP数据的安全传输,包括加密和完整性校验。通过DTLS协商获取MasterKey和MasterSalt,使用libsrtp库进行加密处理。SRTP结构中,只对负载数据加密,SRTCP则额外保障包的完整性和防重放攻击。文中还探讨了Key管理、序列号管理和防重放攻击机制,并提到了libsrtp的使用及AES-ICM和AES-GCM加密算法的应用。
摘要由CSDN通过智能技术生成

通过 DTLS 协商 后,RTC 通信的双方完成 MasterKey 和 MasterSalt 的协商。接下来,我们继续分析在 WebRTC 中,如何使用交换的密钥,来对 RTP 和 RTCP 进行加密,实现数据的安全传输。同时,本文会对 libsrtp 使用中,遇到的问题的进行解答,例如,什么是 ROC,ROC 为什么是 32-bits?为什么会返回 error_code=9, error_code=10?交换的密钥有生命周期吗,如果有是多长时间呢?阅读本篇之前建议阅读 DTLS 协商篇,两者结合,效果更佳哦!

作者|进学

审校|泰一

01
要解决的问题

RTP/RTCP 协议并没有对它的负载数据进行任何保护。因此,如果攻击者通过抓包工具,如 Wireshark,将音视频数据抓取到后,通过该工具就可以直接将音视频流播放出来,这是非常恐怖的事情。

在 WebRTC 中,为了防止这类事情发生,没有直接使用 RTP/RTCP 协议,而是使用了 SRTP/SRTCP 协议 ,即安全的 RTP/RTCP 协议。WebRTC 使用了非常有名的 libsrtp 库将原来的 RTP/RTCP 协议数据转换成 SRTP/SRTCP 协议数据。

SRTP 要解决的问题:

• 对 RTP/RTCP 的负载 (payload) 进行加密,保证数据安全;

• 保证 RTP/RTCP 包的完整性,同时防重放攻击。

02
SRTP/SRTCP结构

SRTP 结构

从 SRTP 结构图中可以看到:

  1. 加密部分 Encrypted Portion ,由 payload , RTP padding 和 RTP pad count 部分组成。也就是我们通常所说的仅对 RTP 负载数据加密。

  2. 需要校验部分 Authenticated Portion ,由 RTP Header , RTP Header extension 和 Encrypted Portion 部分组成。

通常情况下只需要对 RTP 负载数据进行加密,如果需要对 RTP header extension 进行加密, RFC6904 给 出 了详细方案,在 libsrtp 中也完成了实现。

SRTCP 结构

从 SRTCP 结构图中可以看到:

  1. 加密部分 Encrypted Portion ,为 RTCP Header 之后的部分,对 Compound RTCP 也是同样。

  2. E-flag 显式给出了 RTCP 包是否加密。(PS:一个 RTP 包怎么判断是加密的?)

  3. SRTCP index 显示给出了 RTCP 包的序列号,用来防重放攻击。(PS:一个 RTP 包的 16-bits 的序列号可以防重放攻击吗?)

  4. 待校验部分 Authenticated Portion ,由 RTCP Header 和 Encrypted Portion 部分组成。

在初步认识了 SRTP 和 SRTCP 的结构后,接下来介绍 Encrypted Portion 和 Authenticated Portion 如何得到了。

03
Key管理

在 SRTP/SRTCP 协议中,使用二元组 <SRTP目的IP地址,SRTP/SRTCP目的端口> 的方式来标识一个通信参与者的 SRTP/SRTCP 会话,称为 SRTP/SRTCP Session 。

在 SRTP 协议中使用三元组 <SSRC, RTP/RTCP目的地址,RTP/RTCP目的端口> 来标识一个 stream,一个 SRTP/SRTCP Session 由多个 stream 组成。对每个 stream 的加解密相关参数的描述,称为 Cryptographic Context 。

每个 stream 的 Cryptographic Context 中 中的包含如下参数:

• SSRC: Stream 使用的 SSRC。

• Cipher Parameter:加解密使用的 key, salt,算法描述 (类型,参数等)。

• Authentication Parameter: 完整性使用的 Key, salt,算法描述 (类型,参数等)。

• Anti-Replay Data: 防止重放攻击缓存的数据信息,例如,ROC,最大序号等。

在 SRTP/SRTCP Session 中,每个 Stream 都会使用到属于自己的,加解密 Key,Authentication Key。这些 Key 都是在同一个 Session 中使用到的,称为 Session Key 。这些 Session Key 是通过对 Master Key 使用 KDF(Key Derivation Function) 导出的。

KDF 是用于导出 Session Key 函数,KDF 默认使用是加解密函数。例如,在完成 DTLS 后,协商得到的 SRTP 加密算法的 Profile 为:

SRTP_AES128_CM_HMAC_SHA1_80

cipher: AES_128_CM

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值