在传统电话业务中 SIP 信令 以及语音数据,在传输层大都使用UDP,随着电话业务的运营由运营商(移动,电信,联通)扩展到公司,到如今的云电话服务。 被服务的公司或个人越来越注重数据的安全,可选择的运营公司比较多,导致各个运营商开始实施安全的SIP 信令和语音。
SIP/TLS or sips
Voice / SRTP
RFC 4568 就描述了怎么在SDP中协商 媒体加密参数。因为SDP 是随着SIP 信令传输的,那么就要求SIP 信令必须是安全的
SIP over TLS 是比较常用的case。
RFC 4568 为SDP 新增加了一个attribute:
a=crypto:<tag> <crypto-suite> <key-params> [<session-params>]
example:
a=crypto:1 AES_CM_128_HMAC_SHA1_80
inline:PS1uQCVeeCFCanVmcjkpPywjNWhcYD0mXXtxaVBR|2^20|1:32
RFC 4568 只定义了inline 类型的key 方式,在这种方式下 后面的key字符串是一个字节串(不一定是字符串,可能有些字节不是可现实字符)。这个字节串包含了master key 和 salt。
"inline:" <key||salt> ["|" lifetime] ["|" MKI ":" length]
A 端 发送数据使用 A端的key, B端使用A的key 解密
上面的例子中首先将PS1uQCVeeCFCanVmcjkpPywjNWhcYD0mXXtxaVBR base64 解密
得到原始的master key 和salt。 根据AES_CM_128_HMAC_SHA1_80的定义,16个字节为master key ,剩余14个字节为salt值。
有了这两个值,通信双方也就知道了加解密的密码了(AES 对称加密)
对明文使用AES 加密后生成密文,为保持数据的完整性,要对密文和RTP 头 做签名操作,算法为SHA1, 生成Authentication tag(80 bit)
到此SRTP 包中所有的元素已经可以通过SDP的协商参数生成了,接下来看看SRTP 包的结构。
SRTP的定义在RFC 3711
| 认证区 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 0 | 1 | 2 | 3 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | |||||||||||||||||||||||||||||||||
| V | P | X | CC(4bit) | M | PT(7bit) | Sequence Number(16bit) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 时间戳(32bit) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| SSRC标识符(32bit) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| CSRC标识符(n个32bit) … | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| RTP extension(可选) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 加密的payload(末尾可能包含RTP padding和RTP pad count) | 加密区 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| SRTP MKI(可选),master key identifier,是用来生成session加密密钥的随机位串标识符 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 认证标签(Authentication tag) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 说明: | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| V:版本号,目前是2 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| P:填充位,当负载的长度不够32bit的整数倍时,需要填充 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| X:扩展位,若为1,则固定的包头后增加一个32bits的扩展 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| CC:CSRC的数目 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| M:标志,允许在比特流中标记重要的事件 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| PT:负载的格式 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 序列号:每发送一个RTP数据包,序列号加1 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 时间戳: | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| SSRC标识符:synchronizating source identifier 识别同步源 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| CSRC标识符:contributing source identifiers 识别负载重的有效贡献源 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
与RTP包的主要区别是负载加密、SRTP MKI(主密钥标识符,由密钥管理协议决定)、认证标签
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
本文介绍了在电话业务转向云服务的过程中,如何通过SIP over TLS和SRTP确保数据安全。重点解析了RFC4568在SDP中协商媒体加密参数的作用,以及`a=crypto`属性的使用,详细阐述了如何从inline类型的key中提取master key和salt进行AES加密和完整性验证,确保SRTP包的安全传输。
1964

被折叠的 条评论
为什么被折叠?



