网安技术与应用(2)——基于DTLS的安全服务器设计

一 实验目的

通过实验,掌握DTLS的基本原理,掌握python3-dtls库的基本使用。

二 实验内容

  1. 利用 DTLS 库编写客户端和服务器程序,服务端开启监听,提供数据传输、文件传输功能;
  2. 客户端对服务端进行证书认证(单向认证);
  3. 利用相关工具(如 Wireshark)验证 DTLS 通信结果。

如果下载速度较慢可以考虑更换下载源

Ubuntu20.04更换下载源

三 实验原理

1、DTLS和TLS

DTLS(Datagram Transport Level Security)即数据报安全传输协议,被广泛应用于保护网页流量和其他应用协议。

TLS 提供了一个透明的有向通道,通过在应用层和传输层之间插入 TLS 来保护应用层协议(如 HTTP等)。然而 TLS 必须依赖可靠的传输通道,如 TCP,因此 TLS 无法用于保护 UDP 的数据包流量。

简单来说,DTLS 可以理解为 UDP 上的 TLS 协议,它为 UDP 报文提供了安全传输能力。由于 UDP 协议是不可靠传输协议,其不对丢包、排序等负责,而 TLS 内部也不具备处理这种不可靠性的机制,因此 TLS 无法直接应用于 UDP 上。

2、握手过程

对于传输层安全来说,密钥交换机制和数据加密及签名算法决定了整个方案的安全等级。而密钥协商都必须通过握手流程完成,因而这是理解DTLS的关键要点。

其流程与TLS概念上是一致的,其中:

  • Flight:对应一次通过网络发送的数据包;
  • HelloVerifyRequest:用于服务端对客户端实现二次校验;
  • Certificate:交换的证书,由协商后的算法确定是否需要传输;当服务端要求验证客户端身份时,发起CertificateRequest,此时客户端需要发送证书;
  • ChangeCipherSpec:一个简单的标记,标明当前已经完成密钥协商,可以准备传输;
  • Finished:表示握手结束,通常会携带加密数据由对端进行初次验证。

3、CipherSuite

由于网络 IO 限制,DTLS 只支持 TLS 的子集。

  • ECDHE_RSA:密钥交换算法,这是由 ECC 和 DH 密钥交换算法衍生出来的算法;
  • AES_128_GCM:动态密钥算法,用于实现数据包的加解密;
  • HMAC_SHA256:MAC 算 ,用于创建加密数据块的摘要;
  • PRF:伪随机函数,TLS1.2 定义其与 MAC 算法一致。

几个常用的 CipherSuite:

  • l TLS_PSK_WITH_AES_128_CBC_SHA256
  • l TLS_PSK_WITH_AES_128_CCM_8
  • l TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256
  • l TLS_ECDHE_ECDSA_WITH_AES_128_CCM_8

4、防护机制

(1)握手

  • 重传

DTLS 使用超时重传机制来确保握手消息的到达。

  • 顺序

UDP 本身不对消息传输的顺序负责,为了保证握手消息按序传输,每一个 Handshake 报文都分配了一个特殊的序列号,接收方直接处理属于当前步骤的消息,对于提前到达的消息则放到缓存队列中。

  • 分段

由于 MTU 限制,DTLS 要求对握手消息实现分段,每一个握手消息都可能包含分段的位移和长度,由接收端组装。

  • 重复

DTLS 选择性的支持消息重放检测机制,使用的技术与 IPsec AH/ESP 相同,由接收方维护一个 bitmap 窗口,因老化而不适合窗口的记录和以前接收过的记录都会被悄悄地丢弃。

(2)数据包传输

DTLS 为每个加密数据包增加了 MAC 鉴权摘要,用于保证数据包的完整性;此外显式附带了一个 SN 号用于排序。

(3)DoS 攻击

DTLS 定义了基于 cookie 验证的机制来预防攻击,如前面流程中涉及的 HelloVerifyRequest 便是用于进行 cookie 验证。Cookie 的算法:HMAC(Secret, Client-IP, Client-Parameters) 。

  • Secret:由 server 端内置,用于计算 cookie 值;
  • Client:需要在接收到 VerifyRequest 后提供同样的 cookie 值;
  • server:根据发送方 IP 计算 cookie 值,一旦发现不一致则判定为非法数据。

(4)会话恢复

握手流程所占的开销是比较大的,与 TLS 类似,DTLS 也定义了会话恢复机制。

握手成功之后,服务端将生成 SessionID 返回,客户端在下次连接时附带 SessionID;若验证通过,可直接沿用原有的会话数据,包括协商算法和密钥。

四 实验条件

  1. 操作系统:Ubuntu 20.04(其他 Linux 发行版均可,满足内核≥4.8);
  2. 工具软件:Python 3,Wireshark;

五 实验过程

完整代码可以到

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值