Павел Игорев Asked:2020-10-23 07:09:32 +0000 UTC2020-10-23 07:09:32 +0000 UTC 2020-10-23 07:09:32 +0000 UTC 数据加密发生在哪里,tls/ssl 密钥在哪里? 772 对安全 https 连接的问题感兴趣。 当通过 https 请求网站时,我无法弄清楚数据在哪里被加密?- 在浏览器中,在客户端的操作系统中,甚至在服务器上? 密钥如何传递给浏览器以解密消息?只是在响应消息或其他内容中,它可以被拦截吗? 浏览器知道加密算法吗?这是公开信息吗?如果是这样,为什么不使用专有算法(没人知道)或不断变化,以使攻击者更难猜测? безопасность 2 个回答 Voted Barmaley 2020-10-23T16:38:57Z2020-10-23T16:38:57Z 它是这样工作的: 服务器和客户端有所谓。证书。粗略地说,证书是一组:公钥(PubKey)+私钥(PrivKey) 在建立连接的时候,所谓的。handshake-handshake再次,粗略地说,此时客户端和服务器交换关于他们拥有哪些证书以及他们支持哪些加密算法以及他们是否可以信任对方的证书的信息。如果客户端和服务器具有信任响应者证书的根证书,则握手成功。 如果握手成功,他们交换公钥,并根据它们计算会话密钥,计算方法如下sessionKey=sharedKey(PubKeyClient, PrivKeyServer)==sharedKey(PubKeyServer, PrivKeyClient)- 函数出现在这里sharedKey()- 这是一种基于受访者的公钥计算会话密钥的数学算法,接收者的秘钥,与根据接收者的公钥和被访者的私钥计算得到的会话秘钥相同——事实上,所有这些数学都是基于此——否则什么都不会脱掉 在第 3 步之后,双方拥有相同的密钥,用于通过所选算法进行对称加密,该算法在握手期间设置 接下来,每一方都用会话密钥加密它的请求,接收方解密它,瞧。 在现实生活中,一切都要复杂得多——你至少可以阅读维基百科 更新 他可以被拦截 由于服务器和客户端只交换公钥,攻击者只能截取公钥,知道公钥不知道私钥是没有用的。 浏览器知道加密算法吗?这是公开信息吗? 是的,这是公开信息。在密码学中,基于对加密算法的无知的保护不被认为是强保护。相反,算法的知识恰恰相反,是一种保护方式——作为算法可靠性的某种保证。可以说,对于算法的认证有一定的程序,可以确认其可靠性 - 即对各种攻击的抵抗力。在 SSL/TLS 的情况下,RSA 和 DH 用于密钥交换,IDEA 和 AES 对称算法用于会话内交换。 Best Answer Zergatul 2020-11-04T09:41:37Z2020-11-04T09:41:37Z 加密发生在双方。毕竟,如果只有一侧(例如,只有服务器)加密,那么来自另一侧(来自客户端)的流量将不会被加密。它可以被偷听甚至改变。 形式上,没有人把钥匙给任何人。在 TLS 协议中,客户端和服务器必须生成一个共享密钥,一组 48 个字节。然后客户端和服务器根据共享密钥计算密钥:客户端的加密密钥和服务器的加密密钥。从共享密钥计算密钥的过程是标准的,并在 TLS 协议的描述中指定。服务器和客户端知道 2 个加密密钥,他们用一个加密,用第二个解密。而现在最有趣的是客户端和服务器如何计算共享密钥。这取决于选择的密码套件: TLS_RSA_WITH_:在这种情况下,客户端本身通过生成 48 个随机字节来创建共享密钥。然后它使用服务器证书中的公共 RSA 密钥对它们进行加密。服务器接收加密数据并使用私有 RSA 密钥对其进行解密。这种方案很少使用。 TLS_DHE_RSA_/TLS_ECDHE_RSA_/TLS_ECDHE_ECDSA_:这使用 Diffie-Hellman 加密方案 (DHE) 或其椭圆曲线版本 (ECDHE)。该方案的实质如下:服务端和客户端生成随机大数(私钥),根据它们计算出其他数(公钥),并相互发送。给定他们的私钥和对方的公钥,他们计算共享秘密。在频道上监听的第三方只能看到 2 个公钥,它无法计算共享密钥。之后,客户端和服务器之间为获取此密钥而交换的所有数据都由服务器的证书(RSA 或 ECDSA 签名)签名。如果客户端信任服务器的证书,它会验证这个签名,如果它是正确的,数据交换就开始了。这是最常用的方案。 还有其他几种方案,但它们很少使用或根本不使用。 关于拦截。正如我上面所描述的,在这里拦截消息是没有用的,因为在第一种情况下只有服务器可以解密它,而在第二种情况下使用了一个狡猾的密码方案。 服务器和客户端都知道加密算法。毕竟,如果客户端不知道什么加密算法,他将如何加密要发送的数据呢?在现代密码学中没有人使用封闭算法。世界上最优秀的密码学家一直在研究开放算法,寻找漏洞并提供绕过它们的解决方案。 在 TLS 中,我们可以有条件地说算法发生了变化,因为每次都会生成不同的加密密钥。然后,如果你想使用一个私有算法,例如查看一个网页,如果你的计算机/设备执行加密/解密,这个算法怎么可能是私有的呢? 我省略/简化了一些细节,以便仅描述主要思想。
它是这样工作的:
PubKey)+私钥(PrivKey)sessionKey=sharedKey(PubKeyClient, PrivKeyServer)==sharedKey(PubKeyServer, PrivKeyClient)- 函数出现在这里sharedKey()- 这是一种基于受访者的公钥计算会话密钥的数学算法,接收者的秘钥,与根据接收者的公钥和被访者的私钥计算得到的会话秘钥相同——事实上,所有这些数学都是基于此——否则什么都不会脱掉在现实生活中,一切都要复杂得多——你至少可以阅读维基百科
更新
由于服务器和客户端只交换公钥,攻击者只能截取公钥,知道公钥不知道私钥是没有用的。
是的,这是公开信息。在密码学中,基于对加密算法的无知的保护不被认为是强保护。相反,算法的知识恰恰相反,是一种保护方式——作为算法可靠性的某种保证。可以说,对于算法的认证有一定的程序,可以确认其可靠性 - 即对各种攻击的抵抗力。在 SSL/TLS 的情况下,RSA 和 DH 用于密钥交换,IDEA 和 AES 对称算法用于会话内交换。
形式上,没有人把钥匙给任何人。在 TLS 协议中,客户端和服务器必须生成一个共享密钥,一组 48 个字节。然后客户端和服务器根据共享密钥计算密钥:客户端的加密密钥和服务器的加密密钥。从共享密钥计算密钥的过程是标准的,并在 TLS 协议的描述中指定。服务器和客户端知道 2 个加密密钥,他们用一个加密,用第二个解密。而现在最有趣的是客户端和服务器如何计算共享密钥。这取决于选择的密码套件:
关于拦截。正如我上面所描述的,在这里拦截消息是没有用的,因为在第一种情况下只有服务器可以解密它,而在第二种情况下使用了一个狡猾的密码方案。
服务器和客户端都知道加密算法。毕竟,如果客户端不知道什么加密算法,他将如何加密要发送的数据呢?在现代密码学中没有人使用封闭算法。世界上最优秀的密码学家一直在研究开放算法,寻找漏洞并提供绕过它们的解决方案。
在 TLS 中,我们可以有条件地说算法发生了变化,因为每次都会生成不同的加密密钥。然后,如果你想使用一个私有算法,例如查看一个网页,如果你的计算机/设备执行加密/解密,这个算法怎么可能是私有的呢?
我省略/简化了一些细节,以便仅描述主要思想。