在 TLS 中应该使用什么密钥交换机制?

信息安全 Web应用程序 加密 tls 密钥交换
2021-08-13 00:17:05

在 TLS 中可以使用许多密钥交换机制。其中有RSA、ECDH_ECDSA、ECDHE_ECDSA、ECDH_RSA、ECDHE_RSA等。其中哪一个在密码学上更安全,可用于保护与网站的连接?

1个回答

仅当服务器密钥类型和证书匹配时,您才可以使用密钥交换(作为密码套件的一部分)。要详细了解这一点,让我们看一下TLS 1.2 规范中定义的密码套件每个密码套件都定义了密钥交换算法,以及随后使用的对称加密和完整性检查算法;我们在这里专注于密钥交换部分。

  • RSA:密钥交换通过使用服务器公钥加密一个随机值(由客户端选择)来工作。这要求服务器公钥是 RSA 密钥,并且服务器证书不禁止加密(主要通过“密钥使用”证书扩展:如果该扩展存在,它必须包含“keyAgreement”标志)。

  • DH_RSA:密钥交换是静态的 Diffie-Hellman:服务器公钥必须是 Diffie-Hellman 密钥;此外,该证书必须由本身使用 RSA 密钥的证书颁发机构颁发(CA 密钥是用于签署服务器证书的密钥)。

  • DH_DSS:与 DH_RSA 类似,只是 CA 使用了 DSA 密钥。

  • DHE_RSA:密钥交换是短暂的 Diffie-Hellman:服务器动态生成 DH 公钥并将其发送给客户端;服务器还签署它发送的内容。对于 DHE_RSA,服务器公钥必须是 RSA 类型,并且其证书必须适合签名(密钥使用扩展,如果存在,必须包含 digitalSignature 标志)。

  • DHE_DSS:与 DHE_RSA 类似,只是服务器密钥的类型为 DSA。

  • DH_anon:没有服务器证书。服务器使用它可能动态生成的 Diffie-Hellman 密钥。“匿名”密码套件容易受到模拟攻击(包括但不限于“中间人”),因为它们缺乏任何类型的服务器身份验证。一般来说,您不应使用“匿名”密码套件。

使用椭圆曲线加密的密钥交换算法在另一个 RFC中指定,并提出以下建议:

  • ECDH_ECDSA:与 DH_DSA 类似,但具有椭圆曲线:服务器公钥必须是 ECDH 密钥,在 CA 颁发的证书中,该 CA 本身使用 ECDSA 公钥。

  • ECDH_RSA:与 ECDH_ECDSA 类似,但颁发 CA 有一个 RSA 密钥。

  • ECDHE_ECDSA:服务器发送动态生成的EC Diffie-Hellman密钥,并用自己的密钥签名,该密钥必须为ECDSA类型。这等效于 DHE_DSS,但 Diffie-Hellman 部分和签名部分都具有椭圆曲线。

  • ECDHE_RSA:与 ECDHE_ECDSA 类似,但服务器公钥是 RSA 密钥,用于签署临时椭圆曲线 Diffie-Hellman 密钥。

  • ECDH_anon:一个“匿名”密码套件,具有动态椭圆曲线 Diffie-Hellman。


那么,您应该为网站选择什么?您的主要限制是:

  • 您需要一个大多数客户端都支持的密码套件;在实践中,这排除了椭圆曲线密码学(椭圆曲线非常酷,但在该领域还没有得到很好的支持——考虑到根据gs.statcounter,截至 2011 年 9 月,40% 的客户端系统仍然使用 Windows XP,并且几乎 5% 使用 IE 7.0)。

  • 您需要一个与您的服务器密钥类型和证书兼容的密码套件。反过来,这取决于 CA 接受的内容(向您出售证书的 CA)。99.9% 的时间,这意味着 RSA。每个人都使用 RSA。证书中的 Diffie-Hellman 密钥和 DSA 签名曾经由 NIST(处理此类事务的美国联邦机构)推广,因为 RSA 有一项专利;但该专利于 2000 年到期。Diffie-Hellman(作为证书的一部分)由ANSI X9.42指定,该标准不是免费的(因此开源空闲时间开发人员不愿意实施它),也不是很清楚。所以没有人真正在证书中使用 Diffie-Hellman。DSA 得到更广泛的支持(其定义标准 是免费的并且可读性很强),但与 RSA 相比,还没有达到非轶事的地步。

  • 您不想使用“anon”套件,因为这对主动攻击者不安全,并且大多数客户端浏览器默认禁用“anon”套件。

所以你的选择基本上是在“RSA”和“DHE_RSA”之间。后者可能具有稍高的计算成本,尽管您需要每秒至少有几百个新连接才能真正看到差异(我坚持“新”:因为 TLS 包括一个可以建立在先前连接的密钥交换,使用非对称加密的实际密钥交换仅在最后一分钟每个新客户端浏览器发生一次)。因此,在实践中,RSA 和 DHE_RSA 之间的 CPU 负载没有可测量的差异。

DHE_RSA 提供了一种称为Perfect Forward Secrecy的东西,这是以下属性的一个华丽名称:如果您的服务器被彻底黑客攻击,以至于攻击者获得了服务器私钥的副本,那么他也将能够解密过去如果这些会话使用 RSA,则 TLS 会话(他记录),而如果这些会话使用 DHE_RSA,他将无法这样做。在实践中,如果攻击者可以窃取您的私钥,那么他可能会读取您站点数据库中的 10000 个信用卡号码,因此他甚至没有理由费心记录和解密之前的会话,因为这只会产生额外的十几个数字左右。PFS 在数学上很优雅,但被夸大了。如果它仍然是一个漂亮的首字母缩略词,并且可以给思想薄弱的人留下深刻的印象,作为深思熟虑的公共关系活动的一部分。


总结:使用 DHE_RSA。