我正在参加信息安全课,我在网上偶然发现了这个概念,这引起了我的兴趣。我还看了一些解释这个概念的网站和维基百科,以及stackoverflow上的一些帖子,但我仍然感到困惑。根据我的理解,在典型的HTTPS公钥交换中,浏览器和服务器与密钥一起创建会话密钥......如果有人获得了派生会话密钥的私钥,他们可以看到所有数据在这种联系之间发送,即使在过去。
我的理解是,使用PFS,即使以加密形式也不会发送“会话密钥”。它保密,因此即使有人找到私钥,他们也无法访问过去的加密记录信息。这是对的吗?
我也想知道,如果我参与PFS交换,请打电话给我“A”,服务器“B”,PFS应该处理这样一个事实:如果我的密钥被泄露,A和B的谈话就不会成为因为他们不知道会话密钥而受到损害。但是,如果我的密钥实际上已经受到损害,那么“B”如何认证我为“A”......例如。如何使用我的密钥尝试访问数据,知道我(A)或其他用户(C)之间的区别。
答案 0 :(得分:37)
我非常喜欢Robert Love给出的Quora答案:http://www.quora.com/What-is-perfect-forward-secrecy-PFS-as-used-in-SSL
让我们看看密钥交换在常见的非短暂情况下是如何工作的。 而不是像Diffie-Hellman那样使用一个实际的例子,我将会这样做 给出一个数学很简单的通用例子:
Alice(客户)希望与Bob(服务器)交谈。
Bob拥有私钥X和公钥Y. X是秘密的,Y是公开的。
Alice生成一个大的随机整数M.
Alice使用Y加密M并将Y(M)发送给Bob。
Bob使用X解密Y(M),产生M。
Alice和Bob现在都拥有M并将其用作他们同意用于SSL会话的任何密码的密钥 - 例如,AES。
非常简单,对吧?当然,问题是,如果有人发现X,那么每一次通信都会受到损害:X让攻击者解密Y(M),产生M.让我们看看这个场景的PFS版本:
Alice(客户)希望与Bob(服务器)交谈。
Bob生成一组新的公钥和私钥,Y'和X'。
鲍勃发送Y'爱丽丝。Alice生成一个大的随机整数M.
Alice使用Y'加密M并将Y'(M)发送给Bob。
Bob使用X'解密Y'(M),产生M。
Alice和Bob现在都拥有M并将其用作他们同意用于SSL会话的任何密码的密钥 - 例如,AES。
(X和Y仍然用于验证身份;我将其遗漏。)
在第二个例子中,X不用于创建共享密钥,因此即使X被破坏,M也是不可发现的。但你可能会说,你只是把问题推到了X'如果X'变得众所周知但我说,这就是天才。假设X'永远不会重复使用,永远不会存储,这是获得X'是指对手在通信时是否可以访问主机的内存。如果您的对手具有此类物理访问权限,那么任何类型的加密都不会给您带来任何好处。而且,即使X'在某种程度上被妥协,它只会揭示这种特殊的沟通。
那是PFS。
答案 1 :(得分:9)
在非PFS会话中,浏览器决定会话密钥(或者更确切地说是从中派生密钥),并使用RSA对其进行加密,RSA公钥是从属于服务器的证书中获取的。该证书还用于验证服务器。然后,服务器使用其私钥(您称之为主密钥)来解密会话密钥。 与服务器的所有连接都使用不同的会话密钥,但是如果您拥有主密钥,则可以将其全部用于服务器的方式。 在PFS中,您使用Diffie-Hellman等算法,其中不使用主密钥。在这种连接中,主密钥用于验证算法的参数。在参数达成一致后,密钥交换使用这些参数和双方的秘密进行。参数不是秘密的,并且在建立会话密钥(临时)之后,各方使用的秘密是丢弃的。这样,如果您发现主密钥,则无法发现会话密钥。但是,如果获得密钥,则可以将其作为服务器,并且证书不会失效。 要了解有关Diffie-Hellman的更多信息。
答案 2 :(得分:0)
您为每条消息生成一个新的公钥,并将真正的永久公钥仅用于身份验证
其他答案中提到了这一点,但我只想提供一个更易于大脑解析和上下文的版本。
你可以用某人的公钥做两件事:
在许多方面,身份验证是更关键/成本更高的步骤,因为要知道给定的公钥属于某人,同时避免中间人攻击,您需要采取以下步骤:
然而,生成新密钥的成本相对较低。
因此,一旦您完成了这个代价高昂的初始密钥验证步骤,您现在就可以:
收到并阅读消息后,他们会立即删除该临时私钥和解密后的消息。
所以现在如果他们的计算机被黑客入侵并且永久私钥泄露,攻击者通过网络捕获的旧加密消息都无法解密,因为临时密钥用于加密它们,而且这种情况已经很久了已删除。
未来的消息很容易受到 MITM 的影响,但是如果他们在泄漏后没有注意到并更改其永久密钥。