我一直致力于创建一个 RTP/RTCP 客户端和服务器实现作为一个项目。在解析传入数据包时遇到了障碍,因为我无法理解加密方法。我已多次阅读RFC 3550。第 9 节解释了机密性和安全性。我在这里读过DES-CBC 模式。
我对加密的观察
- RTP/RTCP 数据包作为一个单元进行加密,这意味着所有字节都被加密
- 加密的 RTCP 数据包以 32 位随机数为前缀
- 加密的 RTP 数据包由时间戳和序列号随机化
- DES-CBC 是默认模式
- DES-CBC 模式需要 64 位密钥
- DES-CBC 模式需要 64 位初始化向量 (IV)
- DES-CBC 的块大小为 64 位
我感到困惑的是:
DES-CBC 声明它使用“Internet 电子邮件隐私增强”(PEM) 协议,但 RTP RFC 没有提及这一点。此外,加密图不包括任何 PEM 标头或元素。
图表
UDP packet UDP packet
----------------------------- ------------------------------
[random][RR][SDES #CNAME ...] [SR #senderinfo #site1 #site2]
----------------------------- ------------------------------
encrypted not encrypted
所以我的问题是:
- 密钥来自哪里或哪些标题元素构成了密钥?
- RTP/RTCP 的初始化向量是什么?
- 如何解析加密数据包与未加密数据包?
- RTP/RTCP 是否使用 PEM 协议?如果是这样,怎么做?