0. 引言

2011年,著名中国技术论坛CSDN因为明文存储用户的密码及SQL数据库被攻击者注入等原因,泄露了600余万用户的完全未经脱敏的私人信息,包括但不限于用户名、密码、Email地址等,导致了大量用户被撞库攻击,成为数据安全行业的反面教材——这体现了数据加密和密码哈希化的必要性。 这起事件后期推动了数据加密的潮流,越来越多的人开始重视自己的数据安全。数据安全几乎是最重要的一个部分就是加密,那么我们怎么安全地加密数据呢?

0.1 加密是什么?

加密就是将 明文(Plaintext) 以加密算法(Algorithm)进行加密(Encryption)过程后变换为密文用以保护数据的过程,加密过程需要的主要套件如下: 加密技术(Cryptography)密钥(Key) 、加密算法(Algorithm)

1. 使用对称加密技术

1.1 第一个安全技术——DES

DES(Data Encryption Standard,数据加密标准) ,推出于1977年,由美国国家标准局(NBS)开发,使用56位的密钥进行加密(在实际使用中是64位密钥,但密钥中有8位为校验码,实际有效的位数是56位)。这也是第一个对称加密技术(Symmetric Encryption) ,加密和解密使用同一个密钥,高效而简单、优雅,一切看起来都那么地完美,对吧?

但所有的完美都是易碎的 。1990年,一组由美国密码学家Richard Schappbach领导的团队使用专门定制的硬件在48小时以内穷举破解了DES加密的数据;1993年, 迪安·艾尔曼(Dean Elmore)以一组112个专用芯片设备8小时破解了DES加密技术;1998年,EFF赞助的一个团队使用造价为25万美元的硬件在56小时内破解了DES加密的数据……随着计算机算力的高速增长,破解DES变得易如反掌,DES在2005年被NBS宣布停止使用,不再安全。该算法的变体3DES使用3个不同的密钥(共计112[DES-EDE2标准]或168有效位[DES-EDE3标准])进行3次DES加密数据,但该算法在2023年也被宣布不再安全,停止用于新的应用,存量应用则要在2030年以前完全停用3DES加密标准。 所以,现在如果你使用DES或3DES算法,就相当于用挂锁锁原子弹,安全性无限趋近于零 !(战术摊手.avif)

同样,还有更多的对称加密技术被宣告不安全,在此列表简单说明:

算法 密钥长度 缺陷 历史意义
Blowfish 32~448位 存在生日攻击风险,作者已弃用 早期SSL标准的加密算法
RC4 40~2048位 因密钥重用导致出现漏洞,被RFC禁止 历史上最快的流加密技术

1.2 更进一步的安全——AES

1997年,NIST(美国国家标准与技术研究院)发起了一项公开竞赛,征集新的加密标准,经过数论评估,来自比利时的Joan Daemen和Vincent Rijmen设计的Rijndael算法被选为 AES(Advanced Encryption Standard,高级加密标准) 标准。2001年,NIST正式发布了AES标准,它支持128、192、256位三种密钥长度,在对称加密领域发挥极大作用,广泛用于各类协议,例如WPA2/3(用于WiFi身份认证和加密)、SSL/TLS(用于传输加密,本文提到)、VPN(用于建立虚拟加密通信信道,例如企业内网)、硬盘加密等,一切看起来都那么完美,优雅而简单。

所有的完美也确实都很易碎,只是时间问题而已 。在后量子时代,量子计算机的威胁变得越加明显,例如Shor算法和Grover算法在理论上能够破解AES加密技术,Shor算法仍可破解但时间非常长;Grover算法能够将密钥搜索范围简化到平方根程度,例如AES-128的搜索空间为2^64个密钥,AES-256的搜索空间为2^128个密钥。虽然量子计算机的Grover算法会降低AES的安全性,但密钥最位数最多的AES-256被普遍估计在将来的10年内(2025-2035)仍然有足够的位数(2^128位)来抵御Grover算法攻击。

当然,还有更多的加密技术,例如Google力推的ChaCha20加密算法、Salsa20(ChaCha20前身)等,在此列表说明:

算法 密钥长度 特点
ChaCha20 256位 在移动端的性能优于AES且抗侧信道攻击,用于TLS1.3
Salsa20 256位 ChaCha20前身,设计简洁,用于开源项目
Twofish 128/256位 AES竞赛亚军,比AES更加灵活但没有普及,用于学术研究
Serpent 128/256位 AES竞赛季军,安全性极高但速度较慢,用于开源项目

2. 使用非对称加密技术

2.1 质因数分解的魔法——RSA

RSA (Rivest-Shamir-Adleman) 通过 单向陷门函数(Trapdoor One-Way Function) 在未掌握陷门的情况下极难破解的特性实现数据安全,两个巨大质数p、q乘积为N,而私钥ϕ(N)(等价于p和q)即为陷门,拥有陷门的人可以快速地解密和加密数据;而没有陷门的人能看到的只有公钥中的N(即pxq的乘积),以及一些辅助信息。他们需要得到ϕ(N)才能解密数据,最简单但运算量也最大的方法是分解质因数,但一个足够大的合数𝑁在目前已知的经典计算方法下,所需分解时间会非常非常长,超出任何实际可接受的范围。所以,我们通常认为在可接受的时间内,它是无法被破解的。

说人话版 : RSA的安全性的实质其实就是我们在小学五六年级学到的“质因数分解”,但它巧妙地将两个极其巨大的质数相乘计算得一个同样巨大的合数。由于被分解的合数过大导致不能在我们能接受的时间内计算出结果,所以我们将其近似看作无法破解。当然,在量子计算机迅猛发展的当下,RSA也并不安全,Shor算法能够高效地进行质因数分解运算,所以量子计算机一来RSA也得趴窝(战术摊手.avif)

2.2 椭圆曲线的谜题——ECC

ECC(Elliptic Curve Cryptography,椭圆曲线密码学)椭圆曲线离散对数问题 (EC-DLP) 的困难性保证密钥不被破解,具体的算法是:给定椭圆曲线上一个点P和另一个点Q,判断Q是否是P的某个倍数(kP),但找到k是极其困难的。由于算法大大简化,所以ECC能够在更短的密钥长度下提供相同的安全性,而所需的性能开销也更小、计算速度更快、占用空间更小,适合移动设备和资源受限场景,广泛应用于SSL/TLS、数字签名(ECDSA)、密钥交换(ECDH)等场景。因为ECDLP的证明没有捷径,所以经典计算机需要极长的时间来破解ECDLP密钥,我们也将其近似看作无法破解。

说人话版

这玩意就是用椭圆曲线的难题保证密钥安全性和数据安全的,说白了就是算一道没有简便方法的椭圆曲线证明题,所以这个算法比RSA更轻,更快。但这玩意也照样不抗量子计算机,Shor算法一来直接趴窝,草(一种植物)!

2.3 离散对数的难题——DH

Diffie-Hellman (DH) 基于离散对数问题的困难性保护数据安全,即在一个有限域中,给定一个基数g、一个模数p,以及g的x次幂取模p的结果(g^x mod p),很难从中计算出x的值。但这个加密算法压根就不用来加密数据,而是用于交换密钥的,常见于TLS协议的密钥交换协议部分(详见本文)。它的核心、唯一功能就是让双方在不传输明文密钥的情况下协商出一个相同的密钥用于加密。

说人话版

这玩意不是拿来传数据的,是拿来协商密钥的,就凭着离散对数题难到爆炸的性质保护协商密钥的安全性,这破题难得要命,我也不知道咋讲,草(一种植物)!


参考资料