嗅探网络流量时,可以看到 HTTPS 数据包及其所有(加密)数据。我想知道如果这个数据包被复制然后重新发送会发生什么。
某层是否有防止同一数据包被使用两次的协议?(可能带有时间戳之类的东西)如果没有,服务器端应该如何防御它?
嗅探网络流量时,可以看到 HTTPS 数据包及其所有(加密)数据。我想知道如果这个数据包被复制然后重新发送会发生什么。
某层是否有防止同一数据包被使用两次的协议?(可能带有时间戳之类的东西)如果没有,服务器端应该如何防御它?
有多种机制可以检测重复。
一般来说,不 - TLS 协议防止重放攻击,因此如果数据被复制并重新发送,它将被丢弃。
有一个例外,TLS 1.3 协议中的一项新功能 - 0-RTT。这是一种性能增强,其代价是协议在某些情况下无法防止重放攻击。理论上,允许 0-RTT 的系统将具有针对重放攻击的应用层防御。但是,这会产生应用程序可能允许 0-RTT 但防御不足的风险。我不知道我们是否会在野外看到 0-RTT 漏洞,但这是一个潜在有趣的研究领域。更多信息
不,这行不通。通过“数据包”,我假设您只是在描述通过 TLS 的请求中的一些数据,这些数据可以拆分为发送到服务器的多个 TCP 数据包。这可能只是通过已加密的劫持 TCP 连接发送您收到的内容,或者通过重播您从 TCP 连接开始到结束记录的整个会话。
在第一种情况下,服务器的加密状态将与第一次接收数据时不同。如果您在数据流中的某一时刻加密“Hello”,则与稍后加密“Hello”不同。您也可以发送随机位。
如果您正在重播整个连接,则由于握手发生的方式,这将不起作用。每个新连接都有由客户端和服务器生成的随机字节集。这些随机字节用于生成用于后面数据实际加密的密钥。您必须很幸运,并且在服务器上为您的新连接生成与您尝试重播的前一个连接相同的随机字节。