什么是AES加密
常见加密分为两类:
对称加密
AES(Advanced Encrtption Standard)是对称加密的一种,即加密和解密使用相同的密钥。
非对称加密
加密和解密使用不同的密钥,非对程算法比对称算法更复杂,运算速度更慢。
AES加密流程关键概念
分组密码体制
分组密码体制是指将明文分成一段一段的来加密,然后再把一段段密文拼起来成为最终的密文。
AES加密会首先把明文分成若干段,每段数据长度必须是16字节,如果最后一段不够16字节,则padding成16字节。
Padding
Padding就是把不满16字节的分组数据填满16个字节,有三种模式:
PKCS5
分组数据缺少x个字节,则在数据末尾填充x字节的x。比如缺少3个字节,则末尾填充3个字节的3。
PKCs7
分组数据缺少x个字节,则在数据末尾填充x字节的0。比如缺少4个字节,则末尾填充4个字节的0。
NOPADDING
表示不要填充,那么数据发送放就要保证最后一段数据是16个字节。
初始向量IV
初始向量作用是防止同样的明文块,始终加密成同样的密文块,使得加密更加安全可靠。只需要提供一个初始向量,后面每段数据的初始向量就是前面一段的密文。初始向量的长度必须为16个字节,来源必须随机。
密钥
AES密钥长度可选值[128, 192, 256]bits。每段数据都是用同一个密钥,密钥要保证随机生成。
加密模式
CBC(Cipher Block Chaining)
GCM(GMAC/Counter Mode)
AES的GCM(Galois/Counter Mode)模式本质上是AES的CTR模式(计数器模式)加上GMAC(Galois Message Authentication Code, 伽罗华消息认证码)进行哈希计算的一种组合模式。GCM可以提供对消息的加密和完整性校验。
- Key:对称秘钥,长度可选值[128, 192, 256]bits。
- IV:初始向量(Initialisation Vector),值必须随机。通常以明文的形式和密文一起传送,目的是防止同样的明文块,始终加密成同样的密文块。
- AAD:附加身份验证数据(Additional Authenticated Data)。AAD数据不需要加密,通常以明文的形式和密文一起传送。
- MAC tag:MAC标签。用于确保数据在传输和存储过程中不会被篡改。加密时,MAC tag由明文、密钥、IV、AAD共同产生。
完整性校验机制:加密时使用密钥生成消息的MAC值,并随消息一起发送,解密时通过共享密钥计算受到消息的MAC值,与随附的MAC值做比较,从而判断消息是否被篡改过。因为对于篡改者,没有密钥就无法对篡改后的消息计算MAC值。
EVP介绍
Openssl中实现了各种对称算法、摘要算法及签名验签算法。EVP函数封装了openssl加密库里的所有算法函数。通过统一的封装,使得只需在初始化参数的时候做很少的改变,就可以使用相同的代码实现不同算法的加解密。