AES-GCM加密简介
—■什么是AES加密?
常见的加密主要分为两类:对称加密和非对称加密,AES加密就是对称加密的一种,即加密 和解密使用相同的一把密钥。它的全称是Advanced Encryption Standard(高级加密标准),主 要是用来取代DES加密算法,目前已经被全世界广泛采用,各大处理器厂商也在各自的CPU 中,集成了专门的AES指令集,从而在硬件层面提升了 AES加解密的速度。
二,AES基本构成
因为AES属于对称加密,我们可以先了解一下对称加密的流程
1 .对称加密相关概念
明文P(plainText):未经加密的数据
密钥K(key):用来加密明文的密码。在对称加密算法中,加密与解密的密钥是相同的,由双 方协商产生,绝不可以泄漏
密文C(cipherText):经过加密的数据
加密函数E(encrypt) : C = E(K, P),即将明文和密钥作为参数,传入加密函数中,就可以获得 密文
解密函数D(decrypt) : P = D(K, C),即将密文和密钥作为参数,传入解密函数中,就可以获得 明文
说到这里,你可能会觉得加解密函数很神奇,他们是如何实现数据转换的呢?一种简单的做 法是XOR运算(异或运算),XOR运算的神奇之处是:如果对一个值连续做两次XOR ,会返回
这个值本身
//第一次XOR
1010 A 1111 // 0101
//第二次XOR
0101 A 1111 // 1010
复制代码
XOR的这个特点,使得它可以用于信息的加密
plainText XOR key // cipherText
cipherText XOR key // plainText
了解了上述概念,我们再来看AES的构成
2.AES加密相关概念
分组(或者叫块):AES是一种分组加密技术,分组加密就是把明文分成一组一组的,每组 长度相等,每次加密一组数据,直到加密完整个明文。那你可能要问:为何要进行分组 呢?比如一个应用程序总共就只能获得3M的内存空间来执行,而需要加密的文件是 100M ,这个时候就不得不进行文件拆解加密。在AES标准规范中,分组长度只能是128 bits ,也就是每个分组为16个bytes
密钥长度:AES支持的密钥长度可以是128 bits、192 bits或256 bitse密钥的长度不 同,推荐加密轮数也不同,如下表:加密轮数越多,当然安全性越好,但也更耗费时间
算法
分组长度
密钥恩
迭储仑数(Nr)
AES-128
128
128
10
AES-192
128
192
12
AES-256
128
256
14
加密模式:因为分组加密只能加密
定长度的分组,而实际需要加密的明文可能超过分组
长度,此时就要对分组密码算法进行迭代,以完成整个明文加密,迭代的方法就是加密模 式。它有很多种,常见的工作模式如下图:
模式
描述
典型应用
电码本(ECB)
用相同的密钥分别对明文分组独立加密
单个数据的安全传输(如一个加密密钥)
密文分组链接(CBC)
加密算法的输入是上一个密文组和下一个明文组的异或
面向分组的通用传输 认证
密文反馈(CFB)
一次处理s位,上一块密文作为加密算法的输入,产生 的伪随机数输出与明文异或作为下一单元的密文
面向数据流的通用传输 认证
输出反馈(OFB)
CFB类似,只是加密算法的输入是上一次加密的输 出,且使用整个分组
噪声信道上的数据流的传输
计数器(CTR)
每个明文分组都与一个经过加密的计数器相异或。对每面向分组的通用传输 个后续分组计数器递增    用于高速需求
key恩地初始向量(IV , Initialization Vector):它的作用和MD5的〃加盐〃有些类似,目的是 防止同样的明文块,始终加密成同样的密文块,以CBC模式为例:在每一个明文块加密 前,会让明文块和一个值先做异或操作。IV作为初始化变量,参与第一个明文块的异 或,后续的每一个明文块和它前一个明文块所加密出的密文块相异或,从而保证加密出的 密文块都不同。
明文块1
明文块0

填充方式(Padding):由于密钥只能对确定长度的数据块进行处理,而数据的长度通常是 可变的,因此需要对最后一块做额外处理,在加密前进行数据填充。常用的模式有 PKCS5, PKCS7, NOPADDING
附加消息(AAD,Additional Authenticated Data):附加2肖息不是重要数据,它只是可 以包含在协议中的纯数据,需要对其进行完整性保护,但不需要加密。一个很好的例子是 加密IP数据包的标头。如果对它进行加密,则不能将其用于路由;如果不保护它的完整 性,则攻击者可能会更改消息的长度或源地址,而收件人却不知道
上述这些概念,通常会以参数的形式,出现在前后端的加密工具中,在使用之前,我们需要 协商统一,才不会出现问题。
三、AESGCM模式
上文提到了 AES工作模式的概念,在介绍GCM之前,我们需要先了解下CTR模式
l.CTR(Counter Mode ,计数器模式)
图中可以看出,加密过程使用了密钥、Nonce(类似IV)、Counter(—个从0到n的编号),与 上文提及的CBC模式相比,CTR最大的优势是可以并行执行,因为所有的块只依赖于Nonce
与Counter ,并不会依赖于前一个密文块,适合高速传输需求。但CTR不能提供密文消息完 整性校验的功能(未被篡改)所以我们需要引入另一个概念:MAC(消息认证码)
Counter (CTR) mode encryption
2.MAC(Message Authentication Code,消息认证码)