WebRTC的TURN流量是否端到端加密?

41

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

我正在寻找可靠的资源来确认该流量是否真正地端到端加密(因为“端到端”有时可能意味着多种情况)。 所以我的意思是:

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

而是说,

  • 它是对等方之间的端到端加密
  • 使得在TURN服务器上没有解密/重新加密
  • AND TURN服务器无法访问该密钥

我还没有找到确定的答案。


非常好的问题!谢谢 - intika
1个回答

40
寻找答案的地方是TURN提议标准,RFC 5766。该标准提供了一种在客户端和对等方之间中继包含应用程序数据的UDP数据包的方法:
一旦创建了分配,客户端可以发送应用程序数据到服务器,并指示要将数据发送到哪个对等方,服务器将中继此数据到适当的对等方。客户端在TURN消息中向服务器发送应用程序数据;在服务器上,数据从TURN消息中提取并以UDP数据报的形式发送到对等方。反向方向上,对等方可以将应用程序数据作为UDP数据报发送到分配的中继传输地址;然后服务器将此数据封装在TURN消息中,并与发送数据的对等方的指示一起发送给客户端。
TURN解析的最高层是UDP层。它不理解或修改应用程序数据层(在您的情况下,是WebRTC协议)。标准说:
希望确保其数据未被更改或伪造的应用程序必须在应用程序级别上保护其数据的完整性。
这意味着您可以保护应用程序数据的完整性,并且TURN将不加修改地中继它。您还可以查看TURN协议的详细信息(我不会在此重复),显示它仅包装和转发应用程序数据。
最后,标准对窃听说:
通过TURN中继的应用程序数据的机密性最好由应用程序协议本身提供,因为在TLS上运行TURN不能保护服务器和对等方之间的应用程序数据的机密性。如果应用程序数据的机密性很重要,则应用程序应加密或以其他方式保护其数据。例如,对于实时媒体,可以使用SRTP提供机密性。
这个摘录中的建议是使用诸如DTLS-SRTP的协议加密应用程序数据来保护机密性,WebRTC也使用了这种协议。
因为TURN不解释或修改应用程序数据,所以它不会为WebRTC应用程序数据流量添加任何安全漏洞,这些漏洞在没有使用TURN的情况下也会存在。WebRTC数据在WebRTC端点之间进行加密。
现在没有人能保证TURN服务器无法访问密钥。一个恶意的TURN服务器可以像任何其他拦截网络数据包的人一样尝试对你的连接进行中间人攻击。只有使用TURN中继不会削弱WebRTC安全性这一点是正确的。
只要DTLS被正确实施和使用,并且假定DTLS算法和密码是安全的,那么WebRTC流量应该得到端到端的安全保障。使用任何基于SSL的方案的一部分需要验证另一个端点的证书,就像HTTPS一样。并且就像HTTPS一样,这将需要事先进行证书身份的线下交换或使用可信第三方。如果证书没有得到适当验证,那么MITM攻击的大门就会敞开(不仅是TURN服务器)。

6
这个答案确实朝着正确的方向发展。很明显,为了使端到端加密起作用,加密必须在应用程序层完成。但是,1. 我不确定“TURN解析的最高层是UDP层”。在 https://code.google.com/p/rfc5766-turn-server/wiki/turnserver 中有DTLS和TLS选项。2. 我也不确定WebRTC是否与TURN服务器或其他客户端执行DTLS密钥交换。我在WebRTC规范中没有找到相关信息。 - Chris Lercher
1
@ChrisLercher,TURN协议本身可以通过TLS或DTLS来保护客户端和服务器之间的连接(在RFC 5766中允许使用TLS;DTLS是一种明显的增强)。这种加密封装了客户端和服务器之间的流量,并且位于应用层中的任何加密之上。在开源代码中,“--no-tls”和“--no-dtls”选项的描述(在mainrelay.c中定义,在netengine.c中使用)实际上说明这适用于客户端侦听器,指的是TURN协议层的套接字。 - rhashimoto
2
@ChrisLercher,WebRTC没有规定DTLS握手,因为这是DTLS的一部分。DTLS只是TLS的UDP版本,因此可以保证端到端加密。但是,就像HTTPS一样,只有在验证对等方的证书时才能正常工作-否则,就像您担心的那样,有人可能会使用MITM攻击。而且,就像HTTPS一样,WebRTC实现必须检查证书才能确保安全。这在W3C草案的第8.3.5节中有所涵盖:等待所有DTLS连接建立并检查所有连接上的证书指纹是否与IdP提供的指纹匹配。 - rhashimoto
1
@ChrisLercher,需要注意的是,有些人担心实现可能不会执行证书检查,这需要先进行证书的离线交换或信任的第三方身份验证服务器(就像HTTPS一样)。我相信WebRTC还有其他拟议中的更改来解决这个问题。 - rhashimoto
4
有人能否使用2019年的知识和当前主流浏览器的实现来回答这个问题? - heinob
显示剩余4条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接