dtls通信(1)

dtls在传输层和应用层之间,用于进行密钥交换、数据加密、数字签名,其作用于udp。而tls作用于tcp。dtls是tls的子集

dtls握手过程

在这里插入图片描述
其流程与TLS概念上是一致的,其中Flight对应一次通过网络发送的数据包;HelloVerifyRequest 用于服务端对客户端实现二次校验;Certificate是交换的证书,由协商后的算法确定是否需要传输;当服务端要求验证客户端身份时,发起CertificateRequest,此时客户端需要发送证书;ChangeCipherSpec是一个简单的标记,标明当前已经完成密钥协商,可以准备传输;Finished消息表示握手结束,通常会携带加密数据由对端进行初次验证。

ciphersuite

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

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

防护机制

握手

  • 重传
    – DTLS 使用超时重传机制来确保握手消息的到达。
  • 顺序
    – UDP 本身不对消息传输的顺序负责,为了保证握手消息按序传输,每一个 Handshake 报文都分配了一个特殊的序列号,接收方直接处理属于当前步骤的消息,对于提前到达的消息则放到缓存队列中。
  • 分段
    – 由于 MTU 限制,DTLS 要求对握手消息实现分段,每一个握手消息都可能包含分段的位移和长度,由接收端组装。
  • 重复
    – DTLS 选择性的支持消息重放检测机制,使用的技术与 IPsec AH/ESP 相同,由接收方维护一个 bitmap 窗口,因老化而不适合窗口的记录和以前接收过的记录都会被悄悄地丢弃。

数据包重传

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

dos攻击

DTLS 定义了基于 cookie 验证的机制来预防攻击,如前面流程中涉及的 HelloVerifyRequest 便是用于进行 cookie 验证。
Cookie 的算法:HMAC(Secret, Client-IP, Client-Parameters)
其中 Secret 由 server 端内置,用于计算 cookie 值,client 端需要在接收到 VerifyRequest 后提供同样的 cookie 值;
server 端根据发送方 IP 计算 cookie 值,一旦发现不一致则判定为非法数据。

会话恢复

握手流程所占的开销是比较大的,与 TLS 类似,DTLS 也定义了会话恢复机制
在这里插入图片描述握手成功之后,服务端将生成 SessionID 返回,客户端在下次连接时附带 SessionID;若验证通过,可直接沿用原有的会话数据,包括协商算法和密钥。

相关链接

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值