DTLS和TLS的区别

53
  1. TLS和DTLS之间的功能区别是什么?
  2. 在使用TLS与DTLS时,应用程序流/协商如何不同?
4个回答

41

DTLS的基本概念是在数据报(UDP、DCCP等)上构建TLS。

DTLS与TLS非常相似,但有两个问题需要解决:数据包丢失和乱序。DTLS实现了以下功能:

  1. 数据包重传;
  2. 在握手中分配序列号;
  3. 回放检测。

详见RFC 6347


1
从你提到的 RFC 中可以看出一个小问题:“由于 DTLS 协议不能补偿丢失或重新排序的数据流量,所以这样的应用程序在使用 DTLS 协议进行通信安全时的行为与之前没有区别。” - Scott Franco
5
错误,随后发现的安全漏洞表明这个答案在安全方面是错误的;请查看我的新答案。 - WHO's NoToOldRx4CovidIsMurder

36

思想是将DTLS视为UDP与TCP的TLS,尽可能地保持一致。

有关规范的详细信息,请参见https:/ /datatracker.ietf.org/doc/draft-ietf-tls-dtls13/,该规范很可能会取代RFC 6347 ,并链接到相关讨论。

DTLS与应用程序员需要了解的传输层安全(TLS)协议之间存在关键差异,而其他答案则遗漏或暗示不存在这种差异!

DTLS协议为数据报协议提供通信隐私。与此写作时最受欢迎的答案相反(存档),DTLS不是TLS在UDP(或数据报协议)上的实现或“构造”,而且回放检测是TLS的必需特性,但在DTLS中是可选的。DTLS包括一个类似TLS的握手实现,经过修改以适应数据报协议。该实现确实处理了数据包重排序和丢失的问题,但仅针对用于DTLS握手(和密码选择)的数据包。换句话说,这些数据包传送的“流程”是可靠的。然而,包含有效负载(应用程序数据)的DTLS数据包可能与封装它们的DTLS数据包(通常是UDP)一样不可靠。

此外,虽然DTLS协议(v1.2)源于TLS协议(v1.2),并声称“提供相同的安全保障”,但实际上并非如此。2 早在2013年,研究人员就发现了DTLS实现和协议本身存在重大安全缺陷,至少在GnuTLS和OpenSSL实现中已经得到修复。2 此外,DTLS不能保证不可重放性。

最后,OP问道在使用TLS与DTLS时应用程序流程有何不同。 TLS旨在可靠地传递数据流并进行端到端身份验证加密。 DTLS旨在传递认证和加密的应用程序数据,并具有比保证所有应用程序数据传输更低的延迟。这就是为什么DTLS用于安全流应用程序,其中丢失比延迟更不重要,例如VoIP,实时视频和MMO游戏。

PS:DTLS 1.3已完成/可能已经由RFC发布,当您阅读此文时。3

附言:如果这篇文章值得一读,请不要错过RFC 7457,“总结已知的传输层安全协议(TLS)和数据报文TLS(DTLS)攻击”。我对DTLS 1.3(至少是最终草案)没有提及它感到惊讶(例如从其安全考虑部分引用它),(建议如此),而TLS 1.3规范也没有提到!


4
这是正确的答案,只保证TLS协议本身的顺序,而不是有效载荷。您不希望选择客户端的可靠协议实现,它可能是许多不同的算法,并且可能特定于应用程序。例如,安全视频连接可以使用自定义的帧丢弃算法。 - Scott Franco
实际上,在同一数据流中,不同的UDP数据包甚至可以具有不同的优先级标志设置,以表示更或者较不重要的内容。尽管如此,也许缺乏对于网络和骨干网是否/如何关注这些标志的研究。据我所知,它们大多数情况下并没有关注这些标志。而且,由于实际进行数据包丢弃的是网络而不是应用程序,因此这一点非常关键。 - WHO's NoToOldRx4CovidIsMurder

9

5
DTLS实现应该解决UDP问题,而不是由应用程序来解决。 - Eugene Mayevski 'Callback

2

一个区别是,由于消息传输使用了UDP协议,所以流密码不允许使用:

4.1.2.2. 空或标准流密码

DTLS空密码的执行方式与TLS 1.2空密码完全相同。

TLS 1.2中唯一描述的流密码是RC4,但它无法随机访问,因此不能与DTLS一起使用。


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