实验二对称密码基本加密课案.docx
《实验二对称密码基本加密课案.docx》由会员分享,可在线阅读,更多相关《实验二对称密码基本加密课案.docx(15页珍藏版)》请在冰豆网上搜索。
实验二对称密码基本加密课案
西北师范大学计算机科学与工程学院学生实验报告
学号:
2013710601132016年3月13日
系别
计算机
专业
2013级物联网
班级
物联网
(1)班
姓名
金东海
课程名称
物联网信息安全实验
课程类型
专业课
学时数
实验名称
对称密码基本加密
实验内容:
通过运算器工具实现DES、3DES、IDEA、AES-128/192/256、SMS4等算法的加解密计算
通过流程演示工具完成DES算法加解密运算的逐步演示和实例演示
通过轮密钥查看工具查看3DES和AES的轮密钥生成过程
查看AES算法逐步计算的动画演示
对DES、3DES、IDEA、AES-128/192/256、SMS4等算法的加解密进行扩展实验
对DES、3DES、IDEA、AES-128/192/256、SMS4等算法的加解密进行算法跟踪
实验原理:
对称密码体制使用相同的加密密钥和解密密钥,其安全性主要依赖于密钥的保密性。
分组密码是对称密码体制的重要组成部分,其基本原理为:
将明文消息编码后的序列m0,m1,m2,…,mi划分为长度为L(通常为64或128)位的组m=(m0,m1,m2,…,mL-1),每组分别在密钥k=(k0,k1,k2,…,kt-1)(密钥长度为t)的控制下变换成等长的一组密文输出序列c=(c0,c1,c2,…,cL-1)。
分组密码的模型如图1.1.41所示。
图1.1.41
分组密码实际上是在密钥的控制下,从一个足够大和足够好的置换子集中简单而迅速地选出一个置换,用来对当前输入的明文分组进行加密变换。
现在所使用的对称分组加密算法大多数都是基于Feistel分组密码结构的,遵从的基本指导原则是Shannon提出的扩散和混乱,扩散和混乱是分组密码的最本质操作。
分组密码与流密码的对比:
分组密码以一定大小的分组作为每次处理的基本单元,而流密码则以一个元素(如一个字母或一个比特)作为基本的处理单元;流密码使用一个随时间变化的加密变换,具有转换速度快、低错误传播的优点,软硬件实现简单,缺点是低扩散、插入及修改不敏感;分组密码使用的是一个不对时间变化的固定变换,具有扩散性好、插入敏感等优点,缺点是加解密处理速度慢、存在错误传播。
一、DES算法
数据加密标准(DataEncryptionStandard,DES)中的算法是第一个也是最重要的现代对称加密算法,其分组长度为64比特,使用的密钥长度为56比特(实际上函数要求一个64位的密钥作为输入,但其中用到的有效长度只有56位,剩余8位可作为奇偶校验位或完全随意设置),DES加解密过程类似,加解密使用同样的算法,唯一不同的是解密时子密钥的使用次序要反过来。
DES的整个体制是公开的,系统安全性完全依靠密钥的保密。
DES的运算可分为如下三步:
(1)对输入分组进行固定的“初始置换”IP,可写为(L0,R0)=IP(输入分组),其中L0和R0称为“(左,右)半分组”,都是32比特的分组,IP是公开的固定的函数,无明显的密码意义。
(2)将下面的运算迭代16轮(i=1,2,…,16):
Li=Ri-1,Ri-1=Li-1
f(Ri-1,ki);这里ki称为轮密钥,是56比特输入密钥的一个48比特字串,f称为S盒函数(S表示交换),是一个代换密码,目的是获得很大程度的信息扩散。
(3)将十六轮迭代后得到的结果(L16,R16)输入到IP的逆置换来消除初始置换的影响,这一步的输出就是DES算法的输出,即输出分组=IP-1(R16,L16),此处在输入IP-1之前,16轮迭代输出的两个半分组又进行了一次交换。
DES的加密与解密算法都是用上述三个步骤,不同的是如果在加密算法中使用的轮密钥为k1,k2,…,k16,则解密算法中的轮密钥就应当是k16,k15,…,k1,可记为(k1`,k2`,…,k16`)=(k16,k15,…,k1)。
DES算法的一轮迭代处理过程如图1.1.42所示。
图1.1.42
DES的计算过程如图1.1.43所示。
图1.1.43
在加密密钥k下,将明文消息m加密为密文c,使用DES将c在k下解密为明文,解密过程如下:
(L0`,R0`)=IP(c)=IP(IP-1(R16,L16)),即(L0`,R0`)=(R16,L16);在第一轮中,L1`=R0`=L16=R15,R1`=L0`
f(R0`,k1`)=R16
f(L16,k1`)=[L16
f(R15,k16)]
f(R15,k16)=L15,即(L1`,R1`)=(R15,L15);同样的,在接下来的15轮迭代中,可以得到(L2`,R2`)=(R14,L14),……,(L16`,R16`)=(R0,L0);最后一轮结束后,交换L16`和R16`,即(R16`,L16`)=(L0,R0),IP-1(L0,R0)=IP-1(IP(m))=m,解密成功。
二、3DES算法
DES的一个主要缺点是密钥长度较短,同时也被认为是DES仅有的最严重的弱点,容易遭受穷举密钥搜索攻击。
克服密钥较短缺陷的一个解决方法是使用不同的密钥,多次运行DES算法,3DES应运而生。
3DES具有四种使用模式,其中的一种为加密-解密-加密的3DES方案,加解密过程可表示为:
,其中
。
三、IDEA算法
1990年,瑞士联邦理工学院的中国青年学者来学嘉(XuejiaLai)和著名密码专家JamesL.Massey在EUROCRYPT1990国际会议上提出了一个名叫PES(ProposedEncryptionStandard)分组密码算法,稍后经过改进成IPES(ImprovedPES),并于1992年被最终定名为国际数据加密标准(InternationalDataEncryptionAlgorithm,IDEA)。
国际上普遍认为IDEA是继DES之后的,又一个成功的分组密码,已经应用于Email系统的PGP(PrettyGoodPrivacy)、OpenPGP的标准算法以及其他加密系统中。
IDEA是一个分组密码,也是一个对合运算,明文和密文的分组长度为64比特,密钥长度为128比特。
IDEA易于实现,软硬件实现都很方便,而且加解密速度很快。
(一)加密运算
IDEA中的三个运算为:
l6位子分组的相异或;
16位整数的模216加,即
;
16位整数的模216+1乘,即
。
IDEA的整体结构如图1.1.44所示,由8轮迭代和一个输出变换组成。
64位的明文分为4个子块,每块16位,分别记为
。
64位的密文也分为4个子块,每块16位,分别记为
。
128位的密钥经过子密钥生成算法产生出52个16位的子密钥,每一轮加密迭代使用6个子密钥,输出变换使用4个子密钥。
记
为第r轮迭代使用的第i个子密钥,
。
记
为输出变换使用的第i个子密钥,
。
每一轮的运算步骤如下:
(1)
。
(2)
。
(3)
。
(4)
。
(5)将第
(1)步和第(3)步的结果异或。
(6)将第
(2)步和第(4)步的结果异或。
(7)将第(5)步的结果乘以
。
(8)将第(6)步和第(7)步的结果相加。
(9)将第(8)步的结果乘以
。
(10)将第(7)步和第(9)步的结果相加。
(11)将第
(1)步和第(9)步的结果异或。
(12)将第(3)步和第(9)步的结果异或。
(13)将第
(2)步和第(10)步的结果异或。
(14)将第(4)步和第(10)步的结果异或。
(15)第(11),(12),(13),(14)步的结果为本轮加密迭代的输出结果。
图1.1.44
(二)解密运算
IDEA的解密过程和加密过程相同,只是所使用的子密钥不同。
IDEA采用基本轮函数迭代结构,既采用混淆技术,又采用扩散技术。
具体地,采用了三种不同的代数群,将其混合运算,获得了良好的非线性,增强了密码的安全性。
IDEA是在Ascom-TechAG公司的Hasler基金会的支持下完成的,在许多国家申请了专利保护,在非商业领域却是自由使用的。
IDEA的商标为MediaCrypt所拥有,专利保护期到2010-2011年间。
四、AES算法
美国国家标准技术协会(NIST)于1997年提出征集一个新的对称密钥分组加密算法作为取代DES的新的加密标准的公告,并将这个新的算法命名为高级加密标准(AdvancedEncryptionStandard,AES)。
2000年10月2日,NIST宣布选中了Rijndeal算法,建议作为AES使用,并于2001年正式发布了AES标准。
Rijndeal算法是具有分组长度和密钥长度均可变的分组密码,密钥长度和分组长度可独立指定为128比特、192比特或256比特。
为了满足AES的要求限定处理分组的大小为128比特,密钥长度为128比特、192比特或256比特,相应的迭代轮数为10轮、12轮、14轮,分别记为AES-128/192/256。
Rijndeal算法采用Square结构,每一轮都使用代替和混淆并行地处理整个数据分组,包括3个代替和1个混淆。
此处以密钥程度与分组长度均为128比特(此时对应的轮数是10)为例,说明Rijndeal算法的加解密过程。
128比特的消息(明文、密文)被分为16个字节,记为:
输入分组=m0,m1,…,m15;同样的密钥分组也如此:
k=k0,k1,…,k15;内部数据结构的表示为一个4
4矩阵:
输入分组=
输入密钥=
Rijndeal中的轮变换记为Round(State,RoundKey),这里State是轮消息矩阵,可被看成输入或输出;RoundKey是轮密钥矩阵,由输入密钥通过密钥表导出。
一轮的完成将改变State的元素的值,即改变State的状态。
轮(除了最后一轮)变换由四个不同的变换组成,如下所示。
Round(State,RoundKey)
{
SubBytes(State);
ShiftRows(State);
MixColumns(State);
AddRoundKey(State,RoundKey);
}
最后一轮稍有不同,记为FinalRound(State,RoundKey),等于不使用MixColumns函数的Round(State,RoundKey)。
论变换是可逆的,以便于解密。
相应的逆轮变换记为Round-1(State,RoundKey)和FinalRound-1(State,RoundKey)。
SubBytes(State)函数为State的每一个字节x提供了一个非线性代换,任一GF(28)域上的非零字节x被如下变换所代换:
y=Ax-1+b;此处
A=
b=
ShiftRows(State)函数在State的每行上运算,对于在第i行的元素,循环左移i个位置。
MixColumns(State)函数在State的每列上作用,此处只描述对一列的作用:
对于一列(s0,s1,s2,s3)-1,将其表示成3次多项式s(x)=s3x3+s2x2+s1x+s0;对s(x)做如下运算得到d(x)=c(x)•s(x)(modx4+1),其中c(x)=c3x3+c2x2+c1x+c0=’03’x3+’01’x2+’01’x+’02’,c(x)的系数是GF(28)域中的元素(以十六进制表示字节)。
AddRoundKey(State,RoundKey)函数将RoundKey中的元素和State中的元素进行逐比特的异或操作。
解密运算仅仅是在相反的方向反演加密,即运行
AddRoundKey(State,RoundKey)-1;
MixColumns(State)-1;
ShiftRows(State)-1;
SubBytes(State)-1;
可以看出Rijndeald密码的加解密必须分别使用不同的电路和代码。
五、SMS4算法
SMS4密码算法是我国官方公布的第一个商用密码算法,主要应用于无线局域网产品。
SMS4算法是一个分组算法,其分组长度为128比特,密钥长度为128比特;加密算法与密钥扩展算法都采用32轮非线性迭代结构;解密算法与加密算法的结构相同,只是轮密钥的使用顺序相反,解密轮密钥是加密轮密钥的逆序。
密钥与明密文均以32比特为单位进行划分,轮函数与密钥扩展算法也以32比特为基本单位进行运算。
(1)SMS4轮函数
设输入X=(X0,X1,X2,X3),轮密钥为rk(由加密密钥通过密钥扩展算法得到),则SMS4算法的轮函数可表示为:
L为线性变换,设输入为A,输出为B,则:
B=L(A)=A
(A<<<2)
(A<<<10)
(A<<<18)
(A<<<24)
其中<<
τ为非线性变换,以8比特为基本单位进行运算,由四个S盒组成。
设输入A=(a0,a1,a2,a3),输出为B=(b0,b1,b2,b3),则:
B=(b0,b1,b2,b3)=τ(A)=(Sbox(a0),Sbox(a1),Sbox(a2),Sbox(a3))
其中ai、bi均为一个字节。
(2)SMS4的扩展密钥算法
SMS4的扩展密钥算法用来通过输入的加密密钥生成32个轮密钥,算法描述如下:
加密密钥MK=(MK0,MK1,MK2,MK3),i=0,1,2,3;中间变量为Ki,i=0,1,…,35;轮密钥为rki,i=0,1,…,31;其中MKi、Ki、rki均为32比特;则密钥生成方法为:
其中:
系统参数FK的取值用16进制来表示,FK0=(A3B1BAC6),FK1=(56AA3350),FK2=(677D9197),FK3=(B27022DC);
L’为L的修改,
;
固定参数CK的取值方法为:
设cki,j为CKi的第j字节(i=0,1,…,31,j=0,1,2,3),即CKi=(cki,0,cki,1,cki,2,cki,3),则cki,j=(4i+j)×7(mod256);32个固定参数CKi,其16进制表示为:
00070e15,1c232a31,383f464d,545b6269,
70777e85,8c939aa1,a8afb6bd,c4cbd2d9,
e0e7eef5,fc030a11,181f262d,343b4249,
50575e65,6c737a81,888f969d,a4abb2b9,
c0c7ced5,dce3eaf1,f8ff060d,141b2229,
30373e45,4c535a61,686f767d,848b9299,
a0a7aeb5,bcc3cad1,d8dfe6ed,f4fb0209,
10171e25,2c333a41,484f565d,646b7279。
(3)SMS4加解密算法
设明文输入为(M0,M1,M2,M3),密文输出为(C0,C1,C2,C3),轮密钥为rki,i=0,1,2,…,31,其中,Mi、Ci、rki均为32比特;则SMS4算法的加密可表示为:
SMS4算法的解密与加密变换结构相同,但轮密钥使用顺序相反。
实验步骤:
一、DES
在加密算法选项里选择DES,以下实验步骤保持算法不变。
(一)加解密计算
(1)加密
在明文栏的下拉菜单里选择文本或十六进制,然后在后面相应的文本框内输入所要加密的明文;
在密钥栏的下拉菜单里选择文本或十六进制,然后在后面相应的文本框内输入相应的密钥;
点击“加密”按钮,在密文文本框内就会出现加密后的密文,如下图所示。
(1)解密
在密文栏相应的文本框内输入所要解密的密文;
在密钥栏的下拉菜单里选择文本或十六进制,然后在后面相应的文本框内输入相应的密钥;
点击“解密”按钮,在明文文本框内就会出现解密后的明文。
(一)分步演示
(1)点击“扩展实验”框中的“DES分步演示”按钮,进入DES分步演示窗口,打开后默认进入分步演示页面。
(2)密钥生成
在“子密钥产生过程”框中,选择密钥的输入形式后,输入密钥;DES要求密钥长度为64位,即选择“ASCII”(输入形式为ASCII码)时应输入8个字符,选择“HEX”(输入形式为十六进制)时应输入16个十六进制码;
点击“比特流”按钮生成输入密钥的比特流;
点击“等分密钥”按钮,将生成的密钥比特流进行置换选择后,等分为28位的C0和D0两部分;
分别点击两侧的“循环左移”按钮,对C0和D0分别进行循环左移操作(具体的循环左移的移位数与轮序有关,此处演示为第一轮,循环左移1位),生成同样为28位的C1和D1;
点击“密钥选取”按钮,对C1和D1进行置换选择,选取48位的轮密钥,此处生成第一轮的密钥K1。
上述密钥生成过程如图下图所示。
(1)加密过程
在“加密过程”框中,选择明文的输入形式后,输入明文;DES要求明文分组长度为64位,输入要求参照密钥输入步骤;
点击“比特流”按钮生成输入的明文分组的比特流;
点击“初始置换IP”对明文比特流进行初始置换,并等分为32位左右两部分L0和R0;
点击“扩展置换E”按钮对32位R0进行扩展置换,将其扩展到48位;
点击“异或计算”按钮,将得到的扩展结果与轮密钥K1进行异或,得到48位异或结果;
分别点击“S1”、“S2”、…、“S8”按钮,将得到的48位异或结果通过S代换产生32位输出;
点击“异或计算”按钮,将得到的32位输出与L0进行异或,得到R1;同时令L1=R1,进入下一轮加密计算。
依次进行16轮计算,最终得到L16和R16;
点击“终结置换”按钮,对交换后的L16和R16进行初始逆置换IP-1,即可得到密文。
上述加密过程如下图所示。
(一)DES实例
(1)点击DES分步演示窗体中的“DES实例”标签,进入DES实例演示页面。
(2)加密实例
输入明文、初始化向量和密钥,选择工作模式和填充模式,点击“加密”按钮,对输入的明文使用DES算法按照选定的工作模式和填充模式进行加密;在轮密钥显示框内以十六进制显示各轮加密使用的密钥,加密结果以两种形式显示在密文框中。
上述过程如下图所示。
实验总结:
通过本次试验,基本掌握了对称密码的机密算法。
成绩
批阅教师
批阅日期