V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
everlost
V2EX  ›  SSL

ssl 使用对称加密只是为了减少性能开销吗?

  •  
  •   everlost · 2020-12-06 15:35:14 +08:00 · 3238 次点击
    这是一个创建于 1208 天前的主题,其中的信息可能已经有所发展或是发生改变。

    网上说浏览器在握手阶段拿到服务器的公钥之后,双方始协议出一个随机 token,之后就采用对称加密了。

    请问这样做,仅仅是为了减少性能开销吗?

    我感觉,真正的原因,会不会是,基于 rsa 的非对称加密本来就不适合双向的数据传输?试想,浏览器往服务器传送内容,这边用公钥加密,服务器那边用私钥解,这没问题。但反过来,服务器下发数据,那边用私钥加密,中间人可能有公钥,服务器传给浏览器的数据,就能被中间人解开了。

    这才是 ssl 使用对称加密的原因?

    请各位轻喷,我是小白。

    16 条回复    2021-02-22 19:06:27 +08:00
    3dwelcome
        1
    3dwelcome  
       2020-12-06 15:37:50 +08:00 via Android
    rsa 可以加密,但 rsa 算法非常慢。cpu 资源浪费在这上面,没必要。
    GeruzoniAnsasu
        2
    GeruzoniAnsasu  
       2020-12-06 15:39:52 +08:00
    服务器下发数据就会用客户端公钥来加密,换言之用“客户端那边的密钥对” pfx 个人证书差不多就是这么回事


    对称加密确实就是为了性能,计算速度快,密钥长度短。RSA 都已经普遍 2048bit 了, AES 基本还是 256 对吧
    geelaw
        3
    geelaw  
       2020-12-06 15:46:49 +08:00   ❤️ 2
    狭义来说,常见的对称加密不但比常见的非对称加密快,而且可以做到 密文长度 = 明文长度 + 常数,而且可以同时获得保密性和完整性——即使坏者既不能看懂密文,也不能创造它(看不懂的)有效密文。

    第三点是公钥加密自然不能达到的,如果要做到同时具有保密性和完整性则需要客户端、服务端分别有公钥加密算法和签名算法,需要 4 对密钥。
    前两点对自然定义不成立,因为用公钥+私钥加密混合形成的混合加密也是公钥加密算法,且也可以获得前两个优点。

    > 但反过来,服务器下发数据,那边用私钥加密,中间人可能有公钥,服务器传给浏览器的数据,就能被中间人解开了。

    这段话“连错误都算不上”,因为它不合语法(即这句话类型检查失败)。如果一个东西“用私钥加密”,那么这个东西一定是对称加密算法而不是非对称加密算法,因此“中间人有公钥”里的“公钥”和前文的“私钥”不能存在有意义的关系,更不可能用公钥去解密东西。
    everlost
        4
    everlost  
    OP
       2020-12-06 16:03:36 +08:00
    @GeruzoniAnsasu 谢谢你理解了我的意思,抛开性能的考虑,如果 ssl 硬着头皮用非对称加密撸到底(假如 ssl 当初是这么设计的),那会增加 ssl 协议的复杂度,因为客户端自己也要准备一套密钥对,在握手协商时,把自己的公钥传给服务器。用非对称加密的话,不仅性能变好,ssl 协议的复杂度也降低了。这样理解没问题吧?
    Mitt
        5
    Mitt  
       2020-12-06 16:12:55 +08:00 via iPhone   ❤️ 1
    @everlost 双向认证了解一下,没有别的原因,单纯就是性能问题
    crab
        6
    crab  
       2020-12-06 16:14:50 +08:00
    长度和慢
    wy315700
        7
    wy315700  
       2020-12-06 16:18:39 +08:00   ❤️ 1
    AES 128bit 的加密能力和 RSA 3072bit 是一样的。
    AES 256bit 的加密能力和 RSA 16384bit 是一样的。

    楼主可以比较下两者的运算性能。

    更何况用非对称加密需要做两次运算,用自己的私钥签名后再用对方公钥加密。对称加密只需要做一次运算。
    geelaw
        8
    geelaw  
       2020-12-06 16:34:27 +08:00 via iPhone
    @wy315700 #7 通常应该选择先加密后认证(签名),以减少侧信道泄露。
    cheng6563
        9
    cheng6563  
       2020-12-06 16:59:03 +08:00 via Android
    我以前不严格测试过一下,i 5 7500 加密 1024 位 rsa 的速度约为 3m/s
    neighbads
        10
    neighbads  
       2020-12-06 19:40:11 +08:00
    就是性能原因。只用非对称也可以双向传输数据。
    rrfeng
        11
    rrfeng  
       2020-12-06 19:49:30 +08:00
    除了性能还有一个问题,一对密钥不能长期在网络上使用,长期信道需要定期更换密钥以避免密钥暴露,更换的密钥需要与之前使用的密钥完全无关并且当前密钥泄露不会导致之前传输的数据失去安全保护( Perfect Forward Secrecy )。
    wanguorui123
        12
    wanguorui123  
       2020-12-06 22:58:42 +08:00   ❤️ 1
    1. AES 加密一般有硬件加速单元,所以性能一般比较好
    2. AES 的秘钥每次协商时随机生成,有助于减少被破译的概率
    3. SSL 中比较重要的是证书的验证机制,避免中间人代理双方的通讯通道
    ryanlid
        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/
    Mutoo
        14
    Mutoo  
       2020-12-07 07:40:15 +08:00
    > 但反过来,服务器下发数据,那边用私钥加密,中间人可能有公钥,服务器传给浏览器的数据,就能被中间人解开了。

    典型的加密传输场景,服务器向客户端发信息不可能用自己的私钥加密,依然是用客户端的公钥加密。只有一种情况服务端会用自己的私钥,那就是数字签名。
    wnpllrzodiac
        15
    wnpllrzodiac  
       2020-12-07 08:58:54 +08:00 via Android
    非对称现在还跑不动,特别是破设备。不然 https 打开不会这么慢了
    hxndg
        16
    hxndg  
       2021-02-22 19:06:27 +08:00
    @geelaw
    还是不要说对称加密提供完整性了,没上过密码学的人会被误解的。
    就类似不能说锁提供线程同步一样,那个是条件变量专门干的事情。
    我实际上感觉你说的是 AEAD

    这里的认证实际上还区分通信认证和对端认证。

    lz 感觉是 TLS 加密还没明白,没搞懂基本的计算流程,建议直接看 RFC 吧
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3168 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 12:33 · PVG 20:33 · LAX 05:33 · JFK 08:33
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.