38

WebRTC 流量使用 DTLS 加密 - 好的。但是通过 TURN 服务器中继的流量呢?

我正在寻找一种可靠的资源来确认流量是真正端到端加密的(因为“端到端”有时可能意味着几件事)。所以我的意思是

  • 并不是说对等点和 TURN 服务器之间存在“端到端”加密。

反而,

  • 它在对等点之间是端到端的
  • 这样它就不会在 TURN 服务器上解密/重新加密
  • 并且 TURN 服务器无法访问机密

我一直无法找到一个明确的答案。

4

1 回答 1

36

要看的地方是 TURN 提出的标准,RFC 5766。该标准提供了一种在客户端和对等方之间中继包含应用程序数据的 UDP 数据包的方法:

创建分配后,客户端可以将应用程序数据连同将数据发送到哪个对等方的指示一起发送到服务器,并且服务器将把该数据中继到适当的对等方。客户端在 TURN 消息中将应用程序数据发送到服务器;在服务器端,从 TURN 消息中提取数据并以 UDP 数据报的形式发送给对等方。在相反的方向上,对等点可以将 UDP 数据报中的应用程序数据发送到中继的传输地址进行分配;然后,服务器会将这些数据封装在 TURN 消息中,并将其连同指示哪个对等方发送数据的指示一起发送给客户端。

TURN 解析的最高层是 UDP 层。它不理解或修改应用程序数据层(在您的情况下是 WebRTC 协议)。标准说:

希望确保其数据不被更改或伪造的应用程序必须在应用程序级别对其数据进行完整性保护。

这意味着您可以对应用程序数据进行完整性保护,并且 TURN 将在不修改的情况下中继它。您还可以查看 TURN 协议的详细信息(我不会在这里重复),它表明它只是包装和转发应用程序数据。

最后,标准在窃听时这样说:

TURN 中继的应用程序数据的机密性最好由应用程序协议本身提供,因为在 TLS 上运行 TURN 不会保护服务器和对等方之间的应用程序数据。如果应用程序数据的机密性很重要,则应用程序应加密或以其他方式保护其数据。例如,对于实时媒体,可以通过使用 SRTP 来提供机密性。

此摘录中的建议是通过使用 WebRTC 使用的 DTLS-SRTP 等协议加密应用程序数据来保护机密性。

因为 TURN 不会解释或修改应用程序数据,所以它不会向 WebRTC 应用程序数据流量添加任何不使用 TURN 就不会出现的安全漏洞。WebRTC 数据在 WebRTC 端点之间进行加密。

现在,没有人能保证“TURN 服务器无法访问该秘密”。流氓 TURN 服务器可以像其他任何可以拦截您的网络数据包的人一样轻松地尝试对您的连接进行中间人攻击。只有使用 TURN 中继并不会削弱 WebRTC 安全性才是真的。

只要正确实施和使用 DTLS 并假设 DTLS 算法和密码是安全的,WebRTC 流量就应该得到端到端的保护。使用任何基于 SSL 的方案的一部分需要验证另一个端点的证书,就像 HTTPS。就像 HTTPS 一样,这将需要事先进行带外证书身份交换或使用受信任的第三方。就像 HTTPS 一样,如果证书没有得到正确验证,那么 MITM 攻击的大门就会打开(任何人,而不仅仅是 TURN 服务器)。

于 2014-04-25T18:45:34.423 回答