我正在参加信息安全课程,并且在网上偶然发现了这个概念,这引起了我的兴趣。我也看过一些解释这个概念的网站和维基百科,以及关于stackoverflow的一些帖子,但是我仍然感到困惑。据我了解,在典型的HTTPS公钥交换中,浏览器和服务器与密钥一起创建了会话密钥……如果有人获得了派生该会话密钥的私钥,他们可以看到所有的数据。是在此连接之间发送的,即使在过去也是如此。
我的理解是,使用PFS,即使以加密形式也不会发送“会话密钥”。它被保密,这样即使有人找到了私钥,他们也将无法访问过去的加密记录信息。这样对吗?
我还想知道,如果我要参加一个PFS交换,叫我“ A”,而服务器是“ B”,那么PFS应该与这样的事实一起工作:如果我的密钥被泄露,A和B的对话也不会被泄露,因为不知道会话密钥。但是,如果我的密钥实际上已被盗用,那么“ B”如何将我认证为“ A” ...例如它将如何知道我(A)或另一个用户(C)使用我的密钥尝试访问数据之间的区别。
最佳答案
在非PFS会话中,浏览器确定会话密钥(或者更确切地说是从中获取密钥),并使用RSA对其进行加密,并使用从属于服务器的证书中获得的RSA公钥。该证书还用于验证服务器。然后,服务器使用其私钥(您称为主密钥)来解密会话密钥。
与服务器的所有连接都使用不同的会话密钥,但是如果您拥有主密钥,则可以按照服务器的方式将它们全部解决。
在PFS中,您可以使用Diffie-Hellman之类的算法,其中不使用主密钥。在这种连接中,主密钥用于验证算法的参数。商定参数后,将使用这些参数以及双方的秘密进行密钥交换。参数不是秘密的,并且在建立会话密钥之后(短暂的)各方使用的秘密是丢弃器。这样,如果您发现主密钥,则无法发现会话密钥。但是,如果您获得密钥,则可以冒充服务器,并且证书不会失效。
要了解更多信息,请阅读Diffie-Hellman。