SSL/TLS 握手对修改的保护程度如何?

信息安全 tls 中间人
2021-08-31 17:08:02

SSL/TLS 握手受到 Finished 消息、主密钥的签名和身份验证哈希以及所有先前握手消息的保护,以防止降级尝试。

考虑一个使用强弱密码套件混合的客户端,它连接到支持同一组密码的服务器。通常,一方或双方都更喜欢强密码,并且连接将被安全地建立。

攻击者需要具备哪些能力才能主动将握手降级为弱密码套件之一?我假设攻击者无法破坏通过 RSA 或 (EC)DH 建立的主密钥。

我认为他们必须至少能够做到以下几点:

  • 计算修改后握手的有效哈希值(例如,删除一些密码套件或更改为无效值),不知道主密钥,也可能不知道原始哈希值(取决于使用的加密方案)
  • 对密文(明文未知)执行这些哈希修改,因为完成的消息是加密的
  • 修改 Finished 消息的加密身份验证标签(因为 SSL/TLS 使用 authenticate-then-encrypt),使其对修改后的握手散列有效,同样不知道原始值。

散列函数的“破坏性如何”,密码必须具有“可塑性”才能实现这种攻击?今天或在可预见的未来(考虑到对 MD5、SHA1、RC4 等的现有攻击)是否有可能对现有的旧密码套件之一进行攻击,除了可能是主密钥的导出版本被攻击者暴力破解?

或者在客户端中启用那些“中等安全”的​​密码套件并依赖握手保护是否安全?

1个回答

在消息中使用的握手消息的“散列”中,是使用PRFFinished计算的,它使用主密钥作为附加参数(在SSL 3.0中计算不同,但仍使用主密钥;36 字节值是一种具有 MD5 和 SHA-1 的 HMAC)。如果攻击者更改了之前的握手消息之一,那么他必须能够相应地修复第一条消息。该消息是第一个被加密的消息。Finished

结果是,即使加密系统非常脆弱,如果攻击者想要简单地了解Finished消息内容,就必须能够在不知道明文的情况下破解它。这必须是在线中断,这意味着他的任何失败都意味着不可能完成握手。因此,即使是 40 位加密也能非常有效地阻止此类攻击。

尽管如此,让我们假设由于某种原因,加密层对攻击者是完全透明的(例如密码套件是TLS_RSA_WITH_NULL_SHA,根本没有加密)。我们的攻击者仍然面临两个巨大的挑战:

  1. MAC 是 HMAC(或 SSL 3.0 中的 HMAC 类型),即使使用 MD5 作为基本函数,也没有已知的攻击(参见this,然后that)。做一个基线,有一个已知的使用 MD4 对 HMAC 的伪造攻击,但即使是那个仍然非常昂贵,因此只是理论上的。

  2. PRF 本身基于大量 HMAC,因此攻击者将很难计算其修改后的Finished. 仅仅对 HMAC 进行伪造攻击是不够的;他必须能够恢复密钥(主密钥)。

值得注意的是,在 TLS 中,Finished消息长度为 12 个字节(SSL 3.0 为 36 个字节),而主密钥长度为 48 个字节。这意味着从第一条Finished消息中恢复完整的主密钥在数学上是不可能的,无论 PRF 有多弱。

为了能够破坏握手完整性,我们必须假设 PRF 与自身之间的交互非常奇怪,因为 PRF 用于计算应用于 PRF 生成的Finished内容的加密和 MAC 密钥。这看起来不可信。或者,突破密钥交换机制本身。密钥交换(RSA、DH...)看起来是唯一不荒谬的攻击路径(据我们所知)。