完美的前向保密(PFS)如何运作

时间:2013-12-10 21:45:44

标签: https cryptography public-key-encryption

我正在参加信息安全课,我在网上偶然发现了这个概念,这引起了我的兴趣。我还看了一些解释这个概念的网站和维基百科,以及stackoverflow上的一些帖子,但我仍然感到困惑。根据我的理解,在典型的HTTPS公钥交换中,浏览器和服务器与密钥一起创建会话密钥......如果有人获得了派生会话密钥的私钥,他们可以看到所有数据在这种联系之间发送,即使在过去。

我的理解是,使用PFS,即使以加密形式也不会发送“会话密钥”。它保密,因此即使有人找到私钥,他们也无法访问过去的加密记录信息。这是对的吗?

我也想知道,如果我参与PFS交换,请打电话给我“A”,服务器“B”,PFS应该处理这样一个事实:如果我的密钥被泄露,A和B的谈话就不会成为因为他们不知道会话密钥而受到损害。但是,如果我的密钥实际上已经受到损害,那么“B”如何认证我为“A”......例如。如何使用我的密钥尝试访问数据,知道我(A)或其他用户(C)之间的区别。

3 个答案:

答案 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,然后您使用该临时密钥加密您的消息

收到并阅读消息后,他们会立即删除该临时私钥和解密后的消息。

所以现在如果他们的计算机被黑客入侵并且永久私钥泄露,攻击者通过网络捕获的旧加密消息都无法解密,因为临时密钥用于加密它们,而且这种情况已经很久了已删除。

未来的消息很容易受到 MITM 的影响,但是如果他们在泄漏后没有注意到并更改其永久密钥。