2011-05-14 50 views
0


我知道https的基本规则!
我知道有私钥&公钥,公钥用于加密,私钥用于解密!
现在我有问题:
* - 如果我知道公钥为什么我不能解密数据,当然这与私钥有关系!
* - https协议是否加密所有数据或只有客户端发送的数据? 为emxample,如果我去gmail.com,html代码是否加密或不?
现在,如果答案是肯定的(并且HTML代码被加密),我的浏览器如何解密它以及其他人不能?
如果否,为什么我们应该使用它来下载重要数据的备份?加密如何工作

回答

3

好的,这里有一些困惑点。

首先,HTTPS实际上并未使用公钥/私钥方案加密 - 技术上,“asymmetric encryption”。相反,它使用symmetric encryption加密 - 实际上有几个之一 - 通过Diffie-Hellman key exchange等算法建立的会话密钥

结果是加密是通过一次性密钥执行的,该密钥是作为建立SSL连接的握手的一部分计算的。

维基百科有关Transport Layer Security的文章(SSL实际上是Netscape的专有名词)是相当体面的。

如果你能得到这个密钥,你确实可以解密这些数据,但是由于现在通常的密钥长度是128位,所以你有大概1个机会来使它正确 - 或者换句话说在查找它之前,您可能会在找到密钥之前尝试大约2 (170141183460469231731687303715884105728)尝试。

但是,其次,不对称加密确实有一种方式,但是。当您建立SSL连接时,主机会提供一个X509 certificate来标识自己;这就是为什么有人不能劫持DNS并使自己看起来像paypal.com而不是弗拉德的削减速率黑客。 X509证书是签署的使用公钥/私钥对:使用可信任的提供商密钥的私有方 - 例如VeriSign散列签名。他们提供了public这一面,它允许您确认证书确实是由VeriSign加密的。这证实了证书的真实性。

+0

+ 1你是对的。我专注于从公共密钥中推导私钥,而我忘记了这一点。 – Heisenbug 2011-05-14 02:56:28

1

如果我知道的公钥,为什么我不能 解密数据,当然它关系到 私钥!

是的是相关的,但要确定来自公众的私钥,需要解决一个计算困难的问题,因为它是一个主要的大数。

用简单的话来说,你可以做到,但实际技术需要的时间太长。

4

Public Key encryption systems基于One Way Functions;在一个方向上比在另一个方向上更容易计算的功能。公钥密码系统有两种常见的单向函数选择:Large integer factorizationDiscrete Logarithms

没有数学证明大整数因子分解没有容易解决方案:然而,几十年的紧张研究还没有找到任何多项式时间算法。 (不一定是快速,只是发现一个已经是一个很好的长期目标。)密码系统的安全性基于对大素数进行因式分解的难度。

有数学证明解决离散对数是非常困难的。算法依赖于离散对数来保证其安全性。

公钥机制只是实际部署的解决方案的一部分。公钥系统通常用于数字签名和与symmetric cipher协商使用的session key。对称密码的速度要快得多,在带有模式的纯文本上使用要安全得多,并且是现代通信隐私和完整性不可分割的一部分。

现在,直接解决您的问题:)

  • 如果我知道的公钥,为什么我不能解密数据,当然它与私钥!

它们是相关的。而你可能找到一个给出另一个。但是找到一个的计算复杂度现在是比生成新的公钥/私钥对差很多,在你破解它的时候,关键本身应该没有价值。 (年代为'更小'的键,可能是'更大'键的千年。问题是,定义左右移动。:)

https协议加密所有数据还是只有客户端发送的数据?对于emxample,如果我去gmail.com,html代码是否加密?

HTTPS本身加密一切在两个方向。然而,一些网站将对图像,css,javascript和https使用未加密的http作为实际包含用户数据的HTML。这是因为提供未加密的内容比提供加密内容要快得多。它也是非常不安全的,因为大多数这些类型的内容可以在飞行中被替换,从而允许入侵者修改浏览器的DOM或注入其他新代码,使他们能够访问私有数据。大多数浏览器抱怨混合的SSL/TLS和未加密的内容,所以希望没有多少网站可以做到这一点。

我的浏览器如何解密和其他人不能?

在SSL/TLS 握手在会议开始时,服务器和浏览器协商将用于会话的新的会话密钥。所有的浏览器和客户端之间的通信进行加密会话密钥,并作为的SSL/TLS会话的创建方式的结果,只在客户端和服务器知道密钥:

http://tools.ietf.org/html/rfc5246#page-64

8.1.1. RSA 


    When RSA is used for server authentication and key exchange, a 48- 
    byte pre_master_secret is generated by the client, encrypted under 
    the server's public key, and sent to the server. The server uses its 
    private key to decrypt the pre_master_secret. Both parties then 
    convert the pre_master_secret into the master_secret, as specified 
    above. 

8.1.2. Diffie-Hellman 


    A conventional Diffie-Hellman computation is performed. The 
    negotiated key (Z) is used as the pre_master_secret, and is converted 
    into the master_secret, as specified above. Leading bytes of Z that 
    contain all zero bits are stripped before it is used as the 
    pre_master_secret. 

    Note: Diffie-Hellman parameters are specified by the server and may 
    be either ephemeral or contained within the server's certificate.