想象一个特工接头的场景。老式特工接头,要来回碰面两趟:第一趟互相报出代号、确认“你是组织派来的人”;第二趟才交换暗号本,正式建立秘密通道——整个流程要跑两个来回。TLS 1.2时代,浏览器和服务器建立加密连接也是这么麻烦:需要两个网络往返(2-RTT)才能完成握手。TLS 1.3就像新一代特工培训手册:把两个来回压缩成一个(1-RTT),老熟人之间甚至一个眼神、一句暗号就能开始传情报(0-RTT)。更关键的是,每次接头都用全新的、用完即焚的暗号本(前向安全),绝不像旧时代那样把同一本暗号本背在身上用十年(静态RSA)。这篇文章,就用“接头”这个比喻,把TLS 1.3的握手简化、0-RTT、前向安全和静态RSA弃用讲个明明白白。

岗位关联

无论你是后端工程师、安全运维还是AI应用开发者,理解TLS 1.3意味着你能看懂网络通信的安全底座是如何升级的,也能在系统设计、API接入、数据传输保护中做出更专业的技术选型。

目录
  1. 可视化演示
  2. 握手流程简化
  3. 零RTT快速恢复
  4. 前向安全机制
  5. 静态RSA弃用
  6. 密码套件精简
  7. 安全性能提升
  8. AI 应用场景
  9. Python 演示
  10. 常见误区
  11. 面试题

可视化演示

展示TLS 1.3的1-RTT简化握手流程、0-RTT零往返模式(含重放风险)、ECDHE临时密钥交换前向安全机制及TLS 1.2/1.3密码套件对比,支持切换四种分析视角。

本节配有交互动效(进入视口后自动加载,约 3KB)。

TLS 1.3握手 1-RTT: CH+SH+CF完成 0-RTT: early_data重放风险 ECDHE → 前向安全

握手流程简化

想象两位特工第一次接头。老规矩,他们要来回碰面两次——第一次互相报出代号,确认“你是组织派来的人”;第二次才交换加密暗号本,正式建立秘密通道。整个仪式要跑两个来回,任何一环出问题都得重来。TLS 1.2时代,浏览器和服务器建立加密连接就是这么繁琐:需要两个网络往返(2-RTT)才能完成。

TLS握手本质上是客户端和服务器在正式传输数据前的“接头仪式”。客户端要先亮出自己支持的加密算法清单(ClientHello),服务器从清单里挑选一套并报上自己的身份证书(ServerHello),双方还要交换密钥参数、验证证书、确认握手消息没有被篡改。TLS 1.2把这些步骤串行安排,硬生生需要两个来回。

TLS 1.3重新编排了这个仪式。密钥协商与身份认证从串行改为并行:客户端的ClientHello同时携带算法清单和密钥交换参数,服务器的ServerHello一次性返回算法选择、证书和密钥参数。整个握手被精简为四条核心消息——ClientHello、ServerHello、EncryptedExtensions、Finished,只需要一个网络往返。

新接头规则下,双方只需跑一个来回就能完成全部身份确认和密钥协商。消息精简了一半,手握得更快,通道开得更早——这就是1-RTT的价值。

Dhandshake=RTT×Nround+tcryptoD_{handshake} = RTT \times N_{round} + t_{crypto}
握手总耗时 = 网络往返耗时 × 往返次数 + 本地加解密计算时间。TLS 1.2需要2次往返,TLS 1.3只需1次。
  1. D_handshake(握手总耗时)从客户端发出第一个握手消息到服务器握手完成的全部时间,包括网络传输和本地计算。
    DhandshakeD_{handshake}
  2. RTT(网络往返时间)一个数据包从客户端到服务器再返回所花的时间,相当于接头时“一句话传过去再传回来”的耗时。
    RTTRTT
  3. N_round(往返次数)握手所需的消息往返轮数,TLS 1.2中等于2,TLS 1.3中降为1。
    Nround1.3=1,Nround1.2=2N_{round}^{1.3} = 1,\quad N_{round}^{1.2} = 2
  4. t_crypto(本地计算开销)双方本地做签名验证、密钥派生等密码学计算所花的时间,通常在毫秒级。
    tcryptot_{crypto}

