1、第3章 分组密码第第3 3章章 分组密码分组密码3.1DES 3.2 IDEA373.3 AES41习题习题 3实践练习实践练习 3 第3章 分组密码 分组密码是将明文分成固定长度的一些段落(分组),在密钥作用下逐段进行加密的方法。这样做的好处是处理速度快,可靠性高,软(硬)件都能实现,而且节省资源,容易标准化。因此,分组密码得到了广泛的应用,同时也使分组密码成为许多密码组件的基础,比如MAC(消息认证码)系统。第3章 分组密码3.1DES 美国国家标准局1977年公布了由IBM公司研制的DataEncryptionStandard(DES)作为非机要部门的数据加密标准。它是迄今为止流行最广、
2、时间最长的加密算法,也是现代分组加密技术的典型。原规定使用期10年,然而10年来并未发现有任何攻击能够威胁到它的安全,且比它更好的标准尚未产生,所以直到20世纪90年代,它一直在延期使用。可见它是很成功的。此后产生的许多加密方法都直接或间接地受到了它的启发。第3章 分组密码3.1.1DES加密算法加密算法2 明文分组长64bit,m=m1,m2,,m64。密钥长56bit,加上每7bit一个奇偶校验位,共64bit。加密过程可表达为 DES(m)=IP-1T16T15T2T1IP(m)(3-1)1.置换与逆置换置换与逆置换 IP是初始置换,IP-1是逆置换,分别按表3.1的序号置换数据的bit
3、值。不难验证:IP*IP-1=IP-1*IP=1。第3章 分组密码表表3.1DES加密系统中的加密系统中的IP置换与逆置换表置换与逆置换表 第3章 分组密码 2.迭代加密运算迭代加密运算 将IP置换后的64bit明文分成两半,各32bit,分别进入加密器的左、右两个入口,先后经T1,T2,T16进行16轮迭代加密运算。每轮加密Ti流程如图3.1所示。其中,表示按位模2加;表示扩展与收缩函数 f(Ri-1,ki)。处理后:Li=Ri-1,Ri=Li-1 f(Ri-1,ki)(3-2)值得注意的是,在最后一轮加密后,左、右两半不再交换位置。3.扩展与收缩函数扩展与收缩函数 (Ri-1,ki)函数的
4、具体结构如图3.2所示。第3章 分组密码图3.1 第i轮加密Ti流程图 第3章 分组密码图3.2 扩展与收缩函数(Ri-1,ki)的结构 第3章 分组密码 图3.2中符号的说明如下:(1)E为扩展变换,将32bit扩展为48bit,其方法是将信息的某些bit位重复:234545678989101112131213141516171617181920212021 2223242524252627282928293031321321 (2)表示48bit明文与48bit密钥模2加。(3)经S盒处理,将48bit数据变回32bit。48bit数据被分成8组,每组6bit,第i组为b1b2b3b4b5
5、b6,送入Si处理。Si是一个4行16列的表,6bit输入数据中,b1b6构成的二进制数给出行序号(0,1,2,3),b2b3b4b5构成的二进制数给出列序号(015)。查表得到015的十进制数,化为二进制就是4bit的输出数据(y0y1y2y3)。8个Si分表共输出32bit。S盒的结构如表3.2所示。(4)再经置换P,结束本轮加密,最终结果如表3.3所示。第3章 分组密码表表3.2 DES加密系统中的加密系统中的S盒数据对照表盒数据对照表 第3章 分组密码续表第3章 分组密码表表3.3 f(Ri-1,ki)函数中函数中P置换的重排列次序置换的重排列次序 第3章 分组密码 4.子密钥的产生子
6、密钥的产生 从原始的密钥出发,为16轮加密产生出16个不同的子密钥ki(i=1,2,3,16):(1)除去校验位(8、16、24、32、40、48、56、64位),并按PC-1重排,如表3.4所示。(2)C0,D0是左右各半,分别按图3.3所示的流程进行处理。(3)LSj是循环左移操作,移动位数因子密钥序号j而不同,由表3.5给出。(4)PC-2把左右两路数据合并,同时再次被重排次序,并且从56bit中选出48bit位(取掉了9、18、22、25、35、38、43、54位),作为子密钥输出,如表3.6所示。第3章 分组密码表表3.4 产生各轮子密钥时的产生各轮子密钥时的PC-1重排方式重排方式
7、 第3章 分组密码图3.3产生子密钥的流程图(只画出两个,其余相同)第3章 分组密码表表3.5 产生各轮子密钥时循环左移的位数产生各轮子密钥时循环左移的位数 表表3.6 输出输出48bit子密钥的各子密钥的各bit重排列次序重排列次序 第3章 分组密码 【例1】用密钥program对明文computer加密。解解:密钥和明文的ASCII码为 k=0111000001110010011011101100111011100100110000101101101(共56bit)m=0110001101101111011011010111000001110101011101000110010101110
8、010 明文经IP置换后得:L0=11111111101110000111011001010111 R0=0000000111111110000011010000011 密钥经PC-1分组置换后得:C0=1110110010011001000110111011 D0=1011010001011000100011100110 第3章 分组密码 各左移1位再通过PC-2变换得48bit子密钥:k=00111101100011111100110100110111001111110100100 R0(32bit)经E作用扩展为48bit:R0 =1000000000010111111111101000
9、0000110101000000011 再与k1相异或得:R0 k1 =101111011001100000110011101101111110101101001110 分成8组:101111,011001,100000,110011,101101,111110,101101,001110 第3章 分组密码 通过S盒后输出32bit:01110110001101000010011010100001 再经过P置换,这才得到(R0,k1)的结果:01110110001101000010011010100001然后与L0模2加,赋值给R1,同时原来的R0赋值给L1,完成第1轮加密。得到:L1=000
10、00000111111110000011010000011 R1=10111011100110001110100011001000如此循环加密16次,得到:L16=0101000101010000100000110111000 R16=01101001111111101010111000110011 DES的加密结果,每一比特都是明文m与密钥k的每一比特的复杂函数,明文或密钥每改变一个比特,都会对密文产生巨大影响。第3章 分组密码3.1.2解密算法解密算法 DES的解密十分简单,仍然使用加密一样的模块,次序倒过来就行了。这是因为:DES(m)=IP-1T16T15T2T1IP(m)若取DES-
11、1(c)=IP-1T1T2T15T16IP(c)(3-3)就有 DES-1(c)=DES-1DES(m)=IP-1T1T2T15T16IP IP-1T16T15T2T1IP(m)第3章 分组密码 首先,IPIP-1=1,中间IPIP-1相抵消后,两个T16相连。加密过程的T16处理前是L15R15,处理后 R16=L15 f(R15,k16),L16=R15再经解密过程的T16处理(见图3.4),得 L=R15 R=L15 f(R15,k16)f(R15,k16)=L15 (模2加时,两个相同的处理必抵消)两个T16处理前是L15R15,处理后仍得到L15R15,可见T16T16=1,同理,各
12、个 TiTi=1 i=1,2,3,16最后又是IPIP-1=1,于是 DES-1(DES(m)=m第3章 分组密码图3.4 T16T16=1的证明 第3章 分组密码3.1.3关于关于DES的安全问题的安全问题 1弱密钥 有个别密钥不适合于DES算法,比如使子密钥产生器中C0和D0为全0或全1的密钥,无论怎样循环移位都不变,致使16次迭代所用的子密钥不变,造成 T1=T2=T16,DESk(m)=(m)或写为 DESk(DESk(m)=m安全性就失去了保证。这样的密钥最好不用,它们叫做弱密钥,共4个,用十六进制表示,它们是:0101010101010101,1F1F1F1F1F1F1F1F,E0
13、E0E0E0E0E0E0E0,FEFEFEFEFEFEFEFE,1DESk第3章 分组密码1DESk 还有12个半弱密钥k和k,它们成对使 DESk(m)=(m)它们是:01FE01FE01FE01FE和FE01FE01FE01FE01,1FE01FE00EF10EF1和E01FE01FF10EF10E,01E001E001F101F1和E001E001F101F101,1FFE1FFE0EFE0EFE和FE1FFE1FFE0EFE0E,011F011F010E010E和1F011F010E010E01,E0FEE0FEF1FEF1FE和FEE0FEE0FEF1FEF1第3章 分组密码 2DE
14、S的安全性的安全性 DES由于未遇到敌手而超期服役,直到20世纪90年代,Shamir等人提出“差分分析法”,才对DES构成了理论上的威胁。后来的“线性逼近法”需要已知明文,且需要243=4.3981012对明密文,联合十多台工作站工作十多天才可以搜索到密钥。DES终于完成了它的历史使命,但它的思想还是值得借鉴的。分析表明,DES的薄弱之处不是算法,而是密钥太短,只有56bit,7个英文字符!为遍历法搜索提供了可能。3.1.4DES的变形的变形(改进改进)1三重加密方式三重加密方式 针对DES密钥太短的问题,提出了如图3.5所示的三重加密方式,使它的复杂度增加。第3章 分组密码图3.5两种三重
15、DES加密方式 第3章 分组密码 2密文分组连接方式密文分组连接方式(CBC)原来的做法是将明文分组加密后,把各组密文连接起来,称为电码本方式(ECB)。现改为第一组加密的结果,与第二组明文相加后再加密。一方面将此密文组输出,另一方面与下一组明文相加后再加密,作为下一密文分组,最后将各组加密结果链接,如图3.6(a)所示。3密文反馈方式密文反馈方式(CFB)如图3.6(b)所示,每块(分组)与前块送过来的加密结果相异或后,作为本块输出,并加密后送往下一级作同样的处理。4输出反馈方式输出反馈方式(OFB)如图3.6(c)所示,初始矢量被一次次地加密,分别与每块(分组)数据相异或后,作为本块输出,
16、这样,各块的密文就是相互独立的,不再相互影响。第3章 分组密码图3.6三种改进的DES加密方式(a)CBC方式;(b)CFB方式;(c)OFB方式 第3章 分组密码3.2IDEA 20世纪90年代,出现了很多优秀的加密算法,本节介绍其中三种。3.2.1IDEA算法算法2 IDEA(InternationalDataEncryptionAlgorithm,国际数据加密算法)是由中国学者朱学嘉博士和JamesMassey在1990年合作提出的,1992年完成。它的加解密运算速度都很快,无论是用软件实现,还是用硬件实现都不难,成为替代DES的优选算法之一。IDEA的密钥是128bit,而明文分组仍为
17、64bit,分成四个子块X1X2X3X4,各16bit,进行8轮循环迭代加密运算。每次加密的过程如图3.7所示。第3章 分组密码图3.7IDEA迭代加密运算原理 第3章 分组密码 图3.7中,表示模2加(异或);表示模216+1的乘法;表示模216的加法。是第一轮加密使用的六个子密钥,它们来自128bit密钥的顺序分组(每组16bit,共8组)的前六组。第二轮处理的算法相同,只是所用的子密钥不同,和 是第一轮子密钥取剩下的两个分组,则来自128bit密钥循环左移25位后再分成8组的前四个分组,而后四个分组留给第三轮子密钥的 ,和 则来自128bit钥再次循环左移25位之后的8个分组。如此下去,
18、直到第八轮迭代。第九轮不同于前八轮,不再需要 和 有关的迭代加密过程,实际上只有如图3.8所示的一步。最后将 连接起来即是密文。(1)1Z(1)6Z(2)1Z(2)2Z(2)3Z(2)6Z(3)1Z(3)4Z(3)5Z(3)6Z(9)5Z(9)6Z(9)1X(9)4X第3章 分组密码图3.8IDEA迭代加密的第九轮运算 第3章 分组密码 IDEA解密和加密算法相同,只是子密钥不同。加、解密的密钥如下:第3章 分组密码其中,Z-1是Z的模(216+1)的乘法逆元,-Z是Z的模216的加法逆元。由于IDEA的密钥长度是DES的一倍,所以用同样的方式攻击IDEA,所需工作量是DES的272=4.71
19、021倍。许多科研部门和军事部门对IDEA进行攻击测试,未见成功报道。【例2】密钥为computersecurity,对明文Tsinghua加、解密。解解:密钥和明文的ASCII码为 k=11000110111101101011011000001110(共816=128bit)m=00101010110011101001011001110110(共88=64bit)X1=(0111001101010100)2=29524(注意先输入的为低位,后输入的为高位)第3章 分组密码 =(0110111101100011)2=28515(注意高低位顺序)X1 =X1 mod(216+1)=2952428
20、515mod65537 =54091=(1101001101001111)2 X1 =(0110111001101001)2 (0111000001101101)2 =28265+28781mod65536=57046 =(1101111011010110)2 按算法迭代8次后,得密文:c=11011000001100110110100011010010(共88=64bit)当密钥k改变一位时,所得的密文有29位改变;当明文m改变一位时,所得的密文有31位改变。(1)1Z(1)1Z(1)1Z(1)1Z第3章 分组密码3.2.2NSSU NSSU是前苏联国家标准,密钥为256bit,迭代32次。
21、明文分成左右32bit,第i轮加密钥:Li=Ri-1,Ri=Li-1(Ri-1,ki)(3-4)ki是第i轮的子密钥。第i轮加密流程如图3.9所示。函数 f (Ri-1,ki)的定义是首先Ri-1与ki作模232的加法,即 S(Ri-1 ki)mod 232然后将S分成8组,每组4 bit,输入到8个S盒中。S盒的结构见表3.7。S盒的输入(i1,i2,i3,i4)与输出(j1,j2,j3,j4)的关系为 (j1,j2,j3,j4)=Sk(i1,i2,i3,i4)第3章 分组密码图3.9NSSU的第i次加密流程 第3章 分组密码表表3.7 NSSU的的S盒结构盒结构 第3章 分组密码 例如,第
22、1分组 (i1,i2,i3,i4)=(1001)2=9查S盒的第1行,有 S1(9)=11=(1011)2则 (j1,j2,j3,j4)=1011即 j1=1,j2=0,j3=1,j4=1又如,第7分组 (i1,i2,i3,i4)=(1101)2=13 第3章 分组密码 查S盒的第7行,有 S1(13)=8=(1000)2则输出为 j1=1,j2=0,j3=0,j4=0 S盒的全体输出为32 bit,循环左移11位后再与Li-1作 运算,即得Ri。子密钥的产生异常简单:将256 bit密钥分成8份,每份32bit,称为一个子密钥。每轮所用的密钥按表3.8从这8个子密钥中选取。第3章 分组密码表
23、表3.8 NSSU的子密钥选取的子密钥选取 第3章 分组密码3.2.3TEA TEA由英国剑桥大学的David.W和Roger.N提出,特点是加密速度极快,抗差分攻击能力强。TEA的明文为64bit,密钥为128bit,算法十分简单。它的迭代次数可变,32次很充分,16次足够,8次亦可行。算法如下:S1(初始化)明文分成v(0)和v(1)两部分,各32bit,赋值:yv(0),zv(1),Sum0,Delta9E3779B9 (十六进制数)密钥分成k(0),k(1),k(2),k(3)四部分,各32bit,且 ak(0),bk(1),ck(2),dk(3),n32 第3章 分组密码S2 若n0
24、,则转S3,否则转S4。S3SumSum+Delta;yy+(z5)+b;zz+(y5)+d;nn-1,转S2。S4 v(0)y,v(1)z,结束。其中,是按位异或,即模2加;是右移,低位舍弃,高位补零。TEA的解密算法如下:S1(初始化)yv(0),zv(1),Delta9E3779B9,SumC6EF3720;ak(0),bk(1),ck(2),dk(3),n32 第3章 分组密码S2 若n0,则转S3,否则转S4。S3 zz*(y5)+d;yy*(z5)+b;SumSum-Delta;nn-1,转S2。S4 v(0)y,v(1)z,结束。第3章 分组密码3.3AES AES是21世纪分组
25、加密技术的最新发展。1999年美国政府向全世界公开征求下一代密码算法,以取代DES标准。这次活动是1997年4月15日由美国标准技术研究所(NIST)发起的,称为AES(AdvancedEncxyptionStandard)活动。1999年从初选的15个算法中筛选了5个为候选标准,它们是MARS、RC6、Rijndael、Serpent和Twofish。2000年10月2日正式宣布Rijndael将不加修改地作为AES标准算法。3.3.1Rijndael算法算法4 Rijndael算法是比利时学者J.Daemaen和V.Rijndael提出的,它采用代替置换网络,即SP结构进行迭代运算。每一轮
26、第3章 分组密码由三层组成:线性混合层,确保多轮之上的高度扩散;非线性层,由非线性S盒构成,起到混淆的作用;密钥加层,把子密钥简单异或到中间状态上。S盒采用GF(28)域中的乘法逆运算,本原多项式取为m(x)=x8+x4+x3+x+1,即十六进制的“11B”。它的差分均匀性和线性偏差均达到最佳。Rijndael是一个数据块长度和密钥长度都可变的分组密码。数据块和密码长度可以分别是128bit、192bit、256bit。首先把数据块写成“字”的形式,每个字包含4个字节,每个字节8bit。密钥也写为字的形式(见下面的数据),下列数据中每列是一个字。第3章 分组密码 a00a01a02;k00k0
27、1k02 a10a11a12;k10k11k12 a20a21a22;k20k21k22 a30a31a32;k30k31k32 设数据块字数为Nb,密钥字数为Nk;则迭代次数Nr的数值取决于Nb和Nk,其值由表3.9决定。加密过程按图3.10算法迭代Nr次,最后一轮迭代没有列混合,其他各轮相同。第3章 分组密码表表3.9 迭代次数迭代次数Nr取决于取决于Nb和和Nk 第3章 分组密码图3.10Rijndael算法的一次迭代流程 第3章 分组密码 1.字节变换字节变换(ByteSub)aj是第j列的字:ByteSub(aj)=(ByteSub(a0j),ByteSub(a1j),ByteSub
28、(a2j),ByteSub(a3j)(3-5)它的变换为01100011 0001111100111110011111001111100011110001111000111100011110001111)ByteSub(1ijijaa(3-6)第3章 分组密码式中,是aij在GF(28)域的乘法逆元。实际上,字节变换可以事先计算出来,以列表形式存储,就如同S盒一样,靠查表就能方便地完成变换。这张表从015共16行、16列(见表3.10)。比如欲变换的字节是8B,则查8行B列,结果是3D。2.行移变换行移变换(ShiftRow)数据块第0行不变,第一行循环左移c1字节,第二行循环左移c2字节,第
29、三行循环左移c3字节。c1c2c3的值根据Nb的大小确定,见表3.11。第3章 分组密码表表3.10 Rijndael的的S盒盒 第3章 分组密码表表3.11 行移变换中的循环左移值行移变换中的循环左移值 第3章 分组密码 3.列混合变换列混合变换(MixColumn)jjaca)MixColumn(其中,aj看成是GF(28)x/(x4+1)这个环中的元素;是环中的乘法,定义为jjjjjjjjaaaaccccccccccccccccaaaa321001233012230112303210MixColumn(3-8)c=03x3+01x2+01x+02是一个常矢量,于是列混合变换可以简单地当作
30、一个矩阵相乘运算,不过相乘的第3章 分组密码各个矩阵元都是GF(28)域的元素,遵循域运算规则而已。之所以选c3=03,c2=01,c1=01,c0=02,为的是计算简单,同时由于c与x4+1互素,因此c有逆元:d=0Bx3+0Dx2+09x+0E因而解密时的逆矩阵存在。4.子密钥的产生子密钥的产生 Nr轮加密共需Nr+1个子密钥,每个子密钥均由Nk个字(每字又包含4个字节)构成。比如Nb=4且Nk=4时,Nr=10,加密共需11个子密钥,第i个子密钥由4个字构成,它们是:W(4i),W(4i+1),W(4i+2),W(4i+3)i=0,1,2,10 第3章 分组密码 第0个子密钥用于10轮加
31、密之前,它就是原始密钥:W(0)=(k00,k10,k20,k30),W(1)=(k01,k11,k21,k31)W(2)=(k02,k12,k22,k32),W(3)=(k03,k13,k23,k33)其他10个子密钥均由原始密钥的扩展与重组得到。其方法是:(1)如果 j不是4的倍数,则W(j)=W(j-4)W(j-1),比如W(5)=W(1)W(4)。(2)如果j是4的倍数,比如W(4)、W(8)则W(j)=W(j-4)T(W(j-1)。其中,T(W(j-1)是对W(j-1)作变换得到的:首先将W(j-1)的4个字节作左移轮换,即(k0,k1,k2,k3)(k1,k2,k3,k0),然后做
32、字节变换,即通过查S盒对4个字节作替换,最后得到第3章 分组密码),),()1(hgfjrejWT式中,(e,f,g,h)是S盒替换后的4个字节数据,而r(j)=012(j-4)/4是GF(28)域中计算的循环常数。即r(4)=01,其他j=4i时,r(j)=2r(j-4)。于是10轮循环常数分别求出为01,02,04,08,10,20,40,80,1B,36(注意这里是域运算:280=100mod m(x)=1B)。在Nb和Nk为其他值的情况下,子密钥扩展的普遍公式是:当i=0,1,,Nk-1时,有 Wi=ki (3-9)第3章 分组密码 当NkiNb(Nr+1)-1时,有其它 时4)(mo
33、d且6当 Bytesub整数倍时是当 )tate(Bytesub(Ro11con1iNikkiNikkiNiikkkWNiNWNiNiRWWWWW(3-10)式,Rotate(a,b,c,d)表示左移一个字节,即 Rotate(a,b,c,d)=(b,c,d,a)且 Rconi=(RCi,00 ,00 ,00)GF(28)x/(x4+1)而 RCi=xi-1GF(28)最后,第i个子密钥选取为 。1)1(1 iNiNiNbbbW,WW第3章 分组密码 5.Rijndael的安全性的安全性 Rijndael的安全性表现在:(1)对密钥没有任何限制,不存在弱密钥。(2)能有效抵抗目前已知的各种攻击
34、方法,如差分攻击、相关密钥攻击、插值攻击等。(3)良好的理论基础使设计者可高强度地隐藏信息。(4)关键常数的巧妙选择使计算速率可达1Gbit/s。(5)可以实现MAC、Hash、同步流密码、随机数生成等其他功能。Rijndael目前已经有效地应用在奔腾机、智能卡、ATM机、B-ISDN、卫星通信等方面。第3章 分组密码3.3.2Camellia算法算法4 Camellia算法由日本三菱公司和日本电话电报公司联合设计,支持128bit分组的明文和128bit、196bit、256bit的密钥,达到了AES的要求。1.Camellia的构造的构造 1)加密过程 对于128bit的密钥,规定迭代18
35、轮,每轮加密都相同,如图3.11所示;对于192bit和256bit的密钥,应迭代24轮,只需在图3.12中再增加6轮加密和一对FL和FL-1处理即可。2)解密过程 与加密过程类似,只是颠倒密钥顺序。第3章 分组密码图3.11 Camellia算法的某一轮加密 第3章 分组密码图3.12 Camellia算法的18轮加密 第3章 分组密码 3)密钥方案 首先根据三种不同长度的密钥K,用不同方式给128bit的KL和KR赋值,再由图3.13的方式生成两个128bit的中间变量KA和KB。对128bit的密钥K,有KL=K,KR=0(128个0);对192bit的密钥K,有KL=K(前 128 b
36、it),KR=K(后 64 bit)K(后64 bit);对256 bit 的密钥K,有KL=K(前 128 bit),KR=K(后128 bit)。其中,K(前128 bit)表示K的前面128 bit;K(后64 bit)表示K的后面64位;K(后64 bit)表示K的后面64位的反码;表示顺序连接。图3.13中所用的常数i定义为第i个素数的平方根的十六进制表达的第二位到第十七位连续值。它们是:第3章 分组密码 1=A09E667F3BCC908B,2=B67AE8584CAA73B2 3=C6EF372FE94F82BE,4=54FF53A5F1D36F1C 5=10E527FADE68
37、2D1D,6=B05688C2B3E6C1FD 然后,分别由KLKRKAKB循环移位生成加密所需要的各个子密钥。18(或24)轮加密运算中共用到18(或24)个子密钥ki,4个子密钥kwi,4个子密钥kli,它们均由KLKRKAKB循环移位生成,循环方式见表3.12和表3.13。第3章 分组密码图3.13Camellia算法的密钥方案 第3章 分组密码表表3.12 128bit密钥生成的子密钥密钥生成的子密钥 第3章 分组密码表表3.13 192bit和和256bit密钥生成的子密钥密钥生成的子密钥 第3章 分组密码2.Camellia组件组件 1)F函数 图3.14表示的F函数将64bit数
38、据用64bit密钥加密,具体结构为式中,S是8个并行的88的S盒代替运算;P是基于字节的线性变换。图中,64bit的数据X分成8组,各8bit;64bit的密钥也分成8组,各8bit,分别模2加,得到数据Y;Y进入S盒进行代替运算,得到数据Z;再经线性变换P后得到Z。(3-11)(),(64)(64)(64)(64)(64)iikXSPkXFZ第3章 分组密码图3.14 Camellia算法的F函数 第3章 分组密码 2)S盒 Camellia组件总共用了4个不同的88双射S盒,排列次序见图3.14。S1:y(8)h(g(f(C5 y(8)6Ez(8)(3-12)S2:y(8)S1(y(8)1
39、z(8)(3-14)S4:y(8)S1(y(8)1z(8)(3-15)其中,f,g,h均实现字节变换,即a1a2a8b1b2b8,具体为f:b1=a6 a2,b2=a7 a1,b3=a8 a5 a3,b4=a8 a3 b5=a7 a4,b6=a5 a2,b7=a8 a1,b8=a6 a4 (3-16)g:(b8+b7+b62+b55)+(b4+b3+b22+b15)=1/(a8+a7+a62+a53)+(a4+a3+a22+a13)(3-17)第3章 分组密码式中,是GF(28)上满足8+6+5+3+1=0的元素;=238=6+5+3+2,是GF(28)中满足4+1=0的元素。h:b1=a5
40、a6 a2,b2=a6 a2,b3=a7 a4,b4=a8 a2 b5=a7 a3,b6=a8 a1,b7=a5 a1,b8=a6 a3(3-18)S盒可以用硬件电路实现,也可以进行查表运算。3)P字符变换 P字符变换为 Z=PZ其中:第3章 分组密码1011011111011011111011010111111011000111011010110011110110011110P(3-19)4)FL/FL-1函数 引入FL和FL-1是为了提供轮间的不规则性,加强抗攻击性能。FL/FL-1仅由逻辑运算组成,如与、或、异或以及循环左移等,它的软、硬件实现都很快,如图3.15所示。第3章 分组密码
41、图3.15中 为与运算;为或运算;为异或运算;为循环左移1位的运算。图3.15Camellia算法的FL和FL-1函数 第3章 分组密码3.3.3RC6算法算法 RC6是RSA公司提给NIST的候选算法。它的全称是RC6-w/r/b。w=32,是明文分组的比特数,r=20,是加密轮数,b=16(24,32),是字节表示的密钥长。RC6用了下列几种基本运算:(1)整数模2w加和减,分别表示为+和-。(2)比特逐位模2加,表示为。(3)整数模2w乘,表示为。(4)循环左移ROL、循环右移ROR分别表示为。1.加密过程加密过程 把128bit明文放入4个32bit的寄存器A,B,C,D中,Si(i=
42、0,1,2r+3)是2r+4个子密钥,共经过r轮循环处理,其中第i轮的处理为 第3章 分组密码 FORi=1 to r do t=ROL(B(2B+1),lb w)u=ROL(D(2D+1),lb w)A=ROL(A t,u)+S2i C=ROL(C u,t)+S2i+1 (A,B,C,D)=(B,C,D,A)最后一轮之后,做A=A+S2r+2,C=C+S2r+3处理,(A,B,C,D)即为密文。RC6的加密过程如图3.16所示。第3章 分组密码图3.16 RC6的加密过程 第3章 分组密码 2.解密过程解密过程 128 bit密文放入4个32 bit的A,B,C,D中,A=A-S2r+2,C
43、=C-S2r+3,仍须r轮循环处理:FORi=r to1do (A,B,C,D)=(D,A,B,C)u=ROL(D(2D+1),lb w)t=ROL(B(2B+1),lb w)C=ROR(C-S2i+1,t)u A=ROR(A-S2i,u)t 最后一轮之后,做B=B-S0,D=D-S1处理,(A,B,C,D)即为明文。第3章 分组密码 3.子密钥的产生子密钥的产生 令Pw=B7E15163,Qw=9E3779B9,c=8b/w的整数部分;首先将种子密钥k放入c个w比特的阵列L0,L1,Lc-1中,不够补0;再做如下处理:S0=Pw FOR i=1 to 2r+3 do Si=Si-1+Qw A
44、=B=i=j=0 v=3maxc,2r+4 FORs=1 to v do A=Si=ROL(A+B+Si,3)第3章 分组密码 B=Lj=ROL(A+B+Lj,A+B)i=i+1mod(2r+4)j=j+1mod c输出的S0,S1,S2r+3即为子密钥。4.RC6的特点的特点 RC6有如下的特点:(1)对内存要求很低(无需查表),可以在单片机上实现,比如可在IC卡上用。(2)抗攻击性好,用线性分析法至少需要2155个明文,用差分分析法至少需要2238个明文。第3章 分组密码习题习题3 1.在DES数据加密标准中,设主密钥K(64位)为 K=00000001*00100011*01000101
45、*01100111*10001001*10101011*1100 1101*11101111*其中,*号前面的码为奇偶校验位。请分别求出:(1)经PC-1选定后的C0、D0(56 bit)的结果。(2)经循环左移LS1=1位后的C1,D1的结果。(3)由C1、D1再经PC-2选择后的K1(48 bit)的结果。2.已知输入为011001和110010,根据DES的S盒的特殊性质,分别从S3和S7中求出压缩输出。第3章 分组密码 3.在IDEA密码算法中,已知明文m和密钥k分别如下:m=1010101011110000010101010000111111001100001100111010101
46、001010101 k=00000000000000001111111111111111111111111111111100000000000000001111000011110000111100001111000000001111000011110000111100001111试求出第一轮变换后的输出和第二轮的输入。4.计算机存储口令的普遍方法是用户通过口令用DES加密一个固定的明文(比如000000),将密文存储在文件中。当用户再次登录时,询问口令并重复此过程,然后比较密文。为什么这种方法比直接核对口令或者存储加密的口令更安全?第3章 分组密码 5.设分组长度为128bit,如果输入为“Alicejustdoit”,初始密钥使用10101010020202023030303006060606,那么第一轮的AES输出是什么?第3章 分组密码实践练习实践练习3 实验题目:实验题目:DES(或AES)进行分组加密与解密练习。实验平台:实验平台:TurboC。实验内容:实验内容:对任意明文用DES或AES进行分组加密与解密。实验步骤:实验步骤:(1)对任意长度明文进行分组。(2)把密钥与明文分组都变成二进制码。(3)实现一组的加密运算。(4)借助循环实现各组的加密。(5)实现密文的解密以验证加密过程。
侵权处理QQ:3464097650--上传资料QQ:3464097650
【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。