QUIC协议设计(二)-握手


前言

上一章中,了解了一些名词,并初步认识了QUIC,如果QUIC了解不多,建议阅读上一章后再来看本文。
本章介绍QUIC巧妙的握手设计。


一、QUIC和TCP的TLS差异

1.TLS不是可选项

在TCP中,TLS是个可选项;
在QUIC中,TLS属于QUIC的一部分,不可分割。
如下图所示:
在这里插入图片描述

2.TLS版本固定

在TCP中,可以选择不同TLS版本;
在QUIC中,固定TLS1.3

3.TLS实现不同

由于UDP不可靠传输,TLS协议不支持UDP,DTLS协议才支持UDP。
在QUIC中,实现了QUIC版的TLS1.3,主要区别是TLS的记录层被QUIC接管,参见RFC9001
如下图所示:
在这里插入图片描述

二、QUIC和TCP的握手RTT差异

QUIC(特指iQUIC)实现了TLS1.3协议,首次握手1RTT,PSK过期前再握手0RTT。
如下图所示:
在这里插入图片描述
CHLO代表client的“hello”,同理,SHLO代表server的“hello”

三、安全握手

1. 重放攻击

1.1 0-RTT引起的重放攻击

TLS1.3的0-RTT握手,使得客户端发送的第一个包就可以包含应用数据,
但是带来了安全隐患-重放攻击(Relay Attack),
攻击者可以通过重发第一个包完成攻击,参见RFC8446

1.1 QUIC的应对

1.1.1 幂等

QUIC对帧的处理是幂等的,无论是重放、重排序、包丢失,都不会导致无效的连接状态,生命周期外的连接不会产生影响。

1.1.2 校验

0-RTT握手时,QUIC要求客户端传输TLS会话ticket和地址验证token,使得连接状态高效地检查和恢复。

1.1.3 关闭0-RTT

关闭0-RTT是对抗重放攻击最有效的手段。如果要使用0-RTT,QUIC要求应用程序做进一步的安全校验。

2. 拒绝服务攻击

1.1 TCP的SYN攻击

SYN攻击是著名的拒绝服务攻击。
TCP有3次握手,第一次握手的请求称为半连接请求。
攻击者通过发送大量的半连接请求,耗费服务器资源,造成服务器拒绝服务。
SYN攻击成立的关键原因是,
TCP对半连接请求分配了资源,且一定时间内不释放资源。

1.2 QUIC的包反射攻击

QUIC没有半连接的问题,但在握手时,容易遭受包反射攻击(Packet Reflection Attack)。
由于 QUIC 将 UDP 传输协议与 TLS 加密相结合,因此服务器在对客户端的第一次答复中附带了其 TLS 证书。
这意味着服务器的第一条消息要比客户端的第一条消息大得多。
攻击者向服务器发送“hello”进行握手,使得服务器返回大量数据消耗流量。
如果攻击者伪造成他人的IP,则服务器会把消息返回给他人,他人成为受害者。

1.3 QUIC的应对

1.3.1 限制hello包最小字节数

客户端的hello包必须达到1200字节,使得攻击者消耗更多的流量。

1.3.2 限制服务器流量

在对客户端地址完成验证前,服务器禁止返回大于已接收客户端字节数的3倍的数据量。
服务器对客户端的地址完成验证,是发生在,收到客户端发送的加密的应用数据时。

1.3.3 ACK验证

握手期间,客户端利用客户端hello包中生成的随机连接ID、以及服务端生成的熵,对服务器返回的的ACK消息进行验证,攻击者无法伪造ACK。


总结

本章介绍了QUIC的握手设计。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值