零RTT快速恢复

接头对象是老熟人时,一切都可以更快。上次接头,双方已经约定了一套只有彼此知道的暗号备忘。这次再碰面,只需一个眼神、一句暗号开头,对方就知道是你;你甚至可以边说话边把情报塞进对方口袋——这就是特工界的“零往返接头”。

TLS 1.3的0-RTT正是这个思路。首次完整握手后,服务器会给客户端颁发一张“预共享密钥”(PSK)凭证,相当于一张盖了章的接头通行证。下次连接时,客户端把PSK直接写在第一个ClientHello消息里,应用数据(Early Data)紧随其后同时发出,省去了等服务器应答的一个完整往返。

0-RTT的延迟模型非常诱人:客户端发完第一个包,服务器就能解密并处理其中的数据。但代价是重放风险——攻击者可以截获这份Early Data,原封不动地再次递交给服务器,造成重复下单、重复扣费等问题。因此,TLS 1.3规范明确要求0-RTT数据只能用于幂等请求(如GET查询、缓存刷新),服务器还必须对其做反重放校验。

老熟人通道虽快,但只适合递“丢了也无所谓”的情报副本。0-RTT让首字节延迟大幅下降,却必须用幂等约束来对冲重放风险——快,但不任性。

D0-RTT=0×RTT+tserverD_{0\text{-}RTT} = 0 \times RTT + t_{server}
0-RTT模式下,握手延迟的RTT系数直接为0,只剩下服务器处理Early Data的计算时间。
  1. D_0-RTT(零往返延迟)从客户端发出第一个包到服务器处理完Early Data的总时间。
    D0-RTTD_{0\text{-}RTT}
  2. RTT系数0(省去网络往返)客户端无需等待服务器先回应,直接在第一个消息中携带应用数据,因此网络往返次数为0。
    0×RTT=00 \times RTT = 0
  3. t_server(服务器处理时间)服务器解密Early Data、校验重放、处理业务请求所需的时间,这是0-RTT模式下唯一不可消除的延迟。
    tservert_{server}

前向安全机制

特工接头采用“用完即焚”的暗号本:每次见面都从新本子上撕下一页,看完即毁,下次再见面又换新本子。窃听者就算捡到过去的暗号本残页,也拼不出当下或未来的通信内容——这就是前向安全的精神内核。

前向安全的本质是“会话密钥用完即焚”。TLS 1.3的密钥交换采用临时Elliptic Curve Diffie-Hellman(ECDHE):双方每次握手各自生成一组临时密钥对,交换公钥后计算出共享会话密钥,握手一结束,临时私钥就从内存中彻底销毁。

ECDHE的安全性建立在椭圆曲线离散对数难题上。客户端随机选一个数作为临时私钥a,计算出公钥A = g^a mod p;服务器同样随机生成临时私钥b和公钥B = g^b mod p。双方交换A和B后,各自计算共享密钥K。a和b是一次性的,用完就丢;攻击者即使记录了全部流量,甚至后来拿到了服务器的长期私钥,也无法倒推出历史会话的K。

每接头一次就烧一页暗号本,小偷攒下一整箱灰烬,也拼不出任何一句完整的暗号。这就是前向安全给历史的承诺。

A=ga mod p,B=gb mod p,K=Ab mod p=Ba mod p=gab mod pA = g^a \bmod p,\quad B = g^b \bmod p,\quad K = A^b \bmod p = B^a \bmod p = g^{ab} \bmod p
a是客户端临时私钥,b是服务器临时私钥,两者都只在内存中存在一瞬间。共享密钥K由双方各自计算得到,从不直接传输。
  1. a和b(临时私钥)客户端和服务器各自独立随机生成的数字,相当于每次接头新撕下的一页暗号本,使用后立即销毁。
    a,  ba,\; b
  2. A和B(公开公钥)双方把各自的临时公钥发送给对方,公钥公开可被窃听,但不泄露私钥信息。
    A=ga mod p,B=gb mod pA = g^a \bmod p,\quad B = g^b \bmod p
  3. 共享密钥K(两种算法殊途同归)客户端用A^b计算K,服务器用B^a计算K,二者数学上相等,于是双方拥有了同一把会话密钥。
    K=Ab mod p=Ba mod p=gab mod pK = A^b \bmod p = B^a \bmod p = g^{ab} \bmod p
  4. g和p(公开参数)由TLS规范定义的公共常量,所有人都知道,不影响安全性。
    g,  pg,\; p
  5. 用完即焚(核心保障)握手完成后a和b立刻从内存清除,任何后续的密钥泄露都无法复原它们。
    a→握手完成销毁a \xrightarrow{\text{握手完成}} \text{销毁}

