Page 229 - 《软件学报》2021年第9期
P. 229

陆思奇  等:强安全模型下 TLS1.3 协议的形式化分析与优化                                                 2853


         如果网页加载延迟 100ms,销售量就会随之减少 1%.而对于服务器在地理位置上相距很远的用户来说,网络的
         延迟则更加不能忽略.因此,人们希望既不牺牲安全性又能够尽量地降低协议的运行时间.针对这一需
         求,TLS1.3 做出了如下改进.
             (1)  RTT 握手支持;
             (2)  RTT 数据支持.
             RTT 是 Round Trip Time 的缩写,即消息的往返时间.对于 TLS1.2 来说,完成一次握手需要两个 RTT:第 1 个
         是 ClientHello 和 ServerHello,用于协商密钥交换算法以及各种不同的密码参数;第 2 个是 ClientKeyExchange
         和 ServerKeyExchange,也就是使用前一个 RTT 协商的算法和参数进行密钥交换.TLS1.3 为了减少 RTT,决定取
         消第 1 个 RTT,让客户端缓存最近服务器使用的算法和参数,直接使用该缓存的算法和参数,与服务器进行密钥
         交换.如果客户端使用的算法和参数错误,则服务器返回 HelloRetryRewuest 消息,告知正确的算法和参数,让客
         户端重启握手,这就是 1-RTT 握手.该握手方式的可行性来源于 TLS1.3 对算法的削减,许多不安全的算法被抛
         弃,剩下的密钥协商算法其实只有屈指可数的几种.而可用的密钥协商算法越少,那么 1-RTT 握手成功的可能性
         就越高;并且即使客户端使用了错误的算法,也只需要增加一个 RTT 的代价,和 TLS1.2 相比没有增加额外的
         RTT.这样,TLS1.3 基本没有副作用,便大大降低了 TLS 握手协议所需要的平均时长.
             除了上述的 1-RTT 握手,TLS1.3 还借鉴了 Google 的 QUIC 协议       [31] ,设计了一个 0-RTT 数据的解决方案.所
         谓 0-RTT,是指在握手协议的第 1 条消息中就允许客户端发送一些数据而不必等到握手协议结束.具体的解决方
         法是:允许客户端缓存服务器的长期公钥,在第 1 条消息中直接利用该长期公钥生成一个会话密钥发送部分应
         用层数据,另一部分应用层数据则等到完整的握手协议之后发送.在现实应用中,对于近期曾经访问过的网站,
         用户可以在第 1 次向服务器发送消息时就带上一部分应用数据,从而达到提高网页加载速度的目的.
             值得注意的是:0-RTT 数据只是在 1-RTT 握手的基础上添加的数据,这个数据也被称为 Early Data,握手的其
         他部分依然保持 1-RTT 原有的消息.另外,这些数据不能抵抗重放攻击,该漏洞可通过一些独立于密钥交换的其
         他机制解决,如果想要利用 0-RTT 机制,则应该在应用层提供重放保护.
         2.3   支持0-RTT数据的模式

             TLS1.3 有 3 种模式支持 0-RTT 数据:1-RTT semi-static,PSK,PSK-DHE.图 3 为包含 0-RTT 数据的消息交互
         过程,表 1 表示各部分交互消息的意义,表 2 为 3 种模式所使用的密钥导出表.


                                           ⎯⎯⎯⎯⎯⎯⎯⎯→
                                             chello,ceks,{Early Data}
                                                            eadk
                                 ←⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯
                                    shello,seks,{ssks,MAC
                                                  sfk (chello,ceks,shello,seks,ssks)}
                                                                     htk
                         Client                                              Server
                               Fig.3    Handshake process that contains 0-RTT data flow
                                       图 3   包含 0-RTT 数据的握手流程
                                           Table 1  Protocol notation
                                               表 1   符号定义
                                          chello,shello   密钥协商参数
                                                             x
                                           ceks,seks   临时公钥 g ,g   y
                                             ssks   服务器长期公钥 g   s
                                               +
                                            ssks     签名服务器密钥
                                         Table 2  Key derivation table
                                              表 2   密钥导出表
                                模式       ceks  seks  ssks  sfk  eadk  atk  htk  cost
                                                             xs
                                                                  xs
                           1-RTT semi-static   g   x  g   y  g   s  g xs  g    g ,g xy  g xy  2DH
                                PSK       −    −    −   psk  psk  psk   psk  −
                              PSK-DHE     g   x  g   y  −  psk  psk  psk,g xy  g xy  1DH
   224   225   226   227   228   229   230   231   232   233   234