您好
我知道关于https的基本规则!
我知道有私人&公钥,公钥用于加密,私钥用于解密!
现在我有疑问:
* - 如果我知道公钥为什么我无法解密数据,当然它与私钥有关!!!
* - https协议是否加密所有数据或仅加密客户端发送的数据?
例如,如果我去gmail.com,html代码是否加密?
现在,如果答案是肯定的(并且HTML代码是加密的)我的浏览器如何解密它而其他人不能解密它
如果不是,为什么我们应该使用它来下载重要数据的备份?
答案 0 :(得分:4)
Public Key encryption systems基于One Way Functions;在一个方向上比在另一个方向上更容易计算的函数。公钥加密系统有两种常见的单向函数选择:Large integer factorization和Discrete Logarithms。
没有数学证明大整数分解没有 easy 解决方案:然而,几十年的激烈研究还没有找到任何多项式时间算法。 (并不一定是 fast ,只是找到一个是一个很好的长期目标。)RSA密码系统的安全性是基于分解大质数的难度。
有数学证明解决离散对数非常困难。 El Gamal和Diffie-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)
如果我知道公钥,为什么我不能 解密数据,肯定是与之相关的 私钥!!!
是的,这是相关的,但是为了确定来自公众的私钥,需要解决一个计算硬问题,该问题是一个主要的大数字因子分解。
用简单的话说,你可以做到,但实际技术需要的时间太长了。