网上说浏览器在握手阶段拿到服务器的公钥之后,双方始协议出一个随机 token,之后就采用对称加密了。
请问这样做,仅仅是为了减少性能开销吗?
我感觉,真正的原因,会不会是,基于 rsa 的非对称加密本来就不适合双向的数据传输?试想,浏览器往服务器传送内容,这边用公钥加密,服务器那边用私钥解,这没问题。但反过来,服务器下发数据,那边用私钥加密,中间人可能有公钥,服务器传给浏览器的数据,就能被中间人解开了。
这才是 ssl 使用对称加密的原因?
请各位轻喷,我是小白。
1
3dwelcome 2020-12-06 15:37:50 +08:00 via Android
rsa 可以加密,但 rsa 算法非常慢。cpu 资源浪费在这上面,没必要。
|
2
GeruzoniAnsasu 2020-12-06 15:39:52 +08:00
服务器下发数据就会用客户端公钥来加密,换言之用“客户端那边的密钥对” pfx 个人证书差不多就是这么回事
对称加密确实就是为了性能,计算速度快,密钥长度短。RSA 都已经普遍 2048bit 了, AES 基本还是 256 对吧 |
3
geelaw 2020-12-06 15:46:49 +08:00 2
狭义来说,常见的对称加密不但比常见的非对称加密快,而且可以做到 密文长度 = 明文长度 + 常数,而且可以同时获得保密性和完整性——即使坏者既不能看懂密文,也不能创造它(看不懂的)有效密文。
第三点是公钥加密自然不能达到的,如果要做到同时具有保密性和完整性则需要客户端、服务端分别有公钥加密算法和签名算法,需要 4 对密钥。 前两点对自然定义不成立,因为用公钥+私钥加密混合形成的混合加密也是公钥加密算法,且也可以获得前两个优点。 > 但反过来,服务器下发数据,那边用私钥加密,中间人可能有公钥,服务器传给浏览器的数据,就能被中间人解开了。 这段话“连错误都算不上”,因为它不合语法(即这句话类型检查失败)。如果一个东西“用私钥加密”,那么这个东西一定是对称加密算法而不是非对称加密算法,因此“中间人有公钥”里的“公钥”和前文的“私钥”不能存在有意义的关系,更不可能用公钥去解密东西。 |
4
everlost OP @GeruzoniAnsasu 谢谢你理解了我的意思,抛开性能的考虑,如果 ssl 硬着头皮用非对称加密撸到底(假如 ssl 当初是这么设计的),那会增加 ssl 协议的复杂度,因为客户端自己也要准备一套密钥对,在握手协商时,把自己的公钥传给服务器。用非对称加密的话,不仅性能变好,ssl 协议的复杂度也降低了。这样理解没问题吧?
|
6
crab 2020-12-06 16:14:50 +08:00
长度和慢
|
7
wy315700 2020-12-06 16:18:39 +08:00 1
AES 128bit 的加密能力和 RSA 3072bit 是一样的。
AES 256bit 的加密能力和 RSA 16384bit 是一样的。 楼主可以比较下两者的运算性能。 更何况用非对称加密需要做两次运算,用自己的私钥签名后再用对方公钥加密。对称加密只需要做一次运算。 |
9
cheng6563 2020-12-06 16:59:03 +08:00 via Android
我以前不严格测试过一下,i 5 7500 加密 1024 位 rsa 的速度约为 3m/s
|
10
neighbads 2020-12-06 19:40:11 +08:00
就是性能原因。只用非对称也可以双向传输数据。
|
11
rrfeng 2020-12-06 19:49:30 +08:00
除了性能还有一个问题,一对密钥不能长期在网络上使用,长期信道需要定期更换密钥以避免密钥暴露,更换的密钥需要与之前使用的密钥完全无关并且当前密钥泄露不会导致之前传输的数据失去安全保护( Perfect Forward Secrecy )。
|
12
wanguorui123 2020-12-06 22:58:42 +08:00 1
1. AES 加密一般有硬件加速单元,所以性能一般比较好
2. AES 的秘钥每次协商时随机生成,有助于减少被破译的概率 3. SSL 中比较重要的是证书的验证机制,避免中间人代理双方的通讯通道 |
13
ryanlid 2020-12-06 23:57:56 +08:00 1
就是为了性能
对称加密使用的密钥,就是通过非对称加密方式传输的呀。 参考 cloudflare 文章:对称加密的效率 是 非对称加密的几万倍 A laptop can only perform a couple hundred RSA encryptions a second versus around ten million per second of the symmetric cipher AES. https://blog.cloudflare.com/keyless-ssl-the-nitty-gritty-technical-details/ |
14
Mutoo 2020-12-07 07:40:15 +08:00
> 但反过来,服务器下发数据,那边用私钥加密,中间人可能有公钥,服务器传给浏览器的数据,就能被中间人解开了。
典型的加密传输场景,服务器向客户端发信息不可能用自己的私钥加密,依然是用客户端的公钥加密。只有一种情况服务端会用自己的私钥,那就是数字签名。 |
15
wnpllrzodiac 2020-12-07 08:58:54 +08:00 via Android
非对称现在还跑不动,特别是破设备。不然 https 打开不会这么慢了
|