如果我理解正确,服务器和浏览器都会在“握手”中验证他们的身份并就加密密钥达成一致。为什么黑客不能只监视网络中的密钥通过?
为什么黑客不能只观察握手、收集数据并通过易于编写的软件运行它?
如果我理解正确,服务器和浏览器都会在“握手”中验证他们的身份并就加密密钥达成一致。为什么黑客不能只监视网络中的密钥通过?
为什么黑客不能只观察握手、收集数据并通过易于编写的软件运行它?
请参阅Thomas Porrin 对 SSL 如何工作的回答的握手部分?有关完整的详细信息,但对于非常简短的答案:
因为会话的第一次握手最终使用非对称加密来加密另一方公钥的对称密钥(确实可以通过数据包嗅探获得),然后另一方使用他们的私钥对其进行解密。这个私钥不在两者之间传输,没有它,解密包含对称密钥的消息非常困难(除非实现或设计缺陷)。
传输对称密钥后,由于存在“共享秘密”密钥,因此可以使用对称密码。
有两种类型的密码学。对称和不对称。
在Symmetric中,双方使用相同的密钥来加密/解密数据。示例包括 AES 算法。如果 MITM 知道客户端和服务器使用的对称密钥,他就可以轻松解密消息。
在Assymetric中,使用了公钥-私钥对。使用非对称密码学获得公共秘密的一种方法如下:
服务器使用 RSA 算法生成一个 pub/pri 密钥对。它将公钥放入证书中并将其发送给客户端。
客户端将生成一个随机的预主密钥,并使用从服务器证书中获取的公钥对其进行加密,并在“客户端密钥交换”消息中发送加密的预主密钥。
然后,服务器将使用与公钥关联的私钥解密加密的消息。
现在服务器和客户端都有相同的预主密钥。他们将使用该值和其他一些随机值(例如在 clientHello 和 serverHello 握手期间以纯文本形式发送的 clientHelloRandom、serverHelloRandom)来派生相同的主密钥。
此主密钥用于派生会话密钥,使用该会话密钥加密/解密应用程序数据。
请注意,MITM 不能冒充客户端,因为合法客户端生成的预主密钥是通过使用公钥加密发送的。MITM 不能解密,只要他不知道私钥,只有服务器知道。(私钥不共享。)因为 MITM 不知道私钥,它也不能冒充服务器.
因此,当使用 TLS_WITH_RSA_AES128_CBC_SHA 之类的密码套件时,RSA 用于生成 pub/pri 密钥对,DSA 用于签署服务器发送的证书,并且一旦对称(相同)主密钥和会话密钥由两者派生客户端和服务器,AES128(对称密钥加密/解密算法)用于加密/解密应用程序数据。
希望这可以澄清。