当webrtc通过tls握手完成,会把key和加密算法给srtp,由srtp进行数据的加密和解密。
srtp使用的是对称的加解密算法。而dtls握手协议使用的是非对称的加解密算法。
对称加密算法需要同一个密钥。此时通过tls握手,a给b自己的密钥,b给a自己的密钥,a用自己的密钥加密,b用a给的密钥解密。也就是key。
dtls还交互密码套件,我给你我支持的加密算法,你给我你支持的加密算法。大家选两个都支持的,且优先级最高的,webrtc默认使用的是aes128
dtls要解决的两个问题:
1.交换密钥
2.协商加密算法
SRTP要解决的问题:
1.对数据加密,保证数据安全。
2.保证数据完整性。
和rtp头基本一致,对payload进行加密了。srtp头不加密,只有数据被加密,头里就payload加密了。
srtp mki,一般webrtc不用,为0。authentication是用来做完整性验证的。对rtp的头和数据用哈希函数做一次运算,生成摘要。
对端也做计算,比较摘要是否相等,相等则数据是完整的。
思科推出了libsrtp,非常好用。一般情况下进行加密解密,特别频繁的话,对性能