了解原因需要许多步骤,我将尝试指导您完成每个步骤。
1) 正确使用加密...
使用 RSA 算法,Alice 和 Bob 可以共享他们的公钥(public_a,public_b)并保留他们的私钥(private_a,private_b)。Alice 可以直接向 Bob 发送经过 private_a 加密的消息,Bob 可以通过 public_a 对其进行解密。他们仍然可以通过不安全的网络进行通信,根本不需要 Diffie-Hellman 密钥交换。
那部分是完全错误的。您在这部分所做的是签名,而不是加密。由于 public_key_a 是公开的,因此您的消息根本不会被加密。而不是这样做,A 应该使用 public_key_b 加密消息,然后 B 可以使用 private_key_b 解密它们。由于 private_key_b 只有 B 知道,所以 A 知道只有 B 可以解密它。
数字签名证明消息来自特定的人。加密证明只有您、密钥持有者和加密消息的人、消息发送者知道该消息。使用非对称加密时,您需要同时具有加密和签名。加密以保护消息的机密性和签名以证明您是发送此消息的人。
但是,还有更多……例如,您仍然需要防止重放攻击。
2) Bob 通常没有公钥
假设 Alice (A) 是服务器,Bob (B) 是客户端。通常客户端没有公钥。例如,您知道公钥吗?答案很可能是否定的。因此,Bob 可以接收来自 Alice 的消息并验证它们是否真的来自 Alice,但 Alice 不能确定它从 Bob 那里收到的任何东西真的来自 Bob。
这个问题是我们添加像 Diffie-Hellman 这样的密钥交换协议的根本原因之一。
3) RSA 仅限于一个区块。
有一种用于加密长消息的技术,称为密码块链接。遗憾的是,这种技术不能与 RSA 一起使用。并不是说这完全不可能,而是没有人知道我们这样做是否真的安全。因此,它将 RSA 加密限制为一个块。另一方面,像 AES 这样的对称加密算法就像块链的魅力一样,这也是我们使用它们的原因。
进一步阅读:https ://crypto.stackexchange.com/a/126/16369
4) Diffie-Hellman 是一种密钥交换协议
Diffie-Hellman 只是一种“创建和共享”密钥的方法,然后可以将其用于对称加密。Diffie-Hellman 的优势在于创建此密钥的所有对话都可以以纯文本形式进行,并且密钥仍然是私有的。
注意:Diffie-Hellman 不能解决中间人攻击的问题,因为它无法验证相互通信的各方。这个问题是用数字签名解决的。
5) Ephemeral Diffie-Hellman 提供完美的前向保密
Ephemeral Diffie-Hellman 只是一个花哨的名称,表示您在每个会话中都生成新的 Diffie-Hellman 密钥对并且您不存储它们。由于您从不存储它们,因此攻击者永远无法检索它们。
有关更多详细信息,请参阅这个非常好的答案:https ://security.stackexchange.com/a/38142/50051
6) Ephemeral Diffie-Hellman 保护您免受重放攻击
使用 Ephemeral Diffie-Hellman 的一个非常好的副作用是它还可以保护您免受重放攻击。由于服务器和客户端在每个会话中都选择一个新的随机私人 DH 密钥,因此您不能从另一个会话重放消息来模拟服务器或客户端。
结论
这是对 TLS 如何工作以及提供安全连接所需的所有这些部分的简要概述。如果没有对称加密,您将无法加密长消息,如果没有非对称加密,您将无法共享加密密钥并提供完美的前向保密。