SRTP说明


安全实时传输协议(SRTP)是一种安全系统,它通过一组安全机制扩展了实时传输协议 (RTP)。

WebRTC使用DTLS-SRTP进行加密,身份验证和消息完整性,并防止重放攻击。 这通过RTP负载加密和身份验证提供了隐私。 SRTP是安全性的组件之一,对于正在寻找可靠和安全的API的开发人员而言,它非常方便。 但是什么是SRTP,它如何工作?

什么是SRTP?


SRTP增强了RTP安全性。 该协议由IETF(Internet工程任务组)在RFC 3711中于2004年3月发布。

SRTP通过加密RTP负载(不包括RTP标头)来提供隐私。 还支持身份验证,身份验证被广泛用作RTP中的安全机制。 尽管可以完全使用SRTP,但也可以禁用/启用某些功能。 SRTP中的主要插件是密钥管理,因为有很多选项:DTLS-SRTP,SIP中的MIKEY,SDP中的SDES(安全性说明),ZRTP等。

加密方式


SRTP使用AES(高级加密标准)作为默认密码。 AES有两种加密模式:分段整数计数器模式和f8模式。 通常使用计数器模式-当在不可靠的网络上传输流量并可能丢失数据包时,此模式至关重要。 f8模式用于3G移动网络,是输出反馈模式的一种变体,其中解密以与加密相同的方式发生。

SRTP还允许开发人员使用空密码关闭加密。 零密码不会进行加密;它会将传入的流直接复制到传出的流,而不进行任何更改。

WebRTC不建议使用零密码,因为数据安全性对于最终用户而言非常重要。 实际上,有效的WebRTC实现必须支持加密,目前使用DTLS-SRTP

廉正


为了在SRTP中保持消息完整性,将基于数据包标头的内容和部分创建身份验证标签,然后将其添加到RTP数据包中。 该标签用于验证有效载荷的内容,从而防止数据篡改。

身份验证也是抵制重新访问攻击的基础。 为了阻止它们,将顺序索引分配给每个数据包。 仅当新消息的索引为下一个且尚未接收到该消息时,才会接受该消息。 索引由于上述完整性而有效; 没有它,就有可能替换索引。

尽管WebRTC主要使用HMAC-SHA1算法来实现SRTP完整性,但强烈建议您选择非PFS上具有PFS(完美前向保密)和非AEAD上具有AEAD(具有关联数据的经过身份验证的加密)的算法集。 最近的WebRTC实施将DTLS v1.2与TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256算法套件一起使用。

按键


SRTP使用密钥生成功能(KDF)根据主密钥创建密钥。 密钥管理协议使用主密钥在会话中创建所有密钥。 由于每个会话都有自己的唯一密钥,因此所有会话都受到保护。 因此,如果一个会话遭到破坏,则其余会话仍将受到保护。 密钥管理协议用于主密钥-通常是ZRTP或MIKEY,但是还有其他变体。


RTP IP堆栈

WebRTC中的流受以下两种协议之一保护:SRTP或DTLS(数据报传输层安全性)。 DTLS-用于数据流加密,SRTP-用于媒体流。 但是,对于SRTP中的密钥交换,DTLS-SRTP用于检测代理攻击。 这在IETF文档中有详细介绍: WebRTC安全性安全性arch

SRTCP(安全实时传输控制协议)


SRTP有一个姊妹协议-SRTCP(安全实时传输控制协议)。 SRTCP扩展了RTCP(实时传输控制协议),具有与SRTP扩展RTP相同的功能,包括加密和身份验证。 像SRTP一样,几乎所有的SRTCP安全功能都可以禁用,除了消息身份验证-SRTCP必需。

SRTP的陷阱


SRTP加密RTP数据包的有效负载,但不加密头扩展。 这会造成漏洞,因为RTP数据包中的标头扩展可能包含重要信息,例如媒体流中每个数据包的声音级别。 攻击者可能会很熟悉两个人正在网络上进行通信-会话的隐私可能会受到损害。 在IETF Request for Comment:6904中对此进行了讨论,该请求需要SRTP的所有后续实现来加密标头扩展。

在某些情况下(例如,有很多参与者的会议),可能需要SFM(选择性转发混合器)形式的中介,以便在流转发期间优化RTP参数。 这样的中介违反了点对点系统中使用的端到端加密原理。 换句话说,终端设备必须“信任”另一个参与者。 为了解决此限制,隐私增强RTP会议(PERC,IETF工作组之一)正在研究诸如SRTP双重加密程序之类的解决方案。 PERC在两个独立但相关的上下文中提供逐跳加密和端到端加密支持的保证。 我们将在下一篇文章中告诉您!

Source: https://habr.com/ru/post/zh-CN413165/


All Articles