应用密码学

期末复习

这是一些复习笔记的整理,包括了平时做的线上检测题。
但是看了一下往年题感觉还是不太够有效。


RSA与Bleichenbacher攻击

今天老师在讲对RSA的选择密文攻击时,提到了这个2015年对TLS1.3的攻击实例,并给大家介绍了这篇论文[1]Security of TLS 1.3。
今天课上一口气讲了三种公钥密码算法,还有EG密钥协商算法~
就会发现,加减乘除都不能很好地保密信息,而模幂可以很好地将指数位置上放的信息保护起来。
最直观的展现就是EG密钥协商算法,这个过程就是利用这种性质保护了信息,可以发现,非对称加密算法都是在尝试利用这个特点。
而求逆运算——一种非线性的运算,则被广泛应用在对称加密算法中。
相关笔记:
TLS的wireshark抓包分析

Bleichenbacher攻击(填充攻击)和RSA的已知密文攻击(Known-Ciphertext Attack, KCA)之间存在密切的关系,但它们并不完全相同。让我们先分别解释这两个概念,然后再探讨它们之间的联系。

1. RSA的已知密文攻击(Known-Ciphertext Attack, KCA)

已知密文攻击是一种密码学攻击方法,攻击者的目标是从已知的密文 ( c ) 中恢复出原始的明文 ( m )。在这种攻击中,攻击者假设自己已经获取了一个或多个密文,但不知道对应的明文。攻击者的目标是利用这些密文信息来推断出明文或加密密钥。

RSA的已知密文攻击原理

RSA加密的基本公式是:
[ c = m^e \mod N ]
其中:

  • ( c ) 是密文。
  • ( m ) 是明文。
  • ( e ) 是公钥指数。
  • ( N ) 是模数。

在已知密文攻击中,攻击者已知 ( c )、( e ) 和 ( N ),但不知道 ( m )。攻击者的目标是找到一种方法来解密 ( c ) 或推断出 ( m )。

攻击方法

  • 暴力破解:尝试所有可能的明文 ( m ),直到找到一个满足 ( c = m^e \mod N ) 的 ( m )。这种方法在密钥长度较短时可能有效,但在现代加密中,密钥长度通常较长,暴力破解是不现实的。
  • 数学分析:利用RSA算法的数学特性来寻找漏洞。例如,如果攻击者能够找到一个整数 ( d ) 使得 ( d \cdot e \equiv 1 \mod \phi(N) ),那么 ( d ) 就是私钥,攻击者可以利用 ( d ) 来解密密文。然而,找到这样的 ( d ) 通常需要分解 ( N ),这在大整数的情况下是非常困难的。

2. Bleichenbacher攻击(填充攻击)

Bleichenbacher攻击是一种针对RSA-PKCS#1 v1.5加密的已知密文攻击,它利用了PKCS#1 v1.5填充机制的弱点。这种攻击的核心在于利用服务器对密文填充的验证行为来逐步推断出明文。

Bleichenbacher攻击原理

在RSA-PKCS#1 v1.5加密中,明文 ( m ) 在加密之前会被添加特定的填充字节,以确保加密后的密文符合一定的格式。填充后的数据格式通常如下:

1
0x00 || 0x02 || 随机填充字节 || 0x00 || 明文

攻击者通过向服务器发送一系列经过篡改的密文,观察服务器对这些密文的响应,逐步缩小明文的可能范围,最终恢复出原始明文。

攻击方法

  1. 截获密文:攻击者截获一个合法的密文 ( c )。
  2. 篡改密文:攻击者对密文 ( c ) 进行篡改,生成一系列新的密文 ( c’ )。
  3. 发送篡改后的密文:攻击者将篡改后的密文 ( c’ ) 发送给服务器,并观察服务器的响应。
  4. 分析服务器响应:服务器对密文的响应通常有两种情况:
    • 有效填充:如果解密后的数据符合填充格式,服务器会返回一个“有效填充”的响应。
    • 无效填充:如果解密后的数据不符合填充格式,服务器会返回一个“无效填充”的响应。
  5. 逐步缩小范围:通过多次篡改密文并观察服务器的响应,攻击者可以逐步缩小明文的可能范围,最终恢复出原始明文。

3. Bleichenbacher攻击与已知密文攻击的关系

Bleichenbacher攻击是一种特定的已知密文攻击,它利用了RSA-PKCS#1 v1.5加密的填充机制的弱点。具体来说,Bleichenbacher攻击是已知密文攻击的一种实现方式,它通过以下方式与已知密文攻击相关联:

