SRTP学习

SRTP学习
我认为学习协议要从三个⽅⾯来研究:
1、协议的⽬的、功能;
2、协议的数据包格式;
3、协议的⼯作流程。
下⾯从这三个⽅⾯来总结之前对SRTP协议的学习。
1、协议的⽬的和功能
SRTP协议的名称是安全实时传输协议,主要是针对实时的语⾳流、视频流在⽹络上传输的安全性开发,SRTP提供AES对称加密和HMAC算法认证。所以,SRTP协议的关键在于安全和实时。SRTP在RFC3771中有详细定义,在看SRTP之前,推荐先看RTP协议,定义在RFC3550中。
SRTP可以运⾏于TCP/UDP之上,但通常都是应⽤于UDP,因为语⾳、视频传输通常采⽤UDP。
2、协议的数据报⽂结构
数据报⽂包括包头、数据主体以及认证信息三个部分。
(1)32bits:
V 2bits    版本号,现在已经是版本2
P 1bit 填充位,当负载的长度不够32bits的整数倍时,需要填充位
X 1bit 扩展位,若为1,则固定的包头后增加⼀个32bits的扩展(rtp extension)
CC 4bits CSRC的数⽬
M 1bit 允许在⽐特流中标记重要的事件
PT 7bits 负载类型
序列号16bits  每发送⼀个RTP数据包,序列号加1,根据此来判断序列号的顺序
(2)时间戳 32bits
(3)SSRC标识符 32bits synchronizating source identifier 识别同步源
(4)CSRC标识符 n个32bits contributing source identifiers 识别负载重的有效贡献源
(5)可选存在的RTP extension
(6)加密的payload(末尾可能包含RTP padding和RTP pad count)
(7)包尾是SRTP MKI(可选),master key identifier,是⽤来⽣成session加密密钥的随机位串标识符。
(8)认证标签(Authentication tag)
与RTP包的主要区别是负载加密、SRTP MKI(主密钥标识符,由密钥管理协议决定)、认证标签。
3、协议的⼯作流程
(1)协议中涉及哪些密钥和重要参数
主密钥 master key
主密钥是⼀个长度不定的随机位串,⽤来⽣成会话密钥
会话密钥 session key
会话密钥就是⽤于消息加密和认证的密钥
master salt 不知道怎么翻译
salt是指⼀种在⽣成会话密码时的输⼊参数,salt增加了字典式攻击的难度,每增加1bit的salt,就会使字典攻击的难度和时间翻倍。key_derivation_rate
⽣成会话密钥的速率,必须是{1,2,4,……2^24}中的⼀个,必须为2的幂数
<from,to>
这是两个48bits的时间值,表⽰master key的有效时间。
ROC(rollover counter)
记录序列号的重置次数,⽤来计算SRTP包的索引
Index = 2^16 * ROC + SEQ
(2)会话密钥的产⽣
在协议中,密钥⽣成过程的描述是通过数学函数来说明的,如下:
key_session = PRF (key_master, x);
r = index/key_derivation_rate;;//label长度8位
key_id = <label> || r;
x = key_id XOR master salt;
PRF是⼀个AES-cm的对称加密函数。
⽤框图表⽰,如下:
其中,IV=[ <label>||(index/key_derivation_rate)XOR master_salt ]*2^16
index=2^16*ROC+SEQ
对于⽣成的不同密钥,8位的label有不同的值:
session_en_key:消息加密密钥,<label>=0x00
session_au_key:消息认证密钥,<label>=0x01
session_salt_key:会话salt,<label>=0x02
(3)具体⼯作流程
得到会话密钥后,就可以对消息载荷进⾏安全操作了。
发送⽅⼯作流程:
1)确定加密上下⽂
2)根据ROC、加密上下⽂中的最⾼序列号以及RTP包中的序列号,确定SRTP包索引
index=2^16*ROC+SEQ
3)根据index确定master_key和master_salt(需要密钥管理协议)
4)根据密钥管理协议中的各个参数,通过密钥⽣成器,得到会话密钥
5)利⽤会话密钥和传输参数设定,对载荷进⾏加密,作为数据包中的加密载荷
6)如果MKI字段为1,则加⼊MKI字段
7)计算认证标签,并加在包尾
8)更新ROC和数据包索引
接收端流程
1)确定加密上下⽂
2)计算包索引
index=2^16*v+SEQ
v={ROC-1,ROC,ROC+1}/2^32
3)如果MKI字段为1,则根据MKI确定主密钥和主密钥salt,否则⽤index确定主密钥和salt 4)得到会话密钥
5)重播检查,利⽤index和重播列表来检查重播,如果为重播数据包,则丢弃,并记录log。执⾏认证过程,如果不匹配,则丢弃,并记录log。
6)利⽤会话密钥解密数据载荷
7)根据index,更新ROC、最⼤序列号、加密上下⽂中的s_l值,需要时更新重播列表。
8)从数据包中删除MKI和认证标签。

本文发布于:2024-09-20 15:36:42,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/1/89348.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:密钥   协议   加密   认证   负载   重播   数据
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议