0

我一直致力于创建一个 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 协议?如果是这样,怎么做?
4

1 回答 1

3

DES-CBC 是一种加密数据的方法,它可用于需要对其数据进行加密的所有不同协议。

密钥来自哪里或哪些标题元素构成了密钥?

加密密钥是在连接初始化期间(连接时)生成的,可以使用不同的方式生成,但通常使用公钥加密(例如:RSADH)并使用证书来防止使用 PEM 标准的 MITM 攻击。

RTP/RTCP 的初始化向量是什么?

IV(初始化向量)是随机生成的数字,用于确保在使用相同密钥的情况下相同的明文不会被加密为相同的密文(这就是为什么它是随机的)。

如何解析加密数据包与未加密数据包?

对于加密的数据包,您首先使用在连接时获得的密钥(SECRET)解密,然后使用与数据包(非机密)一起发送的 IV 进行反向加密过程。对于未加密的数据包,您只需解析数据,因为没有 KEY 并且 IV 数据只是纯文本。

RTP/RTCP 是否使用 PEM 协议?如果是这样,怎么做?

PEM 不是 SSH 等网络协议意义上的协议。我认为这个定义来自维基百科足够准确

隐私增强邮件 (PEM) 是一种事实上的文件格式,用于存储和发送加密密钥、证书和其他数据,基于 1993 年 IETF 定义的“隐私增强邮件”标准。

因此,如果您的客户正在使用加密,那么它很有可能会使用 PEM 标准进行对称密钥初始化。

注意:时间戳和序列号与 IV 不同,这些字段是 RTP 头字段,可以起到类似的作用,但它们与 CBC 模式 IV 不同。

于 2021-08-07T12:33:38.227 回答