非对称密码学
创建 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
表示使用的消息认证检查算法