DTLS(Datagram Transport Layer Security)即
数据包传输层安全性协议。
TLS不能用来保证
UDP上传输的数据的安全,因此Datagram TLS试图在现存的
TLS协议架构上提出扩展,使之支持UDP,即成为TLS的一个支持数据包传输的版本。DTLS 1.0 基于 TLS 1.1, DTLS 1.2 基于TLS 1.2。
1. DTLS(Datagram Transport Layer Security)
近年来出现了许多实用数据包传输的应用程序。这些应用包括实时视频会议,internet电话和在线游戏,比如Quack和Starcraft。这些应用都是延迟敏感的,并且使用了不可靠的数据报传输。
TCP之上的应用可以用
TLS来保证安全,但是TLS不能用来保证
UDP的安全。Datagram TLS试图在现存的
TLS协议架构上提出扩展,使之支持UDP,即成为TLS的一个支持
数据包传输的版本。DTLS 1.0 基于 TLS 1.1, DTLS 1.2 基于TLS 1.2.
当部署TLS的时候,大家还没有充分认识到这个局限性的严重程度,因为当时大多数应用运行在TCP之上。然而情况正在改变。在过去几年中,不断增长的应用层协议,比如
SIP (session initial protocol),RTP (real time protocol), MGCP (the Media Gateway Control Protocol),还有许多游戏协议都基于
UDP传输而设计。
目前,这些应用的设计者面对着许多用来保证安全性的选择,但却无法令人满意。首先,他们可以使用IPsec。然而,IPsec不适合于Client-Server应用模型,且难以同应用程序结合,因为IPsec运行在系统内核。有很多文献详细讨论了为什么IPsec为什么不是一个令人满意的选择。其次,他们自己设计一个特有的
应用层安全协议。例如,SIP使用了S/MIME的一个变体来保证安全通信。将S/MIME嫁接到SIP中比使用
TLS上的
TCP版本的SIP变体更费劲。第三,可以把应用移植到TCP之上,然后使用TLS。不幸的是,许多这样的应用依赖于
UDP语义,当运行在诸如TCP之类的流协议上性能将令人无法接受。
最为明显的选择是设计一个通用的信道安全协议,它可以使用数据报传输,就像TCP上的TLS。这样一个协议可以在
用户空间中实现,这样便于安装,但是要足够灵活和通用,能够向许多面向数据报的应用程序提供数据传输安全保障。尽管认为这个方案将是一个巨大和困难的规划项目。但是构造一个可以工作的协议相当直接,尤其是有了TLS的起点和IPsec的参考。本文介绍了这个新的协议,我们称为 “Datagram TLS “, DTLS是
TLS的一个修改版本, 这样函数能够运行在
数据报通信上。相对于上面的方案,该方法有两个主要优势:首先,既然DTLS非常类似于TLS,可以重用以前的协议架构和实现方法。为了便于展示,我们通过对
OpenSSL库的添加实现了DTLS。我们总共添加了7000行代码,其中的60%从OpenSSL剪切和粘贴。其次,既然DTLS向通用安全层提供了相似的接口,就易于调整协议来使用它。TLS的经验显示,这种易于调整性是扩大部署的关键。
(1) TLS纪录层不能处理独立纪录。因为加密的
上下文(比如CBC状态,序列密钥流)在记录之间经过链接。如果其中一个记录丢失,则将不能处理其后的所有记录。
DTLS的目标应用主要是
C/S及其变体。这也是
TLS的
设计目标并且已很好工作。展示的安全模型中,
server通过DNS名称和
IP地址被认证,Client是匿名的或者被其他形式认证,典型的是在
应用层通过
用户名/密码来处理。
这个实现并不真正安全。然而,
应用程序的设计者们,向在添加安全性的时候尽量能够维护他们的协议和实现架构。这个实现制造了一个类似于TLS或
IPsec的有吸引力的信道
安全协议,因为改动之非常小。从这个观点看来,理想的
数据报信道安全协议应该取代对Server的DNS和基于IP认证的 强加密认证,而是把client认证留给应用层协议。