【问题标题】:How does perfect forward secrecy (PFS) work完美前向保密 (PFS) 的工作原理
【发布时间】:2013-12-28 15:31:52
【问题描述】:

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

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

我还想知道,如果我参与 PFS 交换,叫我“A”,使用服务器“B”,PFS 应该可以处理这样一个事实,即如果我的密钥被泄露,A 和 B 的对话不会变成妥协,因为他们不知道会话密钥。但是,如果我的密钥实际上已被泄露……例如,“B”如何将我认证为“A”?它如何知道我 (A) 或其他用户 (C) 使用我的密钥尝试访问数据之间的区别。

【问题讨论】:

标签: https cryptography public-key-encryption


【解决方案1】:

我真的很喜欢 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'。

Bob 将 Y' 发送给 Alice。

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。

【讨论】:

  • 也许这是一个愚蠢的问题,但是新密钥 Y' 是否使用 Y 加密传输?还是 Y' 以纯文本形式发送?
  • Y 和 Y' 都是公开的。也不需要加密。 (用 Y 加密的价值有限,因为只有 X 的所有者才能解密它。)
【解决方案2】:

在非 PFS 会话中,浏览器决定会话密钥(或更确切地说是从中派生的秘密)并使用 RSA 对其进行加密,其中 RSA 公钥从属于服务器的证书中获得。该证书还用于对服务器进行身份验证。然后服务器使用它的私钥(你称之为主密钥)来解密会话密钥。 与服务器的所有连接都使用不同的会话密钥,但如果您拥有主密钥,则可以像服务器一样将它们全部弄清楚。 在 PFS 中,您使用 Diffie-Hellman 等算法,其中不使用主密钥。在这种连接中,主密钥用于验证算法的参数。在参数达成一致后,使用这些参数和双方的秘密进行密钥交换。参数不是秘密的,双方使用的秘密是会话密钥建立后的丢弃者(临时)。这样,如果您发现主密钥,则无法发现会话密钥。但是,如果您获得密钥,则可以冒充服务器,并且证书不会失效。 要了解有关 Diffie-Hellman 的更多信息。

【讨论】:

    【解决方案3】:

    您为每条消息生成一个新的公钥,并将真正的永久公钥仅用于身份验证

    这在其他答案中提到过,但我只是想给出一个更大脑可解析和上下文相关的版本。

    您可以使用某人的公钥做两件事:

    在许多方面,身份验证是更关键/成本更高的步骤,因为要知道给定的公钥属于某人,同时避免中间人攻击,您需要采取以下步骤:

    • 在现实生活中遇到他们并分享公钥(离开你的家???)
    • 通过视频与他们交谈(深度伪造???)
    • 受信任的签名提供者(中心化!!!)

    然而,生成新密钥的成本相对较低。

    因此,一旦您完成了这个昂贵的初始密钥验证步骤,您现在就可以:

    • 要求接收者为您要发送给他们的每条消息生成一个新的临时公钥
    • 接收方将临时公钥发回给您,由他们的永久公钥签名。没有任何东西被永久密钥加密,只有签名。无需加密发送的公钥!
    • 您使用永久公钥验证消息签名以避免 MITM,然后使用该临时密钥加密您的消息

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

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

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

    【讨论】:

      猜你喜欢
      • 2019-05-27
      • 2012-12-11
      • 2019-02-20
      • 2013-06-22
      • 1970-01-01
      • 2013-12-25
      • 1970-01-01
      • 2017-06-11
      • 2022-07-12
      相关资源
      最近更新 更多