您的位置:首页 > 其它

密码学基础知识(四)分组密码

2015-07-06 08:48 288 查看
首先再说说密码体制那点事,密码体制按密钥分为两派,对称和公钥,不过也可以分为分组密码和流密码(序列密码)。刚才看了一眼,发现忘把图片传上来了,下次有功夫的。

说句废话,分组密码主要采用混淆原则和扩散原则来抵抗攻击者对该密码体制的统计分析。

那分组密码是什么东西呢?

通俗讲就是将明文分块,然后分块加密。

分组密码设计的准则:

①分组长度

分组长度越长意味着安全性越高,但是会影响加密解密的速度。1977年之后,由于计算速度和分析技术的提高,建议使用分组长度128位。

②密钥长度

密钥越长同样意味着安全性越高,但会影响加密和解密的速度。现在一般认为64位的密钥是不安全的,通常使用的密钥长度为128位。

③轮函数F

轮函数F通常之迭代分组密码中单轮加密解密算法的实现部分,是分组密码结构的核心,由其实现数据的混乱和扩散。在设计中,轮函数要遵循雪崩效应准则和位独立准则。评价轮函数实际质量的指标有安全性,速度和灵活性。

④迭代的轮数

迭代分组密码的本质是单轮不能提供足够的安全性而多伦迭代增强其安全性。一般而言,迭代轮数越多,密码分析越困难,但过多的迭代会使输入和输出的关系复杂化,影响加解密速度,而安全性增强不明显,一般而言,决定迭代轮数的准则是:是密码分析的难度大于简单穷举攻击的难度。

⑤子密钥的生成方法

理论设计目标是子密钥的统计独立性和密钥更换的有效性。包括:实现简单,便于硬件实现,子密钥的生成不影响迭代轮函数的执行;不存在简单关系;种子密钥的所有比特对每个子密钥比特影响大致相同;没有弱密钥或弱密钥容易避开;保证密钥和密文符合位独立准则和雪崩效应。

分组密码的设计应满足的要求:

①分组要足够长。假设n为分组长度,则要使分组代换字母表中的元素个数2n足够大,以防止明文穷举攻击。

②密钥长度要足够长,以防止密钥穷举攻击。但密钥又不能过长,这不利于密钥的管理且影响加解密的速度。

③由密钥确定的置换算法要足够复杂,足以抵抗各种已知的攻击,如查分攻击和线性攻击等,使攻击者除了利用穷举攻击外,无其他更好的攻击方法。

④加密解密运算简单,易于软件和硬件的快速实现。为了便于软件编程和通过逻辑电路实现,算法中的运算应尽量简单,如二进制加法或移位运算,参与运算的参数长度也应选择在8的整数倍,可以充分发挥计算机中字节运算的优势。

⑤一般无数据扩展,即明文和密文长度相同。在采用同态置换和随机话加密技术时可引入数据扩展。

⑥差错传播尽可能的小。

设计密码时,①②③的安全性为必要条件,同时还需考虑④⑤⑥。

归纳起来,一个分组密码在实际应用中需要在安全性和实用性之间寻求一种平衡,使算法在足够安全的同时,又具有尽可能短的密钥,尽可能小的存储空间以及尽可能快的运行速度。

上面的东西可能有点不懂,咱们举个著名的DES你就懂了

DES采用feistel密码的S-P网络,就是置换代换网络结构。分组长度64bit,密钥长度56bit

分三个阶段:初始置换initial permutation,轮乘积变换,逆初始变换。流程如图:

加密算法:

1.初始置换IP:对明文m中的各位进行换位,打乱明文各位的次序。

2.密钥控制下的16轮迭代加密(第16轮与前15轮略有不同):每一轮称为轮函数或轮变换,分别对应十六个子密钥加密,最后一轮不将R16和L16交换,直接进行下一阶段的逆初始置换。

3.逆初始置换IP-1:对R16和L16做IP得逆变换得到密文

密钥扩展算法:

由主密钥生成各轮子密钥(K1,K2,…,K16):每个密钥48bit。

K∈{0,1}56

PC-1(K)=C0D0

C0,D0∈{0,1}28

