2012-03-16 62 views
0

在机器之间进行协商时,难以简单地捕获密钥吗?为什么SSL被认为是安全的?

比方说,我连接到我的银行网站。浏览器将向银行服务器发送请求。银行服务器将向我发送其SSL证书副本。如果有效,浏览器将发送签名确认。难道当时不能简单地捕获私钥吗?

+0

应该这个也许是在IT安全栈交换中得到更好的答案? – mfrankli 2012-03-16 04:39:23

+1

SSL基于非对称加密;公钥是用于解密的公钥。私人钥匙不是通过网络发送或以任何方式披露的;这就是它的私密性。 – bellpeace 2012-03-16 04:40:52

+0

那么为什么其他机器不能使用相同的公钥解密信息呢? – AccurateEstimate 2012-03-16 04:43:05

回答

3

您的私钥(以及银行也不会)通过网络发送。该银行的public密钥是它发送到浏览器的X509证书的一部分。如果银行使用其私钥签署了任何内容,并且您的浏览器使用银行的公钥(从证书中)验证签名。整个SSL会话使用对称密码加密(出于性能原因)。为了能够做到这一点,双方需要交换会话密钥(对于每个连接都不相同,并在定义的时间间隔后重新协商)。该交换使用Diffie-Hellman算法完成。在此交换过程中,密钥不通过网络发送,它由双方独立计算。

+0

这不仅仅是DH,你也可以通过RSA认证的密钥交换:http://tools.ietf.org/html/rfc4346#appendix-F.1.1 – Bruno 2012-03-16 10:43:23

+0

当然,RSA也可以使用。纠正我,如果我错了,但我认为DH最受欢迎。 – sirgeorge 2012-03-16 10:47:28

+0

我没有任何数据支持这一点,但你可能是对的。我想说EDH/DHE(DH的短暂变体)现在也很常见,它也可以提供完美的前向保密(即使用服务器的私钥,你也不能解密嗅探的流量)。 – Bruno 2012-03-16 11:10:04

1

只有公共密钥是共享的。银行不需要分享私人账户。

+0

那么我的机器将如何解密信息? – AccurateEstimate 2012-03-16 04:39:49

+0

我希望不要惹别人的东西,但我认为它是这样工作的:你的机器用服务器公钥加密,只有服务器的私钥可以解密它。所以我认为你也应该有一个密钥对,所以服务器可以加密消息发送给你。 – 2012-03-16 04:44:29

+0

你已经登陆了一个有趣的问题 - 实际上有两个不同版本的SSL(现在实际上是TLS)。最常用的是“非互相”SSL。在这里,你有一个来自银行的经过认证的公钥,但是银行没有你。因此,您可以将保密的数据发送给银行,但银行无法向您发送数据。另一个是Mutual SSL,你可以在这里阅读它的相关问题:http://en.wikipedia。组织/维基/ Mutual_authentication。关键是大多数网络应用程序的设计只需要单向安全性。 – mfrankli 2012-03-16 04:44:52

0

私钥不共享并且不存储在证书中。

2

是不是可以在机器之间协商的 之间简单捕获密钥?

不,因为它永远不会被发送,它是独立计算的。您需要服务器的私有密钥来重复导致会话密钥的独立计算。所以它是安全的。

+0

您可以告诉我们它是如何完成的,从点服务器发送证书到协商密钥的点,即建立SSL连接。 – AccurateEstimate 2012-03-16 05:38:37

+0

不,我不能,它需要几页RFC 2246. – EJP 2012-03-16 05:41:45

+0

@EndofFile:也有各种教程描述如何SSL/TLS的工作,例如[这里](http://docs.oracle.com/javase/7 /docs/technotes/guides/security/jsse/JSSERefGuide.html#SSLOverview)和[here](http://technet.microsoft.com/en-us/library/cc783349%28v=ws.10%29.aspx) 。 – Bruno 2012-03-16 10:52:05

相关问题