关于SDP中协商SRTP加密信息

RFC4568中关于媒体流加密说明时,在SDP中新增了"crypto"字段用于描述加密信息,格式如下:     

                    a=crypto: []

其中:

                    l  tag为十进制数字,用于标记后面所述的加密属性,该数字内容不能为0,在offer/answer的协商模式下,tag用以区分各组备选信息。

                    l  crypto-suite用于描述加密和认证算法,在offer/answer模式下,本字段参数可协商。

                    l  key-params反馈crypto-suite字段对应的密钥信息

举例:

crypto:1 AES_CM_128_HMAC_SHA1_80 inline:NHomSmlnXy4qRCwhVi9ANVcwZ3Q3cXVaLykzJ1Rf|2^31|1:1

这里 tag =1 

        crypto-suite = AES_CM_128_HMAC_SHA1_80 ,支持AES128加密和SHA1_80的Hash

        key-params = inline:NHomSmlnXy4qRCwhVi9ANVcwZ3Q3cXVaLykzJ1Rf|2^31|1:1

下面重点介绍下key-params

key-params = ":"

key-method参数现在只提供一种方式,即“inline”,指示实际密钥信息在key-info字段提供;key-info定义一串字符串,包含主密钥、主salt密钥,可选包含主密钥存活时长、主密钥索引及长度;在offer/answer协商模式,密钥参数对外公开。

主密钥:128位随机生成(范围【0-9,a-z】),进行Base64位编码

主salt密钥:112位随机生成(范围【0-9,a-z】),进行Base64位编码

主密钥和主salt密钥用于后面rtp进行AES加密的key+salt key,这里通信双方告诉对端自己接受码流的主密钥和主salt密钥

主密钥存活时长:一般没有意义,因为默认值很长

MKI:形式为mki_length:mki_value,mki_length是指后面mki_value的实际长度,mki_value用于插入srtp报文中,防破解。

如果没有协商出MKI,则SRTP报文格式如下:

加密报文 Hash值

如果协商出MKI,则SRTP报文格式如下

加密报文 MKI_VALUE Hash值

其中MKI_VALUE占的字节数就是MKI_LENGTH

最后加密协商是不对称的,所以本端发出的crypto属性中的加密信息指示的本端发送的码流的加密信息





你可能感兴趣的:(SIP协议)