什么是SRTP
SRTP wiki参考RFC 3711 - The Secure Real-time Transport Protocol
参考RFC 7201 - Options for Securing RTP Sessions
RTP是实时传输协议,用于媒体通信;SRTP就是加密的实时传输协议。
工作原理很简单,即在RTP开始前,双方先协商约定好加密的cipher suite和key,然后把媒体加密后传输。
加密方式
默认的加密方式使用的是AES, 定义了两种mode
- (1) AES in Counter Mode
-
(2) AES in f8-mode
RFC 3711
这两种mode是什么区别请参考RFC 3711
支持的Cipher Suite
每一种SRTP设备可能支持的Cipher Suite可能各不相同,需要查看响应的文档。
比如我们常见的Freeswitch支持的SRTP Cipher Suite如下,
AEAD_AES_256_GCM_8
AEAD_AES_128_GCM_8
AES_CM_256_HMAC_SHA1_80
AES_CM_192_HMAC_SHA1_80
AES_CM_128_HMAC_SHA1_80
AES_CM_256_HMAC_SHA1_32
AES_CM_192_HMAC_SHA1_32
AES_CM_128_HMAC_SHA1_32
AES_CM_128_NULL_AUTH
具体可以参考这里
KEY的管理
在开始加密传输前,双方应该以什么样的方式来协商加密方式呢?
RFC 7201给了几种可供参考的选择
- Session Description Protocol (SDP) security descriptions
- Datagram Transport Layer Security Extension for SRTP (DTLS-SRTP)
- The Multimedia Internet Keying (MIKEY) protocol
SRTP with SDP
比较常用的方式是SRTP with SDP,
SDP的offer/answer协商模式这里不在讨论,不清楚的可以参考RFC文档。下面举一个最简单的例子
OFFER/ANSWER-
client 发起INVITE携带SDP, SDP中包含client支持的cipher suites和对应的key
offer - server answer的时候带的SDP,这里就是协商过的加密信息 answer
注意事项
VOIP部署的情况下,一般采用的是SRTP WITH SDP.但是这里的key都是明文传输,所以光有SRTP还是等于裸奔,一般SRTP会配套TLS使用。
网友评论