静态RSA弃用

旧式特工有个坏习惯:把同一本暗号本贴身携带十年,每封密信都用这本子加密。一旦本子被敌人偷走或复印,过去十年所有密信全部能被翻译——损失是灾难性的。TLS 1.2时代的静态RSA密钥交换,就是这样一个危险的“长期暗号本”。

在静态RSA密钥交换中,客户端随机生成一个会话密钥K,用服务器的长期RSA公钥加密后发送过去;服务器用自己长期保存的RSA私钥解密得到K。整个过程看似合理,但致命问题在于:服务器私钥一旦泄露,攻击者就能用这把私钥解开过去所有加密过的会话密钥,进而解密全部历史流量。

更可怕的是,攻击者根本不需要“现在”就拿到私钥。他们可以先把所有密文录影存档,等几年后私钥因黑客入侵、内部泄密或合规要求而暴露时,再批量回溯解密。这种“先记录、后破解”的策略让静态RSA毫无还手之力。TLS 1.3因此彻底移除了RSA密钥交换,只保留RSA签名(RSA-PSS)用于身份认证——签名不参与会话密钥的生成,私钥泄露也不会直接危及历史通信内容。

组织从此规定:暗号本一次性使用,旧本子一律销毁。即使哪天私钥被偷,小偷面对的也只是一堆无用的灰烬——静态RSA正式退役,前向安全全面上岗。

C=Epubsrv(Ksess),Ksess=Dprivsrv(C)C = E_{pub_{srv}}(K_{sess}),\quad K_{sess} = D_{priv_{srv}}(C)
静态RSA用服务器长期公钥加密会话密钥,用长期私钥解密。私钥一旦泄露,所有用相同密钥对保护的历史会话全部暴露。
  1. K_sess(会话密钥)客户端为本次连接随机生成的临时密钥,之后用它加密应用数据。
    KsessK_{sess}
  2. pub_srv / priv_srv(服务器长期密钥对)服务器证书中的RSA公钥和私钥,静态、长期、固定不变,相当于那本用了十年的暗号本。
    pubsrv,  privsrvpub_{srv},\; priv_{srv}
  3. E_pub 与 D_priv(公钥加密、私钥解密)客户端用公钥加密会话密钥得到密文C,服务器用私钥解密还原K。
    C=Epubsrv(Ksess),Ksess=Dprivsrv(C)C = E_{pub_{srv}}(K_{sess}),\quad K_{sess} = D_{priv_{srv}}(C)
  4. 风险链条(泄露即全部暴露)priv_srv一旦泄露,攻击者对所有历史C执行D_priv即可还原全部会话密钥。
    privsrv→泄露∀C,  Ksess=Dprivsrv(C)priv_{srv} \xrightarrow{\text{泄露}} \forall C,\; K_{sess} = D_{priv_{srv}}(C)

密码套件精简

老特工的工具箱塞满几十种装备——信号枪、飞刀、密码锁、电报机……每件装备还有多种组合方式。装备太多,敌人就有太多可钻的空子;新规定把工具箱精简成五套标准配置,每一套都经过严格审核,没有多余选项可挑。

TLS 1.2时代定义了37个密码套件,算法组合可以随意置换,其中还混着RC4、CBC模式、静态DH等已经被证明不安全的弱项。更糟的是,客户端和服务器要在这么多套件中协商选出一套,协商过程本身就给降级攻击提供了可乘之机——攻击者可以诱导双方选中一套弱算法。

