3.3 SRTP/SRTCP

对于未加密的实时通信应用,可能会遇到多种形式的安全风险。在浏览器和浏览器之间,或者浏览器和服务器通信之间传输未加密的数据时,都有可能被第三方拦截并窃取。

基础的RTP没有内置任何安全机制,因此不能保证传输数据的安全性,只能依靠外部机制进行加密。实际上,WebRTC规范明确禁止使用未加密的RTP。出于增强安全性的考虑,WebRTC使用的是SRTP。

SRTP是RTP的一个配置文件,旨在为单播和多播应用程序中的RTP数据提供加密、消息身份验证和完整性以及重放攻击保护等安全功能。SRTP有一个姊妹协议:安全RTCP(SRTCP),它提供了与RTCP相同的功能,并增强了安全性。

使用SRTP或SRTCP时必须启用消息身份验证功能,其他功能(如加密和身份验证)则都是可选的。

SRTP和SRTCP默认的加密算法是AES,攻击者虽然无法解密数据,但可以伪造或重放以前发送的数据。因此,SRTP标准还提供了确保数据完整性和安全性的方法。

为了验证消息并保护其完整性,SRTP使用HMAC-SHA1算法计算数据内容的摘要,并将摘要数据附加到每个数据包的身份验证标签。接收者收到数据后也同样计算摘要数据,如果摘要数据相同,表示内容完整;如果摘要数据不同,表示内容不完整或者被篡改了。

注意

SRTP仅加密RTP数据包的有效载荷,不对标头进行加密。但是,标头可能包含需要保密的各种信息。RTP标头中包含的此类信息之一就是媒体数据的音频级别。实际上,任何看到SRTP数据包的人都可以判断出用户是否在讲话。尽管媒体数据是加密的,但这仍有可能泄露重要的隐私。