【问题标题】:RTP/RTCP Question Regarding Encryption in DES-CBC Mode关于 DES-CBC 模式下加密的 RTP/RTCP 问题
【发布时间】:2021-10-11 14:24:44
【问题描述】:

我一直致力于创建一个 RTP/RTCP 客户端和服务器实现作为一个项目。我在解析传入数据包时遇到了障碍,因为我无法理解加密方法。我已经读过RFC 3550 好几遍了。 Section 9 解释机密性和安全性。我读过DES-CBC mode here

我对加密的观察

  • 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 协议?如果有,怎么做?

【问题讨论】:

  • 您说“DES-CBC 声明它使用“Internet 电子邮件隐私增强 (PEM) 协议”。我认为您已经颠倒了逻辑:PEM 协议使用 DES-CBC,而不是相反。

标签: encryption cryptography rtp rfc rtcp


【解决方案1】:

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

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

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

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

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

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

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

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 2012-03-14
    • 2011-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-31
    • 1970-01-01
    • 1970-01-01
    • 2018-04-15
    相关资源
    最近更新 更多