TLS 1.3把套件数量一口气削减到5个,每个套件固定由四部分组成:密钥交换、身份认证、认证加密(AEAD)和密钥派生(HKDF)。密码套件的名字也大幅简化,形如TLS_AES_128_GCM_SHA256,名字中直接隐含了AEAD算法与哈希函数。密钥交换统一为ECDHE,认证只保留RSA-PSS、ECDSA和EdDSA,加密只用AES-GCM或ChaCha20-Poly1305,密钥派生统一走HKDF——没有弱项可选,降级攻击自然失去土壤。

工具箱精简后,每一件装备都是经过考验的精锐,没有杂牌工具可以被调包。套件少了,协商简单了,安全反而更坚固——这就是“少即是多”的密码学版本。

Suite1.3={KEX:  ECDHE,  AUTH:  RSA-PSS/ECDSA,  AEAD:  AES-GCM/ChaCha20,  HKDF:  SHA-256}Suite_{1.3} = \{ KEX{:}\; ECDHE,\; AUTH{:}\; RSA\text{-}PSS/ECDSA,\; AEAD{:}\; AES\text{-}GCM/ChaCha20,\; HKDF{:}\; SHA\text{-}256 \}
TLS 1.3的每个密码套件都是“密钥交换 + 身份认证 + 认证加密 + 密钥派生”四件套的固定组合,缺一不可、不可替换。
  1. KEX(密钥交换)负责生成会话密钥的方式,TLS 1.3统一使用ECDHE或DHE临时密钥交换,保证前向安全。
    KEX:  ECDHEKEX{:}\; ECDHE
  2. AUTH(身份认证)验证服务器(和可选客户端)身份的方式,只保留RSA-PSS、ECDSA和EdDSA签名算法。
    AUTH:  RSA-PSS/ECDSAAUTH{:}\; RSA\text{-}PSS/ECDSA
  3. AEAD(认证加密)同时提供机密性和完整性保护的加密模式,TLS 1.3只接受AES-GCM与ChaCha20-Poly1305。
    AEAD:  AES-GCM/ChaCha20AEAD{:}\; AES\text{-}GCM/ChaCha20
  4. HKDF(密钥派生函数)从共享密钥派生出加密密钥、IV等子密钥的标准方法,统一使用HKDF配合SHA-256/384。
    HKDF:  SHA-256HKDF{:}\; SHA\text{-}256

安全性能提升

新式接头标准推行后,情报网络的整体效率焕然一新:接头次数减少一半,暗号本全部一次性使用,装备清单固定。老特工们连培训手册都薄了一半——速度和安全同时上了一个台阶。

TLS 1.3的综合效益体现在两个维度。速度上,握手从2-RTT降到1-RTT,配合0-RTT模式甚至可以实现零额外往返;安全上,所有默认套件强制前向安全,长期密钥泄露的风险被彻底隔离,静态RSA、RC4、CBC等历史弱项一扫而空。

用数字说话:假设网络往返RTT固定,TLS 1.2握手耗时约2×RTT,TLS 1.3为1×RTT,延迟降低约50%。若启用0-RTT,相比1-RTT还能再省一个RTT。这种提升直接传导到上层应用——HTTPS网页首字节时间显著缩短,QUIC/HTTP/3原生复用TLS 1.3的握手成果,CDN边缘节点每秒可处理的握手数量大幅上升。

接头效率提升一倍,安全底线反而更高。TLS 1.3用一次握手、一把新锁、一套精简装备,让整个互联网的加密通信驶入了快车道。

Simp=D1.2−D1.3D1.2×100%S_{imp} = \frac{D_{1.2} - D_{1.3}}{D_{1.2}} \times 100\%
性能提升百分比 =(旧握手耗时 − 新握手耗时)÷ 旧握手耗时 × 100%。2-RTT变1-RTT,理论上限是50%的延迟下降。
  1. D_1.2(TLS 1.2握手耗时)包含2次网络往返的总握手延迟,约等于2×RTT。
    D1.2≈2×RTTD_{1.2} \approx 2 \times RTT
  2. D_1.3(TLS 1.3握手耗时)包含1次网络往返的总握手延迟,约等于1×RTT。
    D1.3≈1×RTTD_{1.3} \approx 1 \times RTT
  3. S_imp(性能提升百分比)新旧握手耗时的差值占旧耗时的比例,代入数值可得约50%。
    Simp=2×RTT−1×RTT2×RTT×100%=50%S_{imp} = \frac{2 \times RTT - 1 \times RTT}{2 \times RTT} \times 100\% = 50\%

