TLS 1.0 是否比 TLS 1.2 更安全?

信息安全 tls openssl 心血来潮
2021-09-03 17:09:02

我只是想确认一下,我的系统管理员告诉我 TLS 1.0 比 TLS 1.2 更安全,并告诉我我应该继续使用 TLS 1.0...这是准确的吗?

他提到 TLS 1.2 更容易受到攻击,而 TLS 1.0 更安全。并且 Heartbleed 漏洞在 TLS 1.1 中最容易受到攻击。和 TLS 1.2,而不是来自 TLS 1.0。

谢谢!

4个回答

你的管理员弄错了(或者有一些翻译事故)。

TLS 1.1 和 1.2 修复了 TLS 1.0 中的一些问题(即,用于 CBC 加密记录的 IV 的可预测性)。可以在 TLS 1.0 中解决这个问题,但这取决于实现工作的难度。因此,从这个意义上说,TLS 1.1 和 1.2比 TLS 1.0更安全,因为它们更易于安全实施。

所谓的“心脏出血”不是协议缺陷;这是一些OpenSSL版本中存在的实现错误(OpenSSL 是 SSL/TLS 的广泛实现,但肯定不是唯一的)。当一个 OpenSSL 版本有这个 bug 时,它对所有协议版本都有这个 bug,包括 TLS 1.0。因此,当 heartbleed 应用时,它同样适用于 TLS 1.0、TLS 1.1 和 TLS 1.2。当它不适用时,它不适用。

混淆的根源在于您的管理员(或他的消息来源)似乎没有理解或概念化协议实现之间的区别。TLS 1.0 和 TLS 1.2 是相关标准(分别为RFC 2246RFC 5246 )中描述的协议一个协议说明什么时候必须发送什么字节。实现是运行协议的软件OpenSSL 是一种实现。碰巧“heartbleed”错误发生在一个相对较新的协议特性(“heartbeat 扩展”)的实现中,而非常老的 OpenSSL 实现并不知道。因此,非常古老的实现的 OpenSSL 不会遭受心脏出血(尽管他们有其他严重的问题,很老)。同样非常古老的实现根本不知道 TLS 1.1 和 TLS 1.2。因此,在您的管理员心目中,这两个独立的事实合并为一个(但有缺陷的)口头禅,错误地认为心脏出血是 TLS 1.1 和 1.2 的安全问题。

TLS 1.0

TLS 1.0 是对 SSL 3.0 的升级,差异并不显着,但它们足够重要,以至于 SSL 3.0 和 TLS 1.0 不能互操作。

SSL 3.0 和 TLS 1.0 之间的一些主要区别是:

  • 密钥导出函数不同
  • MAC 不同 - SSL 3.0 使用早期 HMAC 的修改,而 TLS 1.0 使用 HMAC。
  • 完成的消息是不同的
  • TLS 有更多警报
  • TLS 需要 DSS/DH 支持

TLS 1.1

TLS 1.1 是对 TLS 1.0 的更新。

主要变化是:

  • 隐式初始化向量 (IV) 被替换为显式 IV,以防止密码块链接 (CBC) 攻击。
  • 填充错误的处理更改为使用 bad_record_mac 警报而不是 decryption_failed 警报来防止 CBC 攻击。
  • IANA 注册管理机构是为协议参数定义的
  • 过早关闭不再导致会话不可恢复。

TLS 1.2

TLS 1.2 基于 TLS 1.1,它包含改进的灵活性。

主要区别包括:

  • 伪随机函数 (PRF) 中的 MD5/SHA-1 组合已替换为密码套件指定的 PRF。
  • 数字签名元素中的 MD5/SHA-1 组合已替换为单个哈希。签名元素包括一个明确指定使用的哈希算法的字段。
  • 对客户端和服务器指定它们将接受哪些散列和签名算法的能力进行了大量清理。
  • 添加了对具有其他数据模式的经过身份验证的加密的支持。
  • TLS 扩展定义和 AES 密码套件被合并。
  • 更严格地检查 EncryptedPreMasterSecret 版本号。
  • 许多要求被收紧
  • verify_data 长度取决于密码套件
  • Bleichenbacher/Dlima 攻击防御的描述已清理。

该答案基于以下来源:

告诉你这件事的人可能不太了解 Heartbleed 的含义:它是一个特定于实现的漏洞(在某些版本的 OpenSSL 中),它与 SSL/TLS 的版本没有真正的关系。

来自http://heartbleed.com/

易受攻击的版本已经存在两年多了,它们已被现代操作系统迅速采用。一个主要的促成因素是 TLS 版本 1.1 和 1.2 随第一个易受攻击的 OpenSSL 版本 (1.0.1) 一起提供,并且由于早期对 TLS 的攻击(例如 BEAST),安全社区一直在推动 TLS 1.2。

这并不是说 TLS 1.1 和 1.2 比 1.0 更容易受到攻击。这只是意味着,旧版本的 OpenSSL 没有该错误,但它们也不支持 TLS 1.1 和 1.2。当升级到较新版本的 OpenSSL 以获得对较新版本 TLS 的支持时(由于旧版本 TLS 的问题),对 OpenSSL 代码库进行了其他更改,包括引入该错误。这与 OpenSSL 开发时间表有关,而不是 TLS 版本。

此后,OpenSSL 已针对此特定问题进行了修复(因此显然建议使用不易受攻击的版本)。

一般来说,较新版本的 TLS 具有安全性改进,特别是 TLS 1.2 支持通常被认为更安全的密码套件。

并且 Heartbleed 漏洞在 TLS 1.1 中最容易受到攻击。和 TLS 1.2,而不是来自 TLS 1.0。

可能是您的管理员混淆了一些事实:确实,Heartbleed 以某种方式连接到 TLS 1.1 和 TLS 1.2。但唯一的联系是,OpenSSL 1.0.1 版不仅增加了对 TLS 1.1 和 TLS 1.2 的支持,还引入了对 Heartbeat 扩展的支持。Heartbleed 错误是由处理此扩展时的实现错误引起的。因此,只有支持 TLS 1.1 和 TLS 1.2 的较新服务器才会受到问题的影响。

Heartbleed 错误现已修复,但对 TLS 1.1 和 TLS 1.2 以及 Heartbeat 扩展的支持仍然存在。此外,其他 TLS 堆栈支持较新的 TLS 版本,但根本不支持 Heartbeat 扩展。