加密如何工作

时间:2011-05-14 02:36:42

标签: encryption

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

3 个答案:

答案 0 :(得分:4)

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

没有数学证明大整数分解没有 easy 解决方案:然而,几十年的激烈研究还没有找到任何多项式时间算法。 (并不一定是 fast ,只是找到一个是一个很好的长期目标。)RSA密码系统的安全性是基于分解大质数的难度。

有数学证明解决离散对数非常困难。 El GamalDiffie-Hellman算法依赖离散对数来保证其安全性。

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

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

  
      
  • 如果我知道公钥为什么我无法解密数据,当然它与私钥有关!!!
  •   

他们是相关的。并且你可以找到另一个。但是,找到一个的计算复杂性目前比生成新的公钥/私钥对更糟糕,当你破解它时,密钥本身应该没有价值。 ('较小'键的年份,对于'较大'键可能是千年。麻烦的是,定义四处移动。:)

  

https协议是否加密所有数据或仅加密客户端发送的数据?例如,如果我去gmail.com,html代码是否加密?

HTTPS本身会在两个方向上加密所有内容。但是,对于实际包含用户数据的HTML,某些网站会对图像,css,javascript和http使用未加密的https。这是因为提供未加密的内容比提供加密的内容要快得多。它也是非常不安全的,因为大多数这些类型的内容可以在飞行中被替换,允许入侵者修改浏览器的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.

答案 1 :(得分:3)

好的,这里有几点困惑。

首先,HTTPS实际上并未使用公钥/私钥方案加密 - 从技术上讲,“asymmetric encryption”。它实际上是使用symmetric encryption加密的 - 实际上是一个会话密钥,它是通过像Diffie-Hellman key exchange这样的算法建立的。

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

关于Transport Layer Security的维基百科文章(SSL实际上是Netscape的专有术语)相当不错。

如果你能得到那个密钥,你确实可以解密数据,但由于现在通常的密钥长度为128位,所以在2 128 中你有大约1次机会正确 - 或者在另一种看待它的方式中,你可以在找到密钥之前尝试大约2次 127 (170141183460469231731687303715884105728)。

但其次,非对称加密确实以一种方式出现。当您建立SSL连接时,主机会提供X509 certificate来标识自己;这是因为有人不能劫持DNS并使自己看起来像是paypal.com而不是Vlad的Cut Rate Hacking。 X509证书使用公钥/私钥对进行签名:使用可信提供商密钥的私有端(例如VeriSign)对签名进行哈希处理。它们提供 public 方面,允许您确认证书确实是由VeriSign加密的。这证实了证书的真实性。

答案 2 :(得分:1)

  

如果我知道公钥,为什么我不能   解密数据,肯定是与之相关的   私钥!!!

是的,这是相关的,但是为了确定来自公众的私钥,需要解决一个计算硬问题,该问题是一个主要的大数字因子分解。

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