- TLS 和 DTLS 之间的功能区别是什么?
- 使用 TLS 与 DTLS 时,应用程序流程/协商有何不同?
4 回答
基本上 DTLS 是在数据报(UDP、DCCP 等)上构建 TLS
DTLS 有意与 TLS 相似,只是 DTLS 必须解决两个问题:数据包丢失和重新排序。DTLS 实现
- 包重传
- 在握手中分配序列号
- 重放检测。
有关详细信息,请参阅RFC 6347。
这个想法是 DTLS 对于 TLS 就像 UDP 对于 TCP 一样,尽可能地。
请参阅https://datatracker.ietf.org/doc/draft-ietf-tls-dtls13/可能会过时RFC 6347以了解有关规范的详细信息以及相关讨论的链接。
DTLS 和传输层安全 (TLS) 协议之间存在关键区别,应用程序程序员需要注意其他答案错过/暗示不存在!
DTLS 协议为数据报协议提供通信隐私。与撰写本文时(存档)的现有顶级答案相反,DTLS不是TLS over UDP(或一般的数据报协议)的实现(或“构造”),并且,重放检测是 TLS 的必需功能,但在 DTLS 中是可选的。DTLS 包括一个非常类似于 TLS 的握手的实现,经过修改以在数据报协议上工作。该实现确实处理了数据包重新排序和丢失的问题,但仅针对用于 DTLS 握手(和密码选择)的数据包。换句话说,这些数据包传递的“航班”是可靠地交付。但是,包含有效负载(应用程序数据)的 DTLS 数据包可能不会比封装它们的 DTLS 数据包(通常是 UDP)更可靠地传递其有效负载。
此外,虽然 DTLS 协议 (v1.2) 源自 TLS 协议 (v1.2) 并声称“提供等效的安全保证”,但它并没有。2 早在 2013 年,研究人员就发现了 DTLS 实施和 DTLS 协议本身的主要安全缺陷,这些缺陷已经得到纠正,至少在 GnuTLS 和 OpenSSL 实施中是这样。2此外,DTLS 不保证不可重放性。
最后,OP 询问在使用 TLS 与 DTLS 时应用程序流程有何不同。TLS 旨在通过端到端的经过身份验证的加密可靠地传递数据流。DTLS 旨在交付经过身份验证和端到端加密的应用程序数据,但延迟低于保证所有应用程序数据交付时所能实现的延迟。这就是为什么 DTLS 用于保护损失不如延迟重要的流媒体应用,例如 VoIP、实时视频馈送和 MMO 游戏。
PS:DTLS 1.3 已经完成/在您阅读本文时可能已经作为 RFC 发布。3
PPS:哦,如果这值得一读,请不要错过RFC 7457,“总结对传输层安全性 (TLS) 和数据报 TLS (DTLS) 的已知攻击”。 我很惊讶 DTLS 1.3(无论如何是最终草案)没有提及它(例如从其安全注意事项部分)(建议),TLS 1.3 规范也没有!
DTLS 是 TLS over UDP(一种数据报协议)的实现。根据维基百科,TLS 使用 TCP,而 DTLS 使用 UDP,因此所有经典差异均适用。UDP 通信以数据包流的形式存在,没有排序、传递可靠性或流控制。使用数据报协议的应用程序需要确保它们可以在内部处理这些问题。
https://en.wikipedia.org/wiki/Transport_Layer_Security#Applications_and_adoption
一个区别是,由于通过 UDP,不允许使用流密码:
4.1.2.2。空或标准流密码
DTLS NULL 密码与 TLS 1.2 NULL 密码完全相同。
TLS 1.2 中描述的唯一流密码是 RC4,不能随机访问。RC4 不得与 DTLS 一起使用。