# 加密算法

  • 加密是指将原始数据(称为明文)根据加密算法转换成密文,从而隐藏其真实内容。解密是指将密文还原成明文。
  • 网络通信中常常使用加密算法:发送方将消息加密后再传输,接收方收到消息后用密钥解密成明文,其它人即使截取到消息也不能解读。
  • 密钥是加密算法中的可变参数,加密算法和密文可以公开,拥有密钥的人才能解读密文。
    • 密钥的位数越长就越难破译,不过加密和解密需要的时间也就越长。
    • 为了提高安全性,发送方可以定期更换密钥,或每发一条信息使用一个新密钥。
    • 加密的原则是使破译密钥的时间比密钥的有效期久,或者使破译密钥的代价大于所保护信息的价值。

# 对称加密

:Symmetric Cryptography ,加密、解密时使用的密钥相同。

  • 消息的发送者要将加密后的消息、密钥都发送给接受者。
  • 安全性主要取决于密钥是否泄漏,因此需要通信过程保密。
  • 仅适用于加密一对一的通信,不适用于加密多对多的通信。
    • 假设密钥不共用,则每两个对象相互通信时都需要生成独立的两个密钥,n 个对象之间就需要生成 n(n-1) 个密钥。
  • 常见的几种算法:
    • AES
    • DES
    • RC

# 非对称加密

:Asymmetric Cryptography ,加密、解密时使用的密钥不同。

  • 通常其中一个是公钥(可以公开给所有人),另一个是私钥(必须私密保存)。
  • 安全性主要取决于加密强度,但是加密算法较复杂,加密、解密速度慢。
    • 不需要通信过程保密,因为只需要发送公钥,而且本来就是公开给所有人。
  • 适合加密一对一、多对多的通信。常见用途:
    • 加密、解密数据:例如用户 A 生成一个用于加密的公钥以及对其解密的私钥,并将公钥公布出去。用户 B 拿到这个公钥,用它加密一段数据然后公布出去,这段数据只能被 A 解密。通信双方可这样交换公钥,从而建立一条专用的加密信道。
    • 数字签名:例如用户 A 生成一个用于加密的私钥以及对其解密的公钥,并将公钥公布出去。然后编写一个消息,将消息的哈希值用私钥加密之后公布。其他人可以使用公钥解读数字签名,从而验证该消息的内容没有被篡改、是由用户 A 签署的。
  • 常见的几种算法:
    • RSA
      • :支持加密、解密数据,不过速度较慢。支持数字签名。
    • DSA(Digital Signature Algorithm ,数字签名算法
      • :不支持加密、解密数据,专用于数字签名。
      • GPG(GNU Privacy Guard ,GnuPG)是一个命令行工具,支持用 RSA、DSA 算法进行非对称加密。
    • ECDSA(Elliptic Curve Digital Signature Algorithm ,椭圆曲线数字签名算法)
      • :不支持加密、解密,专用于数字签名。

# 量子加密

:Quantum Cryptography ,基于量子纠缠进行加密通信。

  • 量子具有不确定性、测量坍缩、不可克隆的特性,能保证通信过程不被窃听,实现绝对的加密通信。

# 后量子密码

:Post-Quantum Cryptography ,是指能避免被量子计算机暴力破解的密码。

  • 传统的密码算法主要基于一些非常难解决的数学难题,比如整数分解问题、离散对数问题、椭圆曲线离散对数问题。
    • 使用传统计算机几乎不可能暴力破解传统密码,因为穷举的计算量太大,耗时超过上千年。
    • 使用量子计算机,并针对一种数学难题设计合适的量子算法,就容易暴力破解一些传统密码,虽然成本很高。
      • 例如:使用量子算法 Shor 可以在几天内破解 2048 位的 RSA 密钥。
  • 目前,大部分对称加密算法、哈希函数依然难以被量子计算机破解,只是破解速度稍快,将密码长度加倍便可有效防御。
  • 后量子密码应该具备以下特点:
    • 安全:能抵抗传统计算机、量子计算机的暴力破解。
    • 加密、解密的速度快
    • 通信开销低:密码长度不超过 10 KB 。
    • 与传统密码算法的使用流程相同,从而可以直接替换。