常见对称加密算法与工作模式简介
Posted 飞鹰技术
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了常见对称加密算法与工作模式简介相关的知识,希望对你有一定的参考价值。
现代密码分为对称(私钥)与非对称(公钥)密码,本文主要介绍对称密码中的的分组密码。
对称密码简介
对称密码(Symmetric Cipher)算法又叫传统密码算法,加密密钥能够从解密密钥推算出来,反之也成立(在大多数对称算法中,加密密钥与解密密钥是相同的)。对称算法的安全性依赖于密钥,所以密钥的保密性对通信的安全性至关重要;在安全通信之前,需要有一个安全通道以商定密钥。
加密和解密使用相同的密钥;
加密函数和解密函数非常类似(DES中,加密与解密函数基本相同)
流密码(序列密码):序列密码单独加密每个位;通过密码序列中的每个位与明文异或实现。序列密码的安全性完全取决于生成密钥序列的安全(有较大的密钥空间,且不可预测)。常见算法:
RC4:RSA公司的Ron Rivest设计的一个可变密钥长度的序列密码;有较广泛的商业应用。
SEAL:IBM的Phil Rogaway和Don Coppersimth设计的,针对32位处理器优化;有专利权。
分组密码:是将明文序列划分成等长的分组(Block),对每一组用同一加密算法和同一密钥进行加密。常见的DES、AES、IDEA等都是分组密码算法。
因为明文很少是分组的整数倍,所以需要对明文进行填充(如果恰好是分组的整数倍,则增加一个完整的填充分组),以PKCS#12为例:
AES算法
高级加密标准(Advanced Encryption Standard,AES)是美国联邦政府为解决DES算法密钥太短(56bit)问题,而向全球征集得到的算法。AES得到了全世界很多密码工作者的响应,先后有很多人提交了自己设计的算法;最终有5个候选算法进入最后一轮:Rijndael,Serpent,Twofish,RC6和MARS。最终经过安全性分析、软硬件性能评估等严格的步骤,Rijndael算法获胜。即为我们常说的AES算法。
AES明文分组的长度为128位即16字节,密钥长度可以为16,24或者32字节(128,192,256位)。根据密钥的长度,算法被称为AES-128,AES-192或者AE-256。
AES加密算法涉及4种操作:字节替代(SubBytes)、行移位(ShiftRows)、列混淆(MixColumns)和轮密钥加(AddRoundKey)。加解密需要经过多轮操作,密钥长度不同轮数也不同:128-10轮,192-12轮,256-14轮。以AES-128为例进行说明:
输入的密钥被扩展为44个32位子分组,每轮使用不同的4个分组。加解密算法都是以轮密钥加开始,最后一轮只包括三种操作(没有列混淆)。
明文处理:明文按如下方式组成4*4矩阵
字节替代:查找S盒(高四位为行值,低四位为列值),替换为对应的值。字节替代都是满足伽罗瓦域上的乘法运算(可通过伽罗瓦域上的逆运算实现替代,但实际上基本上先算出S盒,使用查表方式实现)。
行移位:对2、3、4行进行移位操作
列混淆:利用GF(28)域上算术特性的一个代替,同样用于提供算法的扩散性
轮密钥加:按位XOR操作。
密钥扩展:扩展生成各轮所需的密钥。
DES算法
DES(Data Encryption Standard,数据加密标准)是由IBM公司研制的一种对称密码算法,美国国家标准局于1977年公布把它作为非机要部门使用的数据加密标准。
DES加密算法是一种典型的对称加密、分组算法,以64位为分组,对数据加密,它的密钥长度是64位(密钥中每个第8 位都用作奇偶校验,故有效密钥长度是56位),加密解密用同一算法。DES是过去主流的分组密码,但因密钥空间太小,已逐渐被AES所取代。其所采用Feistel网络结构,影响了很多对称算法。每一轮对右半部分加密,然后与左半部分异或后,左右互换:
DES密钥通过等分、移位、选取和迭代形成一套16个加密密钥,分别供每一轮运算中使用。算法需要进行16次迭代,在完成16次迭代前,把第i-1次得到的的left和right的值作为第i次的输入数据。
3DES
为解决密钥空间太小问题,可通过以下方式增强分组密码的安全性:
多重加密:使用一个密码对明文加密若干次;
与直接相反,双重(两次)加密并没有增强对蛮力攻击的抵抗性;
安全的做法是散装加密
密钥漂白:在密钥k之外,增加k1与k2两个漂白密钥,用于与明文和密码进行异或。漂白不能增强大多数分析攻击(如线性密码分析和查分密码分析)抵抗行。因此
漂白主要用于能抵抗分析攻击但秘钥空间较小的算法(如DES);
漂白的额外计算负荷非常小。
3DES是DES加密算法的一种模式,它使用3组64位的密钥对数据进行三次加密。
设Ek()和Dk()代表DES算法的加密和解密过程,K代表DES算法使用的密钥,P代表明文,C代表密表,这样,
3DES加密过程为:C=Ek3(Dk2(Ek1(P)))
3DES解密过程为:P=Dk1((EK2(Dk3(C)))
K1、K2、K3决定了算法的安全性,
IDEA算法
IDEA(International Data Encryption Algorithm)是James Massey,Xuejia Lai等人提出的对称、分组加密算法。
IDEA使用长度为128bit的密钥,数据块大小为64bit,由8轮迭代操作实现。每个迭代都由三种函数:mod(2^16)加法、mod(2^16+1)乘法和逐位异或算法组成。整个算法包括子密钥产生、数据加密过程、数据解密过程三部分。加解密相同,只是密钥各异。
加密:IDEA总共进行8轮迭代操作,每轮需要6个子密钥,另外还需要4个额外子密钥输出变换,所以总共需要52个子密钥,这52个子密钥都是从128比特密钥中扩展出来的。输入的明文为8个字符(即64比特),将64比特数据块分成X1,X2,X3,X4四个子块,每一子块16比特。这4个子块将作为第一轮迭代的输入,全部共8轮迭代。在每一轮中,这4个子块相互异或、相加和相乘,且与6个16比特子密钥相异或、相加和相乘。最后在输出变换中4个子块与4个子密钥进行运算。
解密:与加密密钥一样,解密密钥也需要扩展,不同的是解密密钥是由加密密钥加法逆或乘法逆构成的,且两者一一对应。
加密工作模式
分组密码的工作模式是:根据不同的数据格式和安全性要求, 以一个具体的分组密码算法为基础构造一个分组密码系统的方法。基于分组的对称密码算法比如DES/AES算法只是描述如何根据秘钥对一段固定长度(分组块)的数据进行加密,对于比较长的数据,分组密码工作模式描述了如何重复应用某种算法安全地转换大于块的数据量。
简单的说就是,AES算法描述怎么加密一个数据块,分组密码工作模式模式了如果重复加密比较长的多个数据块。 常见的分组密码工作模式有ECB、CBC、CFB、OFB、CTR五种。
ECB电子密码本
ECB(Electronic Code book, 电子密码本)模式是最简单直接的加密模式,明文消息被分成固定大小的块(分组),并且每个块被单独加密。加密前需要把明文数据填充到块大小的整倍数。
每个块的加密和解密都是独立的,且使用相同的方法进行加密,所以可以进行并行计算。但是,因此也存在不少的缺陷:
加密是高度确定的,所以只要秘钥不变,相同的明文分组总是产生相同的密文输出;攻击者很容易发现是否发生了重复的数据,进行流量分析等。
无法检测到密文分组的顺序;因此攻击者可对密文分组进行重新排序(甚至组合不同时期的密文数据),来得到想要的结果。
CBC密码块链
CBC(Cipher Block Chaining, 密码块链)模式中每一个分组要先和前一个分组加密后的数据进行XOR异或操作,然后再进行加密。 这样每个密文块依赖该块之前的所有明文块;为了保持每条消息都具有唯一性,第一个数据块进行加密之前需要用初始化向量IV(随机数,每次使用不同的nonce,从而使其变成概率加密方案)进行异或操作。
CBC模式是一种最常用的加密模式,它主要缺点是加密是连续的,不能并行处理。并且与ECB一样消息块必须填充到块大小的整倍数。
CFB密码反馈
CFB(Cipher Feedback, 密码反馈)模式和CBC模式比较相似:
首选加密IV得到输出,然后与第一个明文分组进行XOR得到密文;
密文再加密后得到输出,与下一个明文分组进行XOR得到密文;
因此CFB得到的是一个异步序列密码,其解密过程与加密过程相同
CFB模式的解密和CBC模式的加密在流程上其实是非常相似的。
OFB输出反馈
OFB(Output Feedback, 输出反馈)模式将分组密码转换为同步流密码,也就是说可以根据明文长度先独立生成相应长度的流密码。
首选加密IV得到输出,然后与第一个明文分组进行XOR得到密文;
上个分组的加密输出再加密后,与下一个明文分组进行XOR得到密文;
因此CFB得到一个同步序列(分组的)密码,其解密过程与加密过程相同;
由于分组密码的计算与明文无关,因此可以预计算秘钥序列一个或多个分组Si。
CTR计数器
CTR(Counter, 计数器)模式是另外一种序列密码;分组密码的输入为一个计数器。初始化输入(IV)必须谨慎选择,防止重复;
CTR的一个优点是可以并行化。
以上是关于常见对称加密算法与工作模式简介的主要内容,如果未能解决你的问题,请参考以下文章