AI 应用场景

CDN边缘节点加速

阶段:模型服务与API网关部署

解决的问题:AI模型API通常通过CDN边缘节点提供推理服务。传统TLS 1.2握手需要2-RTT,每次新连接都有额外延迟;对大量幂等的健康检查、模型元数据GET请求,握手开销占比很高。TLS 1.3的0-RTT模式让客户端在第一个包中直接携带请求,首字节延迟趋近于零。

具体案例:某AI推理平台在全球部署边缘节点,启用TLS 1.3 + 0-RTT后,客户端首次请求的握手延迟从约100ms降至接近0ms(仅剩服务器处理时间),健康检查与缓存刷新类接口的响应速度提升约40%。

金融API安全网关

阶段:数据加密传输与合规审计

解决的问题:金融交易接口对历史数据保密性要求极高。静态RSA密钥交换模式下,一旦服务器私钥在未来某天泄露,历史交易记录可能被回溯解密。TLS 1.3强制ECDHE临时密钥交换,保证每次会话密钥独立且用完即焚。

具体案例:某银行风控系统升级TLS 1.3后,虽然在性能上只提升了约15%(原本网络延迟占主导),但安全审计要求从“私钥泄露=历史交易裸奔”变为“私钥泄露仅影响当前信任关系”,顺利通过了更严格的合规审查。

Python 演示

python57 行
"""TLS 1.3 握手模式简化模拟器(教学用) 演示 1-RTT 与 0-RTT 两种握手模式的消息流与延迟差异。仅用于教学示意,非真实密码学实现。""" import timefrom dataclasses import dataclass, field  @dataclassclass Host:    name: str    outbox: list = field(default_factory=list)    inbox: list = field(default_factory=list)     def send(self, peer, msg):        self.outbox.append(msg)        peer.inbox.append(msg)        print("[%s] -> [%s] %s" % (self.name, peer.name, msg))  def measure_latency(rtt_ms, rtt_rounds, crypto_ms=5):    """计算握手延迟: 网络往返占用 + 本地加解密耗时"""    return rtt_ms * rtt_rounds + crypto_ms  def simulate(mode, rtt_ms=50):    client = Host("客户端")    server = Host("服务端")    print("=== 模式: %s 握手 ===" % mode)     if mode == "1-RTT":        client.send(server, "ClientHello(密钥交换参数)")        server.send(client, "ServerHello(算法选择+证书+密钥参数)")        client.send(server, "ClientFinished(握手验证)")        server.send(client, "ServerFinished(握手验证)")        delay = measure_latency(rtt_ms, 1)        rounds = 1    elif mode == "0-RTT":        client.send(server, "ClientHello+Early Data(预共享密钥+应用数据)")        server.send(client, "ServerFinished(握手验证+接受数据)")        delay = measure_latency(rtt_ms, 0)        rounds = 0    else:        raise ValueError("未知模式")     print("消息数: %d, 往返: %d, 估算延迟: %d ms (单程RTT=%d ms)"          % (len(client.outbox) + len(server.inbox), rounds, delay, rtt_ms))    return delay  if __name__ == "__main__":    d1 = simulate("1-RTT")    d0 = simulate("0-RTT")    print("\n0-RTT 相比 1-RTT 节省: %d ms (%.0f%%)"          % (d1 - d0, (d1 - d0) / d1 * 100))
目的:用两个主机对象模拟TLS 1.3的1-RTT与0-RTT握手消息流,并对比两种模式下握手延迟的差异,帮助理解文章核心概念。
  1. def measure_latency(rtt_ms, rtt_rounds, crypto_ms=5):握手延迟的计算公式,网络往返次数是关键变量。
  2. client.send(server, "ClientHello(密钥交换参数)")客户端发出第一条握手消息,携带密钥交换参数。
  3. delay = measure_latency(rtt_ms, 1)1-RTT模式只计1次网络往返,对应TLS 1.3默认握手。
  4. delay = measure_latency(rtt_ms, 0)0-RTT模式网络往返为0,只算本地计算与服务器处理时间。
  5. if __name__ == "__main__":Python的标准入口写法,保证脚本可直接运行。