Ci=LSi(Ci-1)

Di=LSi(Di-1)

Ki=PC-2(CiDi)

i=1,2,…16

LSi:当i=1,2,9时为循环左移1位变换,其他为循环左移2位变换。

看上面那个图,还有个f,这个f还是DES得核心呢,不知道你还记得DES的密钥是56位,那怎么加密64位分组明文的呢。奥秘就在这个加密函数f。

Ri= Li-1模二加 f (Ri-1,Ki)

Li= Ri-1 ,i =1,2,3,…,16

咱们理下思路,首先一块64bit,然后分为RH和L,各32位,进行加密,密钥却是48位,不对吧,所以加密算法f中一定会对R进行32-48位的扩展。扩展完了,和密钥亲密完了,说咱走吧,下一轮不同意了,我接受的也是32位啊,你这48啥意思,所以咱还得进行48-32的位缩减,这就引出了DES著名的S盒。S盒就是将6-4位,这样算算,八个S盒就能48-32了。然后一个置换就行了,具体咋处理的就不说了,累听。下图f。

Si (B)=Si (b1b2b3b4b5b6)=Si [b1b6(行数)][b2b3b4b5(列数)]



八个S盒:

DES算法中S盒的特点:

S盒是DES中唯一的非线性部分,DES的安全强度主要取决于S盒的安全强度。DES中8个S盒,输入均为6位,输出为4位。有以下特点:

①具有良好的非线性,即输出地每一个比特与全部输入比特有关;

②每一行包括所有16种4位二进制。

③两个输入相差1bit比特时,输出相差2bit。

④如果两个输入刚好在中间2个比特上不同,则输出至少有2个比特不同。

⑤如果两个输入前2位不同而最后2位相同,则输出一定不同。

⑥相差6bit的输入共32对,在这32对中有不超过8对的输出相同。

什么都有不安全的,DES也不例外。

弱密钥:由k产生的16个子密钥相同,k就是弱密钥,重复两次加密就恢复了明文。这样的弱密钥DES有4个。

半弱密钥:存在k!=k1,但是k与k1两次加密也能恢复明文,称(k,k1)为半弱密钥。这样的DES至少有12个。

不过DES密钥总数2^56个呢。然并卵,我国的王小云破解了DES。

因为破解时就针对了其密钥量还是不够,多重DES出生了,就是一个明文块会经历两次单重DES的加密。不过会被中途相遇攻击,然后就有了三重DES。DES都这样了,咱肯定不能用了,所以AES出生了。

meet-in-the-middle attack中间相遇攻击:

– C=EK2(EK1(M)),EK1(M) =X=DK2(C);

– 已知一明密文对(M,C),攻击者可以:

· (1)用256个所有可能的K1对M加密,将加密结果存入一表;

· (2)用256个所有可能的K2对C解密,在(1)生成的表中查找

· (3)如果查找成功,则记下相应的(K1,K2)(可能的密钥);

· (4)用新的明密文对(M‘,C’)验证(K1,K2):

· (5)若等式成立,则(K1,K2)就为密钥,攻击成功;

AES:

· 宽轨迹策略:

– 针对差分密码分析和线性密码分析提出;

– 可以给出算法的最佳差分特性的概率及最佳线性逼近的偏差的界;

– 可以分析算法抗差分密码分析和线性密码分析的能力;

· SP(代替/置换)网络,每轮由3层组成:

– 线性混合层:确保多轮之上的高度扩散( diffusion );

– 非线性层:由n个16×16的S-Box并置而成,起到混淆

– 密钥加层:子密钥异或到中间状态上;

· 分组长度和密钥长度相互独立,可任意组合:

– 分组长度: 128/192/256 bits

– 密钥长度: 128/192/256 bits

· AES各种运算以字节为单位来进行处理;

· AES的密钥可取128/192/256 bits

– 密钥长度以4字节字(Word,32bits)为单位表示;

– 记为Nk,Nk=密钥长度 (bits)÷32;

– Nk= 4,6 或 8;

· AES的分组可取128/192/256 bits

– 分组长度以4字节字(Word)为单位表示;

