Datagram Transport Layer Security (DTLS) is a communications protocol providing security to datagram-based applications by allowing them to communicate in a way designed[1][2][3] to prevent eavesdropping, tampering, or message forgery. The DTLS protocol is based on the stream-oriented Transport Layer Security (TLS) protocol and is intended to provide similar security guarantees. The DTLS protocol datagram preserves the semantics of the underlying transport—the application does not suffer from the delays associated with stream protocols, but because it uses UDP or SCTP, the application has to deal with packet reordering, loss of datagram and data larger than the size of a datagram network packet. Because DTLS uses UDP or SCTP rather than TCP, it avoids the "TCP meltdown problem",[4][5] when being used to create a VPN tunnel.
Contents
1Definition
2Implementations
2.1Libraries
2.2Applications
3Vulnerabilities
4See also
5References
6External links
Definition
The following documents define DTLS:
RFC 9147 for use with User Datagram Protocol (UDP),
RFC 5238 for use with Datagram Congestion Control Protocol (DCCP),
RFC 5415 for use with Control And Provisioning of Wireless Access Points (CAPWAP),
RFC 6083 for use with Stream Control Transmission Protocol (SCTP) encapsulation,
RFC 5764 for use with Secure Real-time Transport Protocol (SRTP) subsequently called DTLS-SRTP in a draft with Secure Real-Time Transport Control Protocol (SRTCP).[6]
DTLS 1.0 is based on TLS 1.1, DTLS 1.2 is based on TLS 1.2, and DTLS 1.3 is based on TLS 1.3. There is no DTLS 1.1 because this version-number was skipped in order to harmonize version numbers with TLS.[2] Like previous DTLS versions, DTLS 1.3 is intended to provide "equivalent security guarantees [to TLS 1.3] with the exception of order protection/non-replayability".[7]
Implementations
Libraries
Library support for DTLS
Implementation
DTLS 1.0[1]
DTLS 1.2[2]
DTLS 1.3[3]
Botan
Yes
Yes
cryptlib
No
No
GnuTLS
Yes
Yes
Java Secure Socket Extension
Yes
Yes
LibreSSL
Yes
Yes[8]
libsystools[9]
Yes
No
MatrixSSL
Yes
Yes
mbed TLS (previously PolarSSL)
Yes[10]
Yes[10]
Network Security Services
Yes[11]
Yes[12]
OpenSSL
Yes
Yes[13]
PyDTLS[14][15]
Yes
Yes
Python3-dtls[16][17]
Yes
Yes
RSA BSAFE
No
No
s2n
No
No
Schannel XP/2003, Vista/2008
No
No
Schannel 7/2008R2, 8/2012, 8.1/2012R2, 10
Yes[18]
No[18]
Schannel 10 (1607), 2016
Yes
Yes[19]
Secure Transport OS X 10.2–10.7 / iOS 1–4
No
No
Secure Transport OS X 10.8–10.10 / iOS 5–8
Yes[20]
No
SharkSSL
No
No
tinydtls [21]
No
Yes
Waher.Security.DTLS [22]
No
Yes
wolfSSL (previously CyaSSL)[23]
Yes
Yes
Yes
@nodertc/dtls [24][25]
No
Yes
java-dtls[26]
Yes
Yes
pion/dtls[27] (Go)
No
Yes
californium/scandium[28] (Java)
No
Yes
SNF4J[29] (Java)
Yes
Yes
Implementation
DTLS 1.0
DTLS 1.2
DTLS 1.3
Applications
Cisco AnyConnect VPN Client uses TLS and invented DTLS based VPN.[30]
OpenConnect is an open source AnyConnect-compatible client and ocserv server that supports (D)TLS.[31]
Cisco InterCloud Fabric uses DTLS to form a tunnel between private and public/provider compute environments[32]
ZScaler tunnel 2.0 uses DTLS for tunneling [33]
F5 Networks Edge VPN Client uses TLS and DTLS[34]
Citrix Systems NetScaler uses DTLS to secure UDP[35]
Web browsers: Google Chrome, Opera and Firefox support DTLS-SRTP[36] for WebRTC. Firefox 86 and onward does not support DTLS 1.0.[37]
Vulnerabilities
In February 2013 two researchers from Royal Holloway, University of London discovered a timing attack[38] which allowed them to recover (parts of the) plaintext from a DTLS connection using the OpenSSL or GnuTLS implementation of DTLS when Cipher Block Chaining mode encryption was used.
↑ 2.02.12.2Rescorla, Eric; Modadugu, Nagendra (January 2012), Datagram Transport Layer Security Version 1.2, doi:10.17487/RFC6347, RFC 6347, https://tools.ietf.org/html/rfc6347
↑ 3.03.1The Datagram Transport Layer Security (DTLS) Protocol Version 1.3, April 2022, doi:10.17487/RFC9147, RFC 9147, https://tools.ietf.org/html/rfc9147
↑Titz, Olaf (2001-04-23). "Why TCP Over TCP Is A Bad Idea". http://sites.inka.de/bigred/devel/tcp-tcp.html.
↑Honda, Osamu; Ohsaki, Hiroyuki; Imase, Makoto; Ishizuka, Mika; Murayama, Junichi (October 2005). "Understanding TCP over TCP: effects of TCP tunneling on end-to-end throughput and latency". in Atiquzzaman, Mohammed; Balandin, Sergey I. 6011. doi:10.1117/12.630496. Bibcode: 2005SPIE.6011..138H.
↑Peck, M.; Igoe, K. (2012-09-25). "Suite B Profile for Datagram Transport Layer Security / Secure Real-time Transport Protocol (DTLS-SRTP)". IETF. https://tools.ietf.org/html/draft-peck-suiteb-dtls-srtp-02.
↑"The Datagram Transport Layer Security (DTLS) Protocol Version 1.3". https://datatracker.ietf.org/doc/draft-ietf-tls-dtls13/.
↑"LibreSSL 3.3.2 Release Notes". The OpenBSD Project. 2021-05-01. https://ftp.openbsd.org/pub/OpenBSD/LibreSSL/libressl-3.3.2-relnotes.txt.
↑Julien Kauffmann. "libsystools: A TLS/DTLS open source library for Windows/Linux using OpenSSL". SourceForge. http://sourceforge.net/projects/libsystools/.
↑"NSS 3.14 release notes". Mozilla Developer Network. Mozilla. https://developer.mozilla.org/en-US/docs/NSS/NSS_3.14_release_notes.
↑"NSS 3.16.2 release notes". Mozilla Developer Network. Mozilla. 2014-06-30. https://developer.mozilla.org/en-US/docs/Mozilla/Projects/NSS/NSS_3.16.2_release_notes.
↑"As of version 1.0.2". The OpenSSL Project. The OpenSSL Project. 2015-01-22. https://www.openssl.org/news/openssl-1.0.2-notes.html.
↑Ray Brown. "pydtls - Datagram Transport Layer Security for Python". GitHub. https://github.com/rbit/pydtls.
↑Ray Brown. "DTLS for Python". Python Software Foundation. https://pypi.python.org/pypi/Dtls.
↑Ray Brown/Mobius Software LTD. "pydtls - Datagram Transport Layer Security for Python". GitHub. https://github.com/mobius-software-ltd/pyton3-dtls.
↑Ray Brown/Mobius Software LTD. "DTLS for Python3 Based on PyDTLS". Python Software Foundation. https://pypi.python.org/pypi/python3-dtls.
↑ 18.018.1"An update is available that adds support for DTLS in Windows 7 SP1 and Windows Server 2008 R2 SP1". Microsoft. http://support.microsoft.com/kb/2574819/en-us.
↑Justinha. "TLS (Schannel SSP) changes in Windows 10 and Windows Server 2016" (in en-us). https://docs.microsoft.com/en-us/windows-server/security/tls/tls-schannel-ssp-changes-in-windows-10-and-windows-server#dtls-12.
↑"Technical Note TN2287: iOS 5 and TLS 1.2 Interoperability Issues". iOS Developer Library. Apple Inc.. https://developer.apple.com/library/ios/technotes/tn2287/.
↑"californium/scandium: DTLS 1.2 Server/Client implementation for java and coap. Includes connection id extension.". Eclipse Foundation. https://github.com/eclipse/californium.
↑SNF4J.ORG. "Simple Network Framework for Java (SNF4J).". GitHub. https://github.com/snf4j/snf4j.
↑"AnyConnect FAQ: tunnels, reconnect behavior, and the inactivity timer". Cisco. http://www.cisco.com/c/en/us/support/docs/security/anyconnect-secure-mobility-client/116312-qanda-anyconnect-00.html.
↑"Firefox 86.0, See All New Features, Updates and Fixes" (in en). 2021-02-23. https://www.mozilla.org/en-US/firefox/86.0/releasenotes/. "From Firefox 86 onward, DTLS 1.0 is no longer supported for establishing WebRTC's PeerConnections. All WebRTC services need to support DTLS 1.2 from now on as the minimum version."
↑"Plaintext-Recovery Attacks Against Datagram TLS". http://www.isg.rhul.ac.uk/~kp/dtls.pdf.
Modadugu, Nagendra; Rescorla, Eric (2003-11-21). "The Design and Implementation of Datagram TLS". Stanford Crypto Group. https://crypto.stanford.edu/~nagendra/papers/dtls.pdf.
Gibson, Steve; Laporte, Leo (2012-11-28). "Datagram Transport Layer Security". Security Now 380. http://twit.tv/show/security-now/380. Skip to 1:07:14.
Robin Seggelmann's Sample Code: echo, character generator, and discard client/servers.
The Illustrated DTLS Connection
v
t
e
TLS and SSL
Protocols and technologies
Transport Layer Security / Secure Sockets Layer (TLS/SSL)