攻击目标

  • 已知密文攻击:攻击者的目标是从已知的密文 ( c ) 中恢复出原始的明文 ( m )。
  • Bleichenbacher攻击:攻击者的目标也是从已知的密文 ( c ) 中恢复出原始的明文 ( m ),但它是通过利用PKCS#1 v1.5填充机制的弱点来实现的。

攻击方法

  • 已知密文攻击:攻击者通常需要利用RSA算法的数学特性或暴力破解来恢复明文。
  • Bleichenbacher攻击:攻击者通过篡改密文并观察服务器对填充验证的响应来逐步推断出明文。这种方法利用了服务器在处理密文时的行为特征,而不是直接攻击RSA算法的数学特性。

攻击效率

  • 已知密文攻击:通常需要大量的计算资源,尤其是在密钥长度较长的情况下。
  • Bleichenbacher攻击:在某些情况下,Bleichenbacher攻击可以更高效地恢复明文,因为它利用了服务器的响应行为,而不是直接攻击RSA算法的数学特性。

4. 总结

Bleichenbacher攻击是一种特定的已知密文攻击,它利用了RSA-PKCS#1 v1.5加密的填充机制的弱点。通过篡改密文并观察服务器的响应,攻击者可以逐步缩小明文的可能范围,最终恢复出原始明文。这种攻击方法在实际中非常有效,尤其是在服务器的实现中存在漏洞时。

5. 防御措施

为了防止Bleichenbacher攻击,可以采取以下措施:

  • 使用更安全的加密方案:例如,使用RSA-PKCS#1 v2.0(RSA-OAEP)或ECDHE等更安全的加密机制。
  • 实现安全的填充检查:确保服务器在处理密文时不会泄露任何关于填充有效性的信息。
  • 禁用不安全的密码套件:服务器管理员应禁用所有基于RSA-PKCS#1 v1.5加密的密码套件,仅支持更安全的密码套件。

通过这些措施,可以显著降低Bleichenbacher攻击的风险,从而提高系统的整体安全性。

Bleichenbacher攻击是一种针对RSA-PKCS#1 v1.5加密的已知密文攻击,它利用了PKCS#1 v1.5填充机制的弱点。本文中描述的攻击方式(针对TLS 1.3和QUIC协议的攻击)实际上是基于Bleichenbacher攻击的原理,但将其应用到了跨协议攻击的场景中。让我们详细对比一下Bleichenbacher攻击的原理和本文中的攻击方式。

Bleichenbacher攻击原理

Bleichenbacher攻击的核心在于利用服务器对密文填充的验证行为来逐步推断出明文。以下是Bleichenbacher攻击的详细步骤:

1. PKCS#1 v1.5填充机制

在RSA-PKCS#1 v1.5加密中,明文 ( m ) 在加密之前会被添加特定的填充字节,以确保加密后的密文符合一定的格式。填充后的数据格式通常如下:

1
0x00 || 0x02 || 随机填充字节 || 0x00 || 明文

其中:

  • 0x00 是一个字节的空值。
  • 0x02 是一个固定字节,表示填充类型。
  • 随机填充字节的数量是可变的,但必须至少有8个字节。
  • 最后一个 0x00 是一个分隔符,表示填充部分结束,明文部分开始。

2. 攻击步骤

  1. 截获密文:攻击者截获一个合法的密文 ( c )。
  2. 篡改密文:攻击者对密文 ( c ) 进行篡改,生成一系列新的密文 ( c’ )。具体来说,攻击者选择一个小整数 ( s ),并计算新的密文:
    [
    c’ = c \cdot s^e \mod N
    ]
    其中:
    • ( c ) 是原始密文。
    • ( s ) 是一个小整数。
    • ( e ) 是RSA公钥的指数。
    • ( N ) 是RSA模数。
  3. 发送篡改后的密文:攻击者将篡改后的密文 ( c’ ) 发送给服务器,并观察服务器的响应。
  4. 分析服务器响应:服务器对密文的响应通常有两种情况:
    • 有效填充:如果解密后的数据符合填充格式,服务器会返回一个“有效填充”的响应。
    • 无效填充:如果解密后的数据不符合填充格式,服务器会返回一个“无效填充”的响应。
  5. 逐步缩小范围:通过多次篡改密文并观察服务器的响应,攻击者可以逐步缩小明文的可能范围,最终恢复出原始明文。

本文中的攻击方式