– 记为Nb,Nb=分组长度 (bits)÷32;

– Nb= 4,6 或 8;

· AES加解密过程中的中间各步的结果称为一个状态(State);

· 状态(State)用以字节为基本构成元素的状态矩阵来表示

– 该距阵有4行,列数记为Nb

– Nb=分组长度 (bits)÷32;

– Nb= 4,6 或 8;

· 加解密过程中的轮变换数目 Nr 与明文长度 Nb 密钥长度Nk 有关;

加密过程:

非线性核心SubBytes:

是一非线性的字节代替,独立地在每个状态字节上进行运算。

它包括两个变换:

1. 在有限域GF(2^8)上求乘法逆,‘00’映射到它自身。

2. 在GF(2)上进行下面的仿射变换:

SubBytes可以用一个256字节的表来实现;

称为AES的字节代替表或S盒;

AddRoundKey(轮密钥加):

· 将轮密钥与状态按比特异或,

· 轮密钥是通过KeySchedule过程从密码密钥中得到的,

· 轮密钥长度等于分组长度。

累了,不说了

分组密码的工作模式:

– ECB(电码本):

ECB用于短数据(如加密密钥)时非常理想如果同一明文分组在消息中反复出现,产生的密文分组就会相同。因此,用于长消息时可能不够安全。

– CBC(密文分组链):

希望设计一种加密模式,克服ECB缺陷,使同一明文分组每次加密使用同一密钥,加密算法的输出是当前明文分组解密时每一个密文分组解密后,再与前一个密文分组异或加密算法的输入与明文分组之间不再有固定的关系,所以重复的明文分组不会在密文中暴露。除了能提供保密性外,还能用于认证,可以识别攻击者在密文传输中是否做了数据篡改

– CFB(密文反馈):

若待加密的消息必须按字节(8bits)加密处理时,可以采用CFB或OFB模式,这样做事实上是将DES转换成为流密码。· 流密码不需要进行消息填充,而且运行是实时的。因此,如果只是传送字符流,就可以用流密码对每个字符直接加密并传送。

除了拥有CBC模式的优点外,CFB模式能适应用户不同的数据格式的需要,即可以设计出 n-位CFB。CFB模式也有CBC的缺点,即导致错误传

播。CFB模式还有降低数据加密速度的缺点。

– OFB(输出反馈):

OFB与CFB类似,不同之处是OFB将加密算法的输出密文反馈到移位寄存器。与CFB模式相比,OFB的优点是传输过程中的比特错误不难于检测密文是否被篡改。如在密文中取1比特的补,那么在恢复后的明文中相应位置的比特也为原比特的补。因此,攻击者有可能对数据部分和校验部分同时进行修改,导致纠错码无法检测。

– CRT(计数器):

计数器模式(Couter Mode)下的分组密码算法使用序列号作为算法的输入。同OFB不同,不是用加密算法的输出填充寄存器,而是将一个计数器输出到寄存器中。每一个分组完成加密后,计数器都要增加某个常数,一般为1。CTR模式的同步和错误扩散特性同OFB模式完全一样,且它解决了OFB模式小于分组长度的n-位输出问题

分组密码在加密时的长度是固定的。而实用中待加密信息的数据量是不定的,数据格式也可能是多种多样的,为了能在各种应用场合安全地使用分组密码,通常对不同的使用目的运用不同的工作模式。

DES算法具有互补性,而这个特性会使DES在选择明文攻击下所需的工作量减半

在选择明文攻击下,

C1=Ek(m), (1)

C2= Ek() (2)

根据互补性, =E(m) (3)

根据(1)式穷举搜索密钥k时,入输出密文是C1,则加密密钥就是多应用的密钥;若输出密文是,根据(3)可知加密密钥是多应用的密钥的补,这样,利用一个密钥的加密尝试,能够检测两个密钥是否为真正的加密密钥。因此,DES的互补性会使DES在选择明文攻击下所需的工作量减半。

二重DES并不像人们想象的那样可提高密钥长度到112bit,相当于57bit

因为二重DES不能抵抗中途相遇攻击,其攻击原理如下:

加密算法:c=Ek2(Ek1(p)) ①

