SSLv3 是如何获得 AES 的?

信息安全 tls AES 密码选择
2021-09-11 20:54:39

IANA 在TLS 参数中维护 TLS 密码套件的注册表TLS 提供TLS_RSA_WITH_AES_128_CBC_SHA,其值为{0x00, 0x2f},并且在 TLS 1.0 及更高版本中可用。AES 密码套件通过RFC 3268添加到 TLS ,2002 年用于 TLS 的 AES 密码套件。

但是,AES 密码套件并未添加到 SSLv3,因为 SSLv3 不受 IETF 的控制。来自RFC 5746,第 4.5 节

虽然 SSLv3 不是 IETF 变更控制下的协议(参见 [SSLv3]),但它是 TLS 的原始基础,并且大多数 TLS 实现也支持 SSLv3。

OpenSSLTLS_RSA_WITH_AES_128_CBC_SHA通过密码提供AES128-SHA(请参阅 OpenSSL 的文档ciphers(1))。AES128-SHA与 SSLv3 via 一起使用s_client,快速的 Wireshark 跟踪显示{0x00, 0x2f}使用了密码套件。

$ openssl s_client -ssl3 -connect google.com:443 -cipher "AES128-SHA"
CONNECTED(00000003)
...
---
Certificate chain
 0 s:/C=US/ST=California/L=Mountain View/O=Google Inc/CN=*.google.com
   i:/C=US/O=Google Inc/CN=Google Internet Authority G2
 1 s:/C=US/O=Google Inc/CN=Google Internet Authority G2
   i:/C=US/O=GeoTrust Inc./CN=GeoTrust Global CA
 2 s:/C=US/O=GeoTrust Inc./CN=GeoTrust Global CA
   i:/C=US/O=Equifax/OU=Equifax Secure Certificate Authority
...
SSL-Session:
    Protocol  : SSLv3
    Cipher    : AES128-SHA
...

我找不到 AES 密码套件在 SSLv3 中有效的参考。我查看了1996 年的 SSL 协议 3.0 版草案、2011 年的 RFC 6101、安全套接字层 (SSL) 协议 3.0 版和2002 年的 RFC 3268、用于 TLS的 AES 密码套件。我什至搜索了用于 AES 和 SSL 的 IETF 工具。

SSLv3 协议涵盖的 AES 密码套件在哪里?

1个回答

SSL 3.0不是标准。实际上,它是“当时网景正在做的事情”。当协议变成标准时,它变成了RFC 2246,又名“TLS 1.0”。

TLS 作者用作源的原始文档后来(很久以后)采用 RFC 格式并成为RFC 6101,其类别为“历史”。历史上的 RFC 在标准阶梯上相当低;它们甚至低于“信息”RFC。在发布该 RFC 之前,打算编写 SSL 库的人们将首先根据 RFC 实现 TLS 1.0,然后遍历 OpenSSL 的源代码并与现有实现进行互操作性测试以提供 SSLv3。

由于 SSLv3 是事实上而非法律上的标准,因此您将找不到指定使用 SSL 3.0 执行 AES 的标准方法的 RFC;根据定义,不可能有这样的标准。充其量,可以想象一个“历史” RFC,它将记录常见做法,即直接使用RFC 3268SSL 3.0 与 TLS 1.0 非常相似,因此从 TLS 1.0 到 SSL 3.0 的 AES 密码套件的反向移植是明确的;作为已经这样做的人(多次!),我可以确认在 SSL 3.0 中获得“正确”的 AES 支持并不难(其中“正确”的意思是:“与现有的 SSL 客户端和服务器一起工作”)。