本文描述的攻击方式是将Bleichenbacher攻击的原理应用到了跨协议攻击的场景中,特别是针对TLS 1.3和QUIC协议。以下是本文中攻击方式的详细步骤:

1. 攻击目标

本文的目标是利用旧版TLS协议(如TLS 1.2)中存在的RSA-PKCS#1 v1.5加密漏洞,来攻击不使用RSA-PKCS#1 v1.5加密的协议(如TLS 1.3和QUIC)。

2. 攻击步骤

  1. 截获密文:攻击者截获一个合法的密文 ( c ),该密文是使用旧版TLS协议(如TLS 1.2)中的RSA-PKCS#1 v1.5加密的。
  2. 篡改密文:攻击者对密文 ( c ) 进行篡改,生成一系列新的密文 ( c’ )。具体步骤与Bleichenbacher攻击相同,选择一个小整数 ( s ),并计算新的密文:
    [
    c’ = c \cdot s^e \mod N
    ]
  3. 发送篡改后的密文:攻击者将篡改后的密文 ( c’ ) 发送给旧版TLS服务器,并观察服务器的响应。
  4. 分析服务器响应:服务器对密文的响应通常有两种情况:
    • 有效填充:如果解密后的数据符合填充格式,服务器会返回一个“有效填充”的响应。
    • 无效填充:如果解密后的数据不符合填充格式,服务器会返回一个“无效填充”的响应。
  5. 逐步缩小范围:通过多次篡改密文并观察服务器的响应,攻击者可以逐步缩小明文的可能范围,最终恢复出原始明文。
  6. 利用恢复的明文:攻击者利用恢复的明文来伪造签名或冒充服务器。例如,在TLS 1.3中,攻击者可以利用恢复的明文来伪造CertificateVerify消息;在QUIC中,攻击者可以利用恢复的明文来伪造SCFG(服务器配置)消息。

本文中的攻击方式与Bleichenbacher攻击的对比

特点 Bleichenbacher攻击 本文中的攻击方式
攻击目标 从已知的密文 ( c ) 中恢复出原始明文 ( m ) 利用旧版TLS协议中的RSA-PKCS#1 v1.5加密漏洞,攻击TLS 1.3和QUIC协议
攻击方法 篡改密文并观察服务器对填充验证的响应 篡改密文并观察服务器对填充验证的响应,利用恢复的明文伪造签名或冒充服务器
攻击效率 通常需要多次篡改和响应观察 依赖于旧版TLS协议的实现和服务器响应速度,可能需要较长时间
攻击范围 主要针对RSA-PKCS#1 v1.5加密 跨协议攻击,涉及旧版TLS协议和新协议(如TLS 1.3和QUIC)
防御措施 使用更安全的加密方案(如RSA-PKCS#1 v2.0或ECDHE) 禁用旧版TLS协议,使用不同的密钥和证书,确保新协议的安全性

总结

本文中的攻击方式实际上是Bleichenbacher攻击的一种扩展应用。它利用了旧版TLS协议中存在的RSA-PKCS#1 v1.5加密漏洞,通过篡改密文并观察服务器的响应,逐步恢复出明文,进而伪造签名或冒充服务器。这种攻击方式强调了向后兼容性带来的安全风险,尤其是在新协议(如TLS 1.3和QUIC)中,即使这些协议本身不使用RSA-PKCS#1 v1.5加密,但旧版协议的共存仍然可能导致安全问题。

为了防止这种攻击,建议采取以下措施:

  • 禁用旧版TLS协议:服务器管理员应禁用所有基于RSA-PKCS#1 v1.5加密的密码套件,仅支持更安全的协议(如TLS 1.3)。
  • 使用不同的密钥和证书:为不同协议版本和密码套件使用不同的密钥和证书,以减少密钥重用带来的风险。
  • 实现安全的填充检查:确保服务器在处理密文时不会泄露任何关于填充有效性的信息。
  • 客户端验证:客户端应严格验证服务器提供的证书,确保其符合预期的协议版本和用途。

文献:

[1]:Jager, T., Schwenk, J., & Somorovsky, J. (2015). On the Security of TLS 1.3 and QUIC Against Weaknesses in PKCS#1 v1.5 Encryption. In Proceedings of the 22nd ACM SIGSAC Conference on Computer and Communications Security (pp. 1058-1069). Denver, Colorado, USA: ACM. https://doi.org/10.1145/2810103.2813657


应用密码学
https://47.108.189.123/2025/04/23/课程心得/应用密码学/
Author
Dong
Posted on
April 23, 2025
Licensed under