# 加密算法
- 加密是指将原始数据(称为明文)根据加密算法转换成密文,从而隐藏其真实内容。解密是指将密文还原成明文。
- 网络通信中常常使用加密算法:发送方将消息加密后再传输,接收方收到消息后用密钥解密成明文,其它人即使截取到消息也不能解读。
- 密钥是加密算法中的可变参数,加密算法和密文可以公开,拥有密钥的人才能解读密文。
- 密钥的位数越长就越难破译,不过加密和解密需要的时间也就越长。
- 为了提高安全性,发送方可以定期更换密钥,或每发一条信息使用一个新密钥。
- 加密的原则是使破译密钥的时间比密钥的有效期久,或者使破译密钥的代价大于所保护信息的价值。
# 对称加密
: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 ,椭圆曲线数字签名算法)
- :不支持加密、解密,专用于数字签名。
- RSA
# 量子加密
:Quantum Cryptography ,基于量子纠缠进行加密通信。
- 量子具有不确定性、测量坍缩、不可克隆的特性,能保证通信过程不被窃听,实现绝对的加密通信。
# 后量子加密
:Post-Quantum Cryptography ,是指能避免被量子计算机暴力破解的加密算法。
- 传统的加密算法主要基于一些非常难解决的数学难题,比如整数分解问题、离散对数问题、椭圆曲线离散对数问题。
- 使用传统计算机几乎不可能暴力破解传统加密算法,因为穷举的计算量太大,耗时超过上千年。
- 使用量子计算机,并针对一种数学难题设计合适的量子算法,就容易暴力破解一些传统加密算法,虽然成本很高。
- 例如:使用量子算法 Shor 可以在几天内破解 2048 位的 RSA 密钥。
- 目前,大部分对称加密算法、哈希函数依然难以被量子计算机破解,只是破解速度稍快,将密码长度加倍便可有效防御。
- 后量子加密算法应该具备以下特点:
- 安全:能抵抗传统计算机、量子计算机的暴力破解。
- 加密、解密的速度快
- 通信开销低:密码长度不超过 10 KB 。
- 与传统密码算法的使用流程相同,从而方便替换。