解密算法:p=Dk1(Dk2(c)) ②

其中为明文,c为密文,k1、k2为两个加解密的密钥,E和D分别为DES加密、解密算法。

根据①②式子可得中间值x=(Ek1(p)= Dk2(c).

因此,对于给定的明密文对(p,c):首先将p按所有可能的密钥k1加密,得到的加密结果排序放在表T内;然后将c用所有可能的密钥k2解密,每解密一次就将解密结果与T中的值比较。如果有相等者,就用刚才测试的两个密钥对p加密,若结果为c则认定这两个密钥是正确的密钥k1、k2。因此,已知明文攻击可以成功攻击密钥长度为112位的二重DES,其计算量级为256,与攻击DES所需的计算复杂度255相当。所以说二重DES并不像人们想象的那样可提高密钥长度到112bit,相当于57bit。

利用差分分析攻击DES算法的基本过程:

过程如下:首先攻击者选择具有固定差分(在DES分析中,“差分”定义为异或运算)的一对明文,这两个明文可以随机选取,攻击者甚至不必知道他们的值,但要求它们符合特定的差分条件;然后,使用输出密文中的差分,分析可能的密钥;随着分析的密文对越来越多有一个的概率明显增大,它就是正确的密钥。

线性攻击的基本原理:

基本原理是寻求明文、密文和密钥间有效的线性逼近,当该逼近的线性偏差足够大时,就可以由一定量的明密文对推测出部分密钥信息。线性分析的关键是确定有效线性方程的线性偏差和线性组合系数。

AES算法的正变换矩阵比逆变换矩阵简单的原因

逆S盒比S盒复杂,需要将逆S盒中的每个字节映射到它在有限域GF(28)中的逆。输出值不能通过一个简单的函数变换输入值所得到。S盒必须是可逆的,即S[S[a]]=a,而S[a]=S-1[a]不成立,在这个意义上S盒不是自逆的。

AES的子密钥生成过程:

AES首先将初始密钥输入到一个4*4矩阵中。这个4*4矩阵的每一列的4个字节组成一个字,矩阵4列的4个字依次命名为w[0]w[1]w[2]和w[3]。它们构成了一个以字为单位的数组w。

接着,对w数组扩充40个新列,构成总共44列的扩展密码数组。新列以如下的递归方式产生:

(1) 如果i不是4的倍数,那么第i列由如下等式确定:

w[i]=w[i-4] ⊕w[i-1]

(2) 如果i是4的倍数,那么第i列由如下等式确定:

w[i]=w[i-4] ⊕T(w[i-1])

其中,T是一个复杂的函数。

函数T由三个部分组成:自循环、字节代换和轮常量异或,这三部分的作用分别如下:

(1) 字循环:将1个字中的4个字节循环左移1个字节。

(2) 字节代换:对字循环的结果使用S盒进行字节代换。

(3) 轮常量抑或:将前两步的结果同轮常量Rcon[j]进行异或,其中J表示轮数。

简述DES与AES的相同之处

①二者的轮函数都是由3层构成,非线性层、线性混合层、子密钥异或,只是顺序不同。

②AES的子密钥异或对应于DES中S盒之间的子密钥异或。

③AES的列混合运算的目的是让不同的字节相互影响,和DES中F函数的输出与左边一半数据相加也有类似的效果。

④AES的非线性运算是字节代换,对应于DES中唯一的非线性运算S盒。

⑤行移位运算保证了每一行的字节不仅仅影响其他行对应的字节,而且影响其他行所有的字节,这与DES中置换P相似。

实际分组密码的工作模式应遵循的基本原则

①工作模式的运行应当简单;

②工作模式应当不会损害算法的安全性;

③工作模式应当不会明显的降低基本密码的效率;

④工作模式应易于实现。

密码分组连接模式(CBC)一个分组发生错误将影响对应解密明文分组和其后的一个解密明文分组;
密码反馈模式(CFB)明文的一个错误会应影响所有后面的密文以及在解密中的逆;
输出反馈模式(OFB)某位发生错误不会影响其他位;
电子密码本模式(ECB)明文错误与密文错误一一对应。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: