TLS1.3 0-RTT 模式的安全隐患

TLSv1.3 提供了一种叫做 0-RTT (Zero Round Trip Time) 恢复模式(Resumption Mode)的特性,来达到无RTT传输。

0-RTT 模式简介

当客户端(例如浏览器)首次成功完成与服务器的TLS握手后,客户端和服务器都可在本地存储预共享的加密密钥。 这称为恢复主秘密。如果客户端稍后再次与服务器建立连接,则可以使用此恢复密钥将其第一条消息中的加密应用程序数据发送到服务器,而无需第二次执行握手。

0-RTT 模式的安全隐患

然而,0-RTT模式有一个安全弱点。 通过恢复模式发送数据不需要服务器的任何交互,这意味着攻击者(一般是中间人)可以捕获加密的0-RTT数据,然后将其重新发送到服务器,或重放(Replay)它们。在服务器配置错误的情况下,它可能会接受重放的请求为有效请求; 从本质上讲,服务器将允许攻击者执行未经批准的动作。

解决此问题的方法是确保所有0-RTT请求都是幂等的。

在计算机科学中,如果一项操作可以多次执行而其结果与第一次运行时没有不同,则它是幂等的。

例如,更新数据库中计数器的POST请求不是幂等的,因为它改变了Web应用程序的状态。而对主网页的GET请求却是幂等的。

幂等请求可以安全地使用0-RTT模式,因为重放它们不会起作用。