客户端-服务器加密技术说明(TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,128位密钥)

信息安全 tls AES 密钥交换 diffie-hellman sha256
2021-08-18 12:40:24

我使用https打开了一个网页。

当我查看浏览器 (Firefox) 提供的页面信息时,我看到以下内容:

连接加密:高级加密(TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,128 位密钥)。

我有一个问题——这种加密技术是什么意思?为了理解它,我决定查找它每个部分的数据:

TLS_ECDHE意味着短暂的椭圆曲线 Diffie-Hellman,正如维基百科所说,它允许两方通过不安全的通道建立共享秘密。

如本文所述, RSA用于证明服务器的身份

WITH_AES_128_GCM_SHA256 :如果我理解正确 - AES_128_GCM 是一种提供本页所述的经过身份验证的加密的技术。

SHA256是一种散列算法 - 单向函数。

但现在我试图了解如何将所有这些东西放在一起。它是如何作为一个整体协同工作的,以及为什么以这种方式设置它?

在这个YouTube 视频中, Alice 和 Bob 使用 Diffie-Helman 密钥交换算法来商定他们将使用的密钥(在我们的例子中是 TLS_ECDHE)。建立安全连接还不够吗(除了 Alice 和 Bob 没有做的 RSA 部分)?为什么还有这部分WITH_AES_128_GCM_SHA256存在?

2个回答

非对称密码学

创建 TLS 会话有两个不同的部分。非对称密码学,它是两点之间的公钥交换部分。这就是您在 Alice 和 Bob 示例中看到的。这仅允许为非对称加密/解密交换非对称密钥。这是ECDHE部分。RSA部分描述了用于验证密钥交换签名算法。这也可以通过非对称加密来执行。这个想法是你用你的私钥对数据进行签名,然后对方可以用你的公钥进行验证。

对称密码学

您使用非对称密钥加密对称加密/解密密钥。非对称加密非常慢(相对而言)。你不想不断地用它加密。这就是对称密码学的用途。所以现在我们在AES_128_GCM

  • AES是对称算法
  • 128 是指密钥大小(以位为单位)
  • GCM 是操作模式

那么我们的非对称密钥究竟加密了什么?好吧,我们想基本上加密对称密钥(在本例中为 128 位,16 字节)。如果有人知道对称密钥,那么他们就可以解密我们所有的数据。对于 TLS,对称密钥不会直接发送。一种称为预主密钥的东西被加密并发送出去。从这个值,客户端和服务器可以生成加密和数据完整性所需的所有密钥和 IV。 详细了解 TLS 密钥交换

数据的完整性

在整个过程中以及加密通道都需要数据完整性。正如您在查找 GCM 时所见,操作的加密模式本身提供了被加密数据的完整性。但是,公钥握手本身也必须得到确认。如果中间有人在传输时更改了数据,那么我们怎么知道没有被篡改?这是使用协商哈希函数的实例,SHA256握手的每一部分都被散列在一起,最终的散列与加密的预主密钥一起传输。另一方验证此哈希以确保接收到所有要发送的数据。

正如另一张海报所提到的,SHA256也用于伪随机函数 (PRF)。这就是将双方之间发送的预主密钥扩展为我们加密所需的会话密钥的原因。

对于其他操作模式,每条消息也将使用这种完整性算法进行散列。当数据被解密时,在使用明文之前验证哈希。

对于不同的 TLS 版本,这些派生是如何发生的,这是一个很好的解释。

将所有这些部分放在一起,您就拥有了一种安全的通信方式!


您可以使用 列出 OpenSSL 支持的所有可能的密码openssl ciphers您可以进一步打印任何这些密码套件的详细信息-V

例如:

$ openssl ciphers -V ECDHE-RSA-AES256-GCM-SHA384
          0xC0,0x30 - ECDHE-RSA-AES256-GCM-SHA384 TLSv1.2 Kx=ECDH     Au=RSA  Enc=AESGCM(256) Mac=AEAD
  • 0xC0,0x30表示密码套件的两字节标识符
  • Kx=ECDH表示密钥交换算法
  • Au=RSA 表示认证算法
  • Enc=AESGCM(256) 表示对称加密算法
  • Mac=AEAD 表示使用的消息认证检查算法

没错,ECDHE 被用于密钥交换,而 RSA 被用于验证服务器的身份。但是,您将如何处理交换的密钥?您需要使用某种算法来加密/解密使用该交换密钥的通信。

在这种情况下,在 GCM 模式下使用 128 位 AES。

通常,散列算法(在这种情况下为 SHA256)用于基于散列的消息身份验证代码 (HMAC)。这是为了提供经过身份验证的加密。但是,正如您所提到的,AES-GCM 已经提供了经过身份验证的加密,因此这里不使用它。

从 TLS1.2 开始,密码套件末尾提到的散列算法也用于 TLS 中的伪随机函数 (PRF)。