常见误区

误区0-RTT就是零延迟,客户端一发请求服务器立刻返回结果,完全没有等待时间。

正解0-RTT确实省去了网络往返,但服务器仍然需要时间解密Early Data、校验重放标记并处理业务逻辑。这部分本地处理时间不可能为零。更关键的是,0-RTT有重放风险,只能用于幂等请求——像“把快递放在门口”这种丢了可以重发的动作,而不是“转账100元”这种不能重复的操作。

为何常见:人们看到“0-RTT“就本能地理解为”零延迟”,忽略了RTT只是网络往返时间,而不包括服务器计算时间。

误区有了前向安全,密文就永远无法被破解,相当于把锁换成了“绝对打不开”的锁。

正解前向安全保护的不是“当前这封信”,而是“过去的信”。它的核心在于会话密钥用完即焚,即使未来某天服务器长期私钥泄露,攻击者也无法回溯解密历史流量。但攻击者仍可能通过暴力破解、侧信道等方式攻击当前正在使用的会话——前向安全不是万能保险箱。

为何常见:把“历史数据安全”误解成“数据绝对安全”,混淆了长期密钥与短期会话密钥的不同职责。

误区TLS 1.3移除了所有RSA相关算法,RSA已经彻底退出历史舞台。

正解TLS 1.3废除的是“RSA密钥交换”(静态RSA),也就是用RSA公钥加密会话密钥的旧机制。但RSA签名(RSA-PSS)仍然被保留并广泛用于服务器身份认证——相当于特工不再把暗号本寄存在对方手里,但身份证(签名)照用不误。

为何常见:看到新闻说“TLS 1.3抛弃RSA”就以为是全线弃用,没有区分RSA的“加密”和“签名”两种不同用途。

误区TLS 1.2有37个套件可选,TLS 1.3只剩5个,选择变少了是不是安全能力变弱了?

正解恰恰相反。套件过多意味着协商逻辑复杂、弱算法可能导致降级攻击,攻击者会想尽办法诱导双方选中老弱算法。TLS 1.3固定5个全部经过验证的强套件,没有弱项可选,反而堵死了协商环节的漏洞。就像工具箱里全是精良装备,就不需要担心随手抓到一把生锈的刀。

为何常见:直觉上认为“选项越多越灵活越好”,忽略了安全领域“攻击面”与选项数量成正比。

面试题

Q1. TLS 1.3默认完成一次握手需要几个网络往返?

单选题 · easy

  • A.0个往返
  • B.1个往返← 正确答案
  • C.2个往返
  • D.3个往返

答案:B。TLS 1.3把密钥协商和身份认证并行处理,握手消息从七条精简到四条,只需1个网络往返(1-RTT)。0个往返是0-RTT会话恢复场景,2个往返是TLS 1.2的旧水平。好比新接头流程一次碰面完成全部确认,而老流程要来回两趟。

Q2. 0-RTT模式依赖哪种机制实现会话快速恢复?

单选题 · easy

  • A.静态RSA证书
  • B.预共享密钥← 正确答案
  • C.证书吊销列表
  • D.数字签名

答案:B。0-RTT依赖首次握手后颁发的预共享密钥(PSK)凭证,客户端在后续连接的ClientHello中直接携带PSK和应用数据,服务器无需等待确认即可处理。静态RSA在TLS 1.3已被移除,证书吊销列表和数字签名都不承担会话恢复职责。

Q3. 下列哪条握手消息用于确认双方握手参数未被篡改?

单选题 · easy

  • A.ClientHello
  • B.ServerHello
  • C.Finished← 正确答案
  • D.Certificate

答案:C。Finished消息携带对全部握手消息的哈希验证值,双方收到后计算比对,确保协商过程没有被中间人篡改。ClientHello和ServerHello只负责发起协商和选择参数,Certificate用于身份认证,都不具备完整性验证功能。

