Tim*_*Tim 12 https cryptography public-key-encryption
我在信息技术课上,我在网上偶然发现了这个概念,这引起了我的兴趣.我还看了一些解释这个概念的网站和维基百科,以及stackoverflow上的一些帖子,但我仍然感到困惑.根据我的理解,在典型的HTTPS公钥交换中,浏览器和服务器与密钥一起创建会话密钥......如果某人获得了派生会话密钥的私钥,他们可以看到所有数据在这种联系之间发送,即使在过去.
我的理解是,使用PFS,即使以加密形式,也不会发送"会话密钥".它保密,因此即使有人找到私钥,他们也无法访问过去的加密记录信息.它是否正确?
我也很想知道,如果我参加PFS交换,叫我"A",服务器"B",PFS应该处理这样一个事实:如果我的密钥被泄露,A和B的谈话不会因为他们而受到损害不知道会话密钥.但是,如果我的密钥实际上已被泄露,那么"B"如何将我认证为"A"...例如,如何使用我的密钥尝试访问数据来了解我(A)或其他用户(C)之间的区别.
hei*_*ent 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.
鲍勃用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.
小智 9
在非PFS会话中,浏览器决定会话密钥(或者更确切地说是从中派生密钥)并使用RSA对其进行加密,RSA公钥从属于服务器的证书中获取.该证书还用于验证服务器.然后,服务器使用其私钥(您称之为主密钥)来解密会话密钥.与服务器的所有连接都使用不同的会话密钥,但是如果您拥有主密钥,则可以将其全部用于服务器的方式.在PFS中,您使用Diffie-Hellman等算法,其中不使用主密钥.在这种连接中,主密钥用于验证算法的参数.在参数达成一致后,密钥交换使用这些参数和双方的秘密进行.参数不是秘密的,并且在建立会话密钥(临时)之后,各方使用的秘密是丢弃的.这样,如果您发现主密钥,则无法发现会话密钥.但是,如果获得密钥,则可以将其作为服务器,并且证书不会失效.要了解有关Diffie-Hellman的更多信息,请阅读.