20 对称加密 + 非对称加密

Posted by CodingWithAlice on April 28, 2021

20 对称加密 + 非对称加密

  • 总结

    1、加密算法的核心思想是 把一个小秘密(密钥)转化为一个大秘密(密文消息),守住了小秘密,也就守住了大秘密

    2、对称加密只使用一个 密钥,运算速度快,密钥必须保密,无法做到安全的密钥交换,常用的有 AES 和 ChaCha20

    3、非对称加密使用两个密钥:公钥和私钥,公钥可以任意分发而私钥保密,解决了密钥交换问题但速度慢,常用的有 RSA 和 ECC

    4、把对称加密和非对称加密结合起来就得到了又好又快的 混合加密,也就是 TLS 里使用的加密方式:简单说,SSL 就是通信双方 通过非对称加密协商出一个用于对称加密的密钥

概念解析

密钥(key)

明文(plain text/clear text):加密前的消息

密文(cipher text):加密后的乱码

解密(decrypt):使用 密钥还原明文 的过程,是加密的反操作

加密算法:加密解密的操作过程

对称加密

  • 定义:指加密和解密时使用的密钥都是同一个

常见算法:TLS 里有非常多的对称加密算法可供选择,比如 RC4、DES、3DES、AES、ChaCha20 等,但前三种算法都被认为是不安全的,通常都禁止使用,目前常用的只有 AESChaCha20

  • 常见算法详解

    1、AES 的意思是 高级加密标准(Advanced Encryption Standard),密钥长度可以是 128、192 或 256。它是 DES 算法的替代者,安全强度很高,性能也很好,而且有的硬件还会做特殊优化,所以非常流行,是应用最广泛的对称加密算法。

    2、ChaCha20 是 Google 设计的另一种加密算法,密钥长度固定为 256 位,纯软件运行性能要超过 AES,曾经在移动客户端上比较流行,但 ARMv8 之后也加入了 AES 硬件优化,所以现在不再具有明显的优势,但仍然算得上是一个不错算法。

让算法用固定长度的密钥加密任意长度的明文,把小秘密(即密钥)转化为大秘密(即密文),最新的分组模式被称为 AEAD

image-20210507161247907

非对称加密

  • 定义

    有两个密钥,一个叫 公钥(public key),一个叫 私钥(private key)。两个密钥是不同的,公钥可以公开给任何人使用,而私钥必须严格保密

  • 常见算法详解

    非对称加密算法的设计要比对称算法难得多,在 TLS 里只有很少的几种,比如 DH、DSA、RSA、ECC 等。

    1、RSA 可能是其中最著名的一个,几乎可以说是非对称加密的代名词,它的安全性基于整数分解的数学难题,使用两个 超大素数的乘积 作为生成密钥的材料,想要从公钥推算出私钥是非常困难的,RSA 密钥的推荐长度至少要 2048 位。

    2、ECC(Elliptic Curve Cryptography)是非对称加密里的后起之秀,它基于 椭圆曲线离散对数 的数学难题,使用特定的曲线方程和基点生成公钥和私钥,子算法 ECDHE 用于密钥交换,ECDSA 用于数字签名。

    image-20210507161351538

混合加密

  • 为什么要混合?

    虽然非对称加密没有密钥交换的问题,但因为它们都是基于复杂的数学难题,运算速度很慢

    image-20210428100624487

  • 定义

    1、在通信刚开始的时候使用 非对称算法,解决密钥交换的问题:用随机数产生对称算法使用的 会话密钥(session key),再用 公钥加密 –> 对方拿到密文后用私钥解密,取出会话密钥(会话密钥只有16/32字节)

    2、双方就实现了 对称密钥 的安全交换,后续就不再使用非对称加密,全都使用对称加密

    img