Q4. 前向安全的核心思想是什么?

单选题 · mid

  • A.加密算法不可破解
  • B.会话密钥用完即焚← 正确答案
  • C.密码长度足够长
  • D.证书有效期足够短

答案:B。前向安全的核心是“用完即焚”:每次会话使用独立的临时密钥,握手完成后立即销毁,即使长期私钥未来泄露,也无法回溯解密历史流量。算法是否可破解、密码多长、证书多久过期都与前向安全无关。就像烧掉的暗号本永远无法复原。

Q5. 静态RSA密钥交换被TLS 1.3弃用的主要原因是什么?

单选题 · mid

  • A.加解密计算速度太慢
  • B.私钥泄露可解密全部历史流量← 正确答案
  • C.不支持数字证书
  • D.密钥长度不符合规范

答案:B。静态RSA用服务器长期公钥加密会话密钥,私钥一旦泄露,攻击者可以回溯解密所有用该密钥对保护的历史会话密文——没有前向安全。速度、证书支持和密钥长度都不是弃用的关键原因。这相当于十年不换的暗号本,一旦被复印,过去所有密信全部暴露。

Q6. 在ECDHE密钥交换中,临时私钥是如何产生的?

单选题 · mid

  • A.由服务器统一分配
  • B.客户端和服务器各自随机生成← 正确答案
  • C.由证书私钥直接派生
  • D.由CA中心统一签发

答案:B。ECDHE中客户端和服务器各自独立随机生成临时私钥a和b,再计算公钥A和B并交换,最终各自计算出相同的共享密钥K。没有任何一方能单独决定K的值,证书私钥和CA中心都不参与临时密钥的生成。双方各出一半参数,才共同铸成这把临时锁。

Q7. TLS 1.3的密码套件固定由哪些组件构成?

多选题 · mid

  • A.密钥交换← 正确答案
  • B.身份认证← 正确答案
  • C.认证加密AEAD← 正确答案
  • D.HKDF密钥派生← 正确答案

答案:ABCD。TLS 1.3每个密码套件都是四件套固定组合:密钥交换(ECDHE)、身份认证(RSA-PSS/ECDSA)、认证加密(AEAD如AES-GCM)和HKDF密钥派生。四者缺一不可、不可替换,这正是套件精简后没有协商降级空子的原因。没有证书吊销这一组件。

Q8. 0-RTT重放攻击的本质是什么?

单选题 · hard

  • A.攻击者伪造服务器身份
  • B.同一份Early Data被服务器重复处理← 正确答案
  • C.攻击者破解了会话密钥
  • D.客户端私钥意外泄露

答案:B。0-RTT的Early Data随第一个握手包发出,没有等待服务器确认,攻击者可以截获后向服务器原样重发多次,导致重复下单、重复扣费等后果。本质是“同一份数据被重复处理”。伪造服务器身份属于中间人攻击,破解会话密钥属于密钥破解问题,都与重放无关。

Q9. 下列哪些算法或模式在TLS 1.3中被移除?

多选题 · hard

  • A.RC4← 正确答案
  • B.CBC模式← 正确答案
  • C.静态DH密钥交换← 正确答案
  • D.ECDHE

答案:ABC。TLS 1.3移除了RC4流密码、CBC分组模式和静态DH密钥交换,原因是这些算法已被证明存在严重安全缺陷或不具备前向安全。ECDHE是TLS 1.3唯一保留并强制的密钥交换方式,属于正确答案中的“幸存者”,因此不选。

Q10. 假设网络RTT固定为50ms,TLS 1.2握手(2-RTT)相比TLS 1.3握手(1-RTT)延迟降低约多少?

单选题 · extreme

  • A.约25%
  • B.约33%
  • C.约50%← 正确答案
  • D.约75%

答案:C。TLS 1.2握手延迟约2×50=100ms,TLS 1.3约1×50=50ms,节省50ms;50÷100×100%=50%,因此降低约50%。若同时考虑本地加解密时间(两边相同),实际降幅会略低于50%,但理论边界就是50%。这也是TLS 1.3常被宣传为“握手快一倍”的数字来源。