高级加密标准(AES)
高级加密标准(英语:Advanced Encryption Standard,缩写:AES),已然成为对称密钥加密中最流行的算法之一。
AES的区块长度固定为128比特,密钥长度则可以是128,192或256比特;
随着科学的发展,加密技术已经融入到了我们生活的方方面面,而AES更是在IT互联网领域,有着广泛的应用,配合上GCM模式,能够为数据的保密性、完整性、真实性提供全面的支持
对称加密算法
对称密钥算法(英语:Symmetric-key algorithm)又称为对称加密、私钥加密、共享密钥加密,是密码学中的一类加密算法。这类算法在加密和解密时使用相同的密钥,或是使用两个可以简单地相互推算的密钥。事实上,这组密钥成为在两个或多个成员间的共同秘密,以便维持专属的通信联系。与公开密钥加密相比,要求双方获取相同的密钥是对称密钥加密的主要缺点之一。
常见的对称加密算法有AES、ChaCha20、3DES、Salsa20、DES、Blowfish、IDEA、RC5、RC6、Camellia。
对称加密的速度比公钥加密快很多,在很多场合都需要对称加密。
AES(Advanced Encryption Standard)
高级加密标准(AES),是下一代的加密算法标准,速度快,安全级别高;
高级加密标准(英语:Advanced Encryption Standard,缩写:AES),又称Rijndael加密法(荷兰语发音: [ˈrɛindaːl],音似英文的“Rhine doll”),是美国联邦政府采用的一种区块加密标准。这个标准用来替代原先的DES,已经被多方分析且广为全世界所使用。经过五年的甄选流程,高级加密标准由美国国家标准与技术研究院(NIST)于2001年11月26日发布于FIPS PUB 197,并在2002年5月26日成为有效的标准。现在,高级加密标准已然成为对称密钥加密中最流行的算法之一。
AES加密过程是在一个4×4的字节矩阵上运作,这个矩阵又称为“体(state)”,其初值就是一个明文区块(矩阵中一个元素大小就是明文区块中的一个Byte)。加密时,各轮AES加密循环(除最后一轮外)均包含4个步骤:
- AddRoundKey 矩阵中的每一个字节都与该次回合密钥(round key)做XOR运算;每个子密钥由密钥生成方案产生。
- SubBytes 透过一个非线性的替换函数,用查找表的方式把每个字节替换成对应的字节。
- ShiftRows 将矩阵中的每个横列进行循环式移位。
- MixColumns 为了充分混合矩阵中各个直行的操作。这个步骤使用线性转换来混合每内联的四个字节。最后一个加密循环中省略MixColumns步骤,而以另一个AddRoundKey取代。
AES 操作模式/加密模式 (mode of operation)
早在1981年,DES演算法公布之后,NIST在标准文献FIPS 81中公布了4种工作模式
- 电子密码本:Electronic Code Book Mode (ECB)
- 密码分组连结:Cipher Block Chaining Mode (CBC)
- 密文反馈:Cipher Feedback Mode (CFB)
- 输出反馈:Output Feedback Mode (OFB)
2001年又针对AES加入了新的工作模式:
- 计数器模式:Counter Mode (CTR)
另一分类方式
对于流加密,需要将分组密码转化为流模式工作。对于块加密(或称分组加密),如果要加密超过块大小的数据,就需要涉及填充和链加密模式。
ECB (Electronic Code Book 电子密码本) :
ECB模式是最早采用和最简单的模式,它将加密的数据分成若干组,每组的大小跟加密密钥长度相同,然后每组都用相同的密钥进行加密。
- 优点: 1.简单; 2.有利于并行计算; 3.误差不会被传送;
- 缺点: 1.不能隐藏明文的模式; 2.可能对明文进行主动攻击; 因此,此模式适于加密小消息
CBC (Cipher Block Chaining,密码分组链接) :
这种模式是先将明文切分成若干小段,然后每一小段与初始块或者上一段的密文段进行异或运算后,再与密钥进行加密。引入了IV(初始化向量:Initialization Vector)的概念。IV是长度为分组大小的一组随机,通常情况下不用保密,不过在大多数情况下,针对同一金钥不应多次使用同一组IV。CBC要求第一个分组的明文在加密运算前先与IV进行异或;从第二组开始,所有的明文先与前一分组加密后的密文进行异或。[区块链(blockchain)的鼻祖!]
CBC模式相比ECB实现了更好的模式隐藏,但因为其将密文引入运算,加解密操作无法并行操作。同时引入的IV向量,还需要加、解密双方共同知晓方可。
- 优点: 1.不容易主动攻击,安全性好于ECB,适合传输长度长的报文,是SSL、IPSec的标准。
- 缺点: 1.不利于并行计算; 2.误差传递; 3.需要初始化向量IV
CFB (Cipher FeedBack Mode,加密反馈模式) :
与CBC模式类似,但不同的地方在于,CFB模式先生成密码流字典,然后用密码字典与明文进行异或操作并最终生成密文。后一分组的密码字典的生成需要前一分组的密文参与运算。CFB模式是用分组演算法实现流演算法,明文资料不需要按分组大小对齐。
- 优点: 1.隐藏了明文模式; 2.分组密码转化为流模式; 3.可以及时加密传送小于分组的数据;
- 缺点: 1.不利于并行计算; 2.误差传送:一个明文单元损坏影响多个单元; 3.唯一的IV;
OFB (Output FeedBack Mode,输出反馈模式) :
OFB模式与CFB模式不同的地方是:生成字典的时候会采用明文参与运算,CFB采用的是密文。
- 优点: 1.隐藏了明文模式; 2.分组密码转化为流模式; 3.可以及时加密传送小于分组的数据;
- 缺点: 1.不利于并行计算; 2.对明文的主动攻击是可能的; 3.误差传送:一个明文单元损坏影响多个单元。
CTR 计数器模式 :
CTR模式同样会产生流密码字典,但同是会引入一个计数,以保证任意长时间均不会产生重复输出。
CTR模式只需要实现加密演算法以生成字典,明文资料与之异或后得到密文,反之便是解密过程。CTR模式可以采用并行演算法处理以提升吞量,另外加密资料块的访问可以是随机的,与前后上下文无关。
- 优点:
- 加解密可以平行化处理,如果加解密速度耗时,可以选择这一种。
- 支持random access。
- 缺点:
- 必须一直保持同步
- 讯息被修改时,不易被发现,只单纯影响单一明文(没有错误增长)。
- 起始状态的Initial Vector,不能重复使用,否则很容易被攻击者抓到。
CCM:Counter with CBC-MAC :
CCM模式,全称是Counter with Cipher Block Chaining-Message Authentication Code,是CTR工作模式和CMAC认证演算法的组合体,可以同时资料加密和鉴别服务。
明文资料通过CTR模式加密成密文,然后在密文后面再附加上认证资料,所以最终的密文会比明文要长。具体的加密流程如下描述:先对明文资料认证并产生一个tag,在后续加密过程中使用此tag和IV生成校验值U。然后用CTR模式来加密原输入明文资料,在密文的后面附上校验码U。
GCM:伽罗瓦计数器模式Galois/Counter Mode :
GCM模式是CTR和GHASH的组合,GHASH操作定义为密文结果与金钥以及讯息长度在GF(2^128)域上相乘。GCM比CCM的优势是在于更高并行度及更好的效能。
GCM中的G就是指GMAC,C就是指CTR。
GMAC (Galois message authentication code mode, 伽罗华消息认证码)
GCM可以提供对消息的加密和完整性校验,另外,它还可以提供附加消息的完整性校验。在实际应用场景中,有些信息是我们不需要保密,但信息的接收者需要确认它的真实性的,例如源IP,源端口,目的IP,IV,等等。因此,我们可以将这一部分作为附加消息加入到MAC值的计算当中。下图的Ek表示用对称秘钥k对输入做AES运算。最后,密文接收者会收到密文、IV(计数器CTR的初始值)、MAC值。
由于GCM现在属于最严谨的加密模式,TLS 1.2标准使用的就是AES-GCM演算法。
AES 参数
- key length (密钥位数,密码长度) AES128,AES192,AES256(128 位、192 位或 256 位) 128位对应的是16个字节
- key (密钥,密码) key指的就是密码了,AES128就是128位的,如果位数不够,某些库可能会自动填充到128。
- IV (Initialization Vector, 初始向量) 不同的IV加密后的字符串是不同的,加密和解密需要相同的IV。
- mode (加密模式) AES分为几种模式,比如ECB,CBC,CFB等等,这些模式除了ECB由于没有使用IV而不太安全,其他模式差别并没有太明显。
- padding (填充方式) 对于加密解密两端需要使用同一的PADDING模式,大部分PADDING模式为PKCS5, PKCS7, NOPADDING。
为什么要有初始向量(initialization vector , IV)
有个概念我们要先知道。我们需要两个元素去实行加密和解密:「初始向量」和「秘钥Key」。你有可能会问初始向量有什么用途?一般加密演算法,会将原始资料切成多个区块进行加密动作, 如果我们只用一个金钥值与每个明文区块去做加密,这样子所得到的每个密文区块,都是相同的加密模式,会比较容易被破解。
openssl-enc symmetric cipher routines
|
|
|
|
|
|