本篇将介绍密码套件中加密常用的协议并将他们进行比较,包括:CHACHA20、AES-256-GCM、AES-128-GCM、AES-256-CBC、AES-128-CBC、3DES-CBC、RC4-128、DES-CBC
一、概念
- (选择以上合适协议)对称加密算法
- 目的是保护批量数据传输
- 流密码(Stream Ciphers)
- CHACHA20、RC4-128
- Stream Cipher是对称加密协议,需要Client和Server双方有相同的密钥;工作方式是输入明文,输出密文
- 优势:更快地在软件中实施
- 为移动端/嵌入式系统提供更好的性能
- 劣势:容易受到流中比特顺序改变的影响
- 必须与MAC配对以保证数据完整性(Integrity )
- 块密码(Block Ciphers)
- AES-256、AES-128、3DES、DES
- Block Cipher(也是对称加密协议)将明文文本拆分成几个块,之后每个块将运行块密码加密,每个块将从明文加密成密文
- 许多PC都有硬件AES芯片
- 为PC、笔记本电脑、服务器等提供更好的性能
- 劣势:明文中的图案(pattern)没有被隐藏 - 无扩散(no diffusion)
- 必须与具体的操作模式相配对
- 上图中,我们注意到第二段内容的第三个块重复了,相同的块用相同的密钥加密得到的密文是一样的,这是一个问题;再者,如果右上图,我们加密一个企鹅图片,如果使用的块加密模式中没有包含扩散,我们看到虽然企鹅不是白色了,但我们还是能知道原始图片是个企鹅,这会很不安全。因而,为了有效使用块加密,我们需要用特定的操作模式。
- Block Cipher Modes(块加密模式)
- ECB - Electronic Code Book,右上图用的就是ECB,我们可以看到它很不安全
- CBC - Cipher Block Chaining
- 工作方式:将每个明文块与前一个密文块结合起来,第一个块和初始化向量(Initialization vector,IV,对称密钥生成的随机值)相结合
- 劣势1:明文的最后一个块必须被填充(这让每个块的大小都相同,比如下图加了ZZZ,每个块大小都为13),这也使CBC加密遭受各种“padding oracle”攻击
- 劣势2:无法并行(要加密明文块9,我们必须知道密文块8)
- CTR - Counter Mode
- 工作方式:将每个明文块与唯一的Nonce(一个只被使用一次的任意或非重复的随机数值)结合起来
- 通常,Nonce是IV(初始化向量)与递增计数器的组合
- 劣势:密文块不和之前或之后的块绑定,因而必须要与MAC配对
- 主要优势:能够并行(明文块9和Nonce 9是相结合的)(适合多处理器、多核CPU)
- 工作方式:将每个明文块与唯一的Nonce(一个只被使用一次的任意或非重复的随机数值)结合起来
- 由上图可知,CBC和CTR完全将图片虚化了,因为CBC和CTR都包含diffusion(扩散)
- 块密码模式(Block Cipher Modes)
- -CBC、-GCM
- CBC - Cipher Block Chaining
- GCM - Galois Counter Mode,CTR Mode with built-in MAC,AEAD加密
- AEAD - Authentication Encryption with Associated Data
- AEAD加密同时同步进行对称加密和MAC编码
- TLS 1.2推荐使用,TLS 1.3+需要
二、比较
1、不安全的
- DES - Data Encryption Standard,数据加密标准
- 标准加密算法in the 1970s / 1980s
- 56 bit key - 在数小时内能被暴力破解(brute forced)
- RC4 - 128 - Ron’s Cipher 4
- Ron Rivest - “R” in RSA
- 被证明在数学上是不正确的
- 3DES - Triple DES
- DES算法,三次不同
- 宣称的密钥强度:168 bits
- 通常以 E.D.E 模式部署(Encrypt - Decrypt - Encryp)
- 用明文密钥1加密明文,然后用明文密钥2运行解密算法,两个密钥不同,再然后用明文密钥1运行加密算法。注意,我们总共只用两个密钥。因而,有效密钥强度是112 bits(小于128 bits,所以不安全)
- DES算法,三次不同
- 因此,DES、RC4 - 128、3DES不安全
2、安全的块密码
- AES - Advanced Encryption Standard,高级加密标准
- 标准加密算法 since 2001
- 由公开竞赛所创建
- AES支持128位、192位或256位密钥(TLS/SSL用128和256的)
- 256位的密钥大小据称比128位更安全(加密全对此是有争论的)
- AES - 128当然不能被认为不安全
- AES - 256需要更高的开销/CPU
- 许多电脑有硬件AES芯片(让AES加解密处理更快)
- 需要知道的是,这仅限于不受空间限制的computer(laptop、pc、server...etc),手机、智能电视等IOT设备没有AES芯片
- GCM比CBC更安全
- AEAD(Authentication Encryption with Associated Data,同时同步进行对称加密和MAC)加密是面向未来的
- CBC容易受到填充预言攻击
- 因此,AES-256-GCM和AES-128-GCM更安全(这两者谁更安全是有争议的)
3、安全的流密码
- ChaCha20
- 如此命名是因为它是Salsa20算法的一个变种
- Salsa20被这样命名是创建者决定的
- ChaCha20是流加密,用128或者256位密钥
- 在web或HTTPS中(TLS/SSL中),用的是256位密钥,是非常安全的密码
- 在软件中,比AES更快
- 适合手机和IOT设备
- 如果AES遭泄露(compromised),ChaCha20可以是后备方案
- 当ChaCha20与哈希算法Poly 1305结合,也被认为是AEAD密码(本篇的AEAD密码是ChaCha20、AES-128-GCM和AES-256-GCM)
- 如此命名是因为它是Salsa20算法的一个变种
参考文献
1、Practical Networking.net:Practical TLS
标签:CBC,AES,加密,套件,明文,SSL,密钥,128 From: https://blog.csdn.net/Taki_UP/article/details/142097646