【问题标题】:how encryption works加密的工作原理
【发布时间】:2011-05-14 11:04:39
【问题描述】:


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

【问题讨论】:

    标签: encryption


    【解决方案1】:

    好的,这里有几个令人困惑的地方。

    首先,HTTPS 实际上并没有使用公钥/私钥方案进行加密——技术上是“asymmetric encryption”。相反,它使用symmetric encryption 加密——实际上是其中之一——使用通过类似Diffie-Hellman key exchange 的算法建立的会话密钥

    结果是通过一次性密钥执行加密,该密钥是在设置 SSL 连接的握手过程中计算出来的。

    Transport Layer Security(SSL 确实是 Netscape 的专有术语)上的 Wikipedia 文章相当不错。

    如果你能得到那个密钥,你确实可以解密数据,但是由于现在通常的密钥是 128 位长,你在 2128 中大约有 1 次机会得到它——或者,以另一种方式看待它,您可能需要大约 2127 (170141183460469231731687303715884105728) 次尝试才能找到密钥。

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

    【讨论】:

    • +1 你是对的。我专注于从公钥推导出私钥,但我忘记了这一点。
    【解决方案2】:

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

    没有数学证据表明大整数分解没有简单解:但是,几十年的深入研究还没有发现任何多项式时间算法。 (不一定,只是找到一个是一个很好的长期目标。)RSA 密码系统的安全性是基于分解大素数的难度。

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

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

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

    • 如果我知道公钥为什么我不能解密数据,肯定和私钥有关!!!

    它们是相关的。你可以找到一个给定的。但是目前找到一个的计算复杂度比生成新的公钥/私钥对要糟糕得多,当你破解它时,密钥本身应该没有任何价值。 (“较小”键的年份,“较大”键可能是千年。问题是,定义会移动。:)

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

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

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

    在会话开始时的 SSL/TLS 握手期间,服务器和浏览器协商一个将用于会话的新会话密钥。浏览器和客户端之间的所有流量都使用会话密钥加密,并且由于 SSL/TLS 会话的创建方式,只有客户端和服务器知道密钥:

    https://www.rfc-editor.org/rfc/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.
    

    【讨论】:

      【解决方案3】:

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

      是的,它们是相关的,但要从公共密钥中确定私钥,需要解决一个计算难题,即分解一个素数。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-08-25
        • 1970-01-01
        • 2016-12-30
        • 1970-01-01
        • 2013-12-28
        • 1970-01-01
        • 2012-04-05
        • 2019-01-24
        相关资源
        最近更新 更多