admin管理员组文章数量:1603726
2023年12月12日发(作者:)
====Word行业资料分享--可编辑版本--双击可删====
实验三 RSA算法和SHA1哈希算法
古典密码算法曾经被广泛应用,大都比较简单,使用手工和机械操作来实现加密和解密。它的主要对象是文字信息,利用密码算法实现文字信息的加密和解密。古典密码学可以分为代替密码(也叫做移位密码)和置换密码(也叫做换位密码)两种,其中代替密码典型的有Caesar密码,数乘密码和仿射变换等,置换密码有单表置换和多表置换等。
一、 实验目的
1. 理解代替密码学加密过程
2. 理解置换密码学加密过程
二、 实验环境
Windows,交换网络结构,每组2人,,密码工具
三、 实验原理
1. 非对称密钥加密也称为公开密钥加密,或者叫做公钥加密算法。使用公开密钥密码的每一个用户都分别拥有两个密钥:加密密钥和解密密钥,它们两者并不相同,并且由加密密钥得到解密密钥在计算机上是不可行的。每一个用户的加密密钥都是公开的。因此,加密密钥也称为公开密钥。所有用户的公开密钥都将记录在作用类似于电话号码薄的密钥本上,而它可以被所有用户访问,这样每一个用户都可以得到其他所有用户的公开密钥。同时,每一个用户的解密密钥将由用户保存并严格保密。因此,解密密钥也称为私有密钥。RSA加密算法利用了数论领域的一个事实,那就是虽然把两个大质数相乘生成一个合数是件十分容易的事情,但要把一个合数分解为两个质数的乘积却十分困难。合数分解问题目前仍然是数学领域尚未解决的一大难题,至今没有任何高效的分解方法。它无须收发双方同时参与加密过程,既可以用于保密也可以用于签名,因而非常适合于电子邮件系统的加密,互连网和信用卡安全系统。
RSA算法的加密和解密过程
在RSA算法中,每个实体有自己的公钥(e,n)及私钥(d,n),其中n = p*q,p,q是两个大素数,e*d = 1 mod ф(n),显然e应该满足gcd(e,ф(n))= 1。实体B加密消息m,将密文在公开信道上传送给实体A。实体A接到密文后对其解密。具体算法如下。
公钥的生成算法
RSA的公钥生成算法十分简单,可以分为四步:
a) 选择两个素数,p和q;
b) 计算n = p×q和z = (p-1)×(q-1);
c) 选择一个与z互质的数d;
d) 找出一个e,使得e×d = 1 mod z。
公开密钥是由(e,n)构成,私有密钥由(d,n)构成。
加密算法
实体B的操作如下:
a) 得到实体A的真实公钥(e,n);
b) 把消息表示成整数m,0<m≤n-1;
c) 使用平方-乘积算法,计算C = Ek(m) = me mod n;
d) 将密文C发送给实体A。
解密算法
实体A接收到密文C,使用自己的私钥d计算m = Dk(C)= Cd mod n,m∈Zn。
源-于-网-络-收-集 ====Word行业资料分享--可编辑版本--双击可删====
我们选择p = 3,q = 11,得到n = 33,z =(p-1)×(q-1)= 2×10 = 20。由于和20互质,故设d = 7。对于所选的d = 7,解方程7×e = 1 mod 20,可以得到e = 3。
在我们的例子中,由于所选的p和q太小,破译当然很容易,我们的例子只是用来说明此算法的原理。对于明文SUZANNE,RSA的加密和解密过程如表3-1所示。
表3-1 RSA加解密过程示例
加密
明文(m)
符号
S
U
Z
A
N
N
E
me
解密
密文(C)
密文(C)
3Cd
明文(m)
值
19
21
26
1
14
14
5
m3
m(mod33) m(mod33)
28
21
20
1
5
5
26
28
21
20
1
5
5
26
3C
7值
19
21
26
1
14
14
5
符号
S
U
Z
A
N
N
E
6859
9261
17576
1
2744
2744
125
1801088541
1280000000
1
78125
78125
8031810176
2. 散列函数(Hash Functions)就是能提供数据完整性保障的一个重要工具。Hash函数常用来构造数据的短“指纹”,消息的发送者使用所有的消息产生一个短“指纹”,并将该短“指纹”与消息一起传输给接收者。即使数据存储在不安全的地方,接收者重新计算数据的指纹,并验证指纹是否改变,就能够检测数据的完整性。这是因为一旦数据在中途被破坏或改变,短指纹就不再正确。
散列函数是一个函数,它以一个变长的报文作为输入,并产生一个定长的散列码,有时也称为报文摘要,作为函数的输出。散列函数最主要的作用是用于鉴别,鉴别在网络安全中起到举足轻重的地位。鉴别的目的有以下两个:第一,验证信息的发送者不是冒充的,同时发信息者也不能抵赖,此为信源识别;第二,验证信息完整性,在传递或存储过程中未被篡改,重放或延迟等。
(1) SHA1哈希算法流程
对于任意长度的明文,SHA1首先对其进行分组,使得每一组的长度为512位,然后对这些明文分组反复重复处理。
对于每个明文分组的摘要生成过程如下:
将512位的明文分组划分为16个子明文分组,每个子明文分组为32位。
申请5个32位的链接变量,记为A、B、C、D、E。
16份子明文分组扩展为80份。
80份子明文分组进行4轮运算。
链接变量与初始链接变量进行求和运算。
链接变量作为下一个明文分组的输入重复进行以上操作。
最后,5个链接变量里面的数据就是SHA1摘要。
(2) SHA1的分组过程
对于任意长度的明文,SHA1的明文分组过程与MD5相类似,首先需要对明文添加位数,使明文总长度为448(mod512)位。在明文后添加位的方法是第一个添加位是l,其余都是0。然后将真正明文的长度(没有添加位以前的明文长度)以64位表示,附加于前面已添加过位的明文后,此时的明文长度正好是512位的倍数。与MD5不同的是SHA1的原始报文长度不能超过2的64次方,另外SHA1源-于-网-络-收-集 ====Word行业资料分享--可编辑版本--双击可删====
的明文长度从低位开始填充。
经过添加位数处理的明文,其长度正好为512位的整数倍,然后按512位的长度进行分组(block),可以划分成L份明文分组,我们用Y0,Y1,……YL-1表示这些明文分组。对于每一个明文分组,都要重复反复的处理,这些与MD5是相同的。
对于512位的明文分组,SHA1将其再分成16份子明文分组(sub-block),每份子明文分组为32位,我们使用M[k](k= 0, 1,……15)来表示这16份子明文分组。之后还要将这16份子明文分组扩充到80份子明文分组,我们记为W[k](k= 0, 1,……79),扩充的方法如下。
W t = M t , 当0≤t≤15
W t = ( W t-3
⊕
W t-8⊕
W t-14⊕
W t-16
) <<< 1, 当16≤t≤79
SHA1有4轮运算,每一轮包括20个步骤(一共80步),最后产生160位摘要,这160位摘要存放在5个32位的链接变量中,分别标记为A、B、C、D、E。这5个链接变量的初始值以16进制位表示如下。
A=0x67452301
B=0xEFCDAB89
C=0x98BADCFE
D=0x10325476
E=0xC3D2E1F0
(3) SHA1的4轮运算
SHA1有4轮运算,每一轮包括20个步骤,一共80步,当第1轮运算中的第1步骤开始处理时,A、B、C、D、E五个链接变量中的值先赋值到另外5个记录单元A′,B′,C′,D′,E′中。这5个值将保留,用于在第4轮的最后一个步骤完成之后与链接变量A,B,C,D,E进行求和操作。
SHA1的4轮运算,共80个步骤使用同一个操作程序,如下:
A,B,C,D,E←[(A<<<5)+ft(B,C,D)+E+Wt+Kt],A,(B<<<30),C,D
其中ft(B,C,D)为逻辑函数,Wt为子明文分组W[t],Kt为固定常数。这个操作程序的意义为:
●
●
将[(A<<<5)+ft(B,C,D)+E+Wt+Kt]的结果赋值给链接变量A;
将链接变量A初始值赋值给链接变量B;
● 将链接变量B初始值循环左移30位赋值给链接变量C;
● 将链接变量C初始值赋值给链接变量D;
● 将链接变量D初始值赋值给链接变量E。
SHA1规定4轮运算的逻辑函数如表8-2-2所示。
表8-2-2 SHA1的逻辑函数
轮1步骤
0≤t≤19
20≤t≤39
函数定义
ft(B,C,D)=(B·C)V(~B·D)
ft(B,C,D)=B⊕C⊕D
轮3
步骤
40≤t≤59
60≤t≤79
函数定义
ft(B,C,D)=(B·C)V(B·D)V(C·D)
ft(B,C,D)=B⊕C⊕D 24在操作程序中需要使用固定常数Ki(i= 0,1,2,……79),Ki的取值如表8-2-3所示:
表8-2-3 SHA1的常数K取值表
轮步骤 函数定义 轮步骤 函数定义
源-于-网-络-收-集 ====Word行业资料分享--可编辑版本--双击可删====
0≤t≤19
20≤t≤39
40≤t≤59
60≤t≤79
1Kt=5A827999
Kt=6ED9EBA1
3Kt=8F188CDC
Kt=CA62C1D6 24我们同样举一个例子来说明SHA1哈希算法中的每一步是怎样进行的,比起MD5算法,SHA1相对简单,假设W[1]=0x12345678,此时链接变量的值分别为A=0x67452301、B=0xEFCDAB89、C=0x98BADCFE、D=0x10325476、E=0xC3D2E1F0,那么第1轮第1步的运算过程如下。
将链接变量A循环左移5位,得到的结果为:0xE8A4602C。
将B,C,D经过相应的逻辑函数:
(B&C)|(~B&D)=(0xEFCDAB89&0x98BADCFE)|(~0xEFCDAB89&0x10325476)=0x98BADCFE
将第(1)步,第(2)步的结果与E,W[1],和K[1]相加得:
0xE8A4602C+0x98BADCFE+0xC3D2E1F0+0x12345678+0x5A827999=0xB1E8EF2B
将B循环左移30位得:(B<<<30)=0x7BF36AE2。
将第3步结果赋值给A,A(这里是指A的原始值)赋值给B,步骤4的结果赋值给C,C的原始值赋值给D,D的原始值赋值给E。
最后得到第1轮第1步的结果:
A = 0xB1E8EF2B B = 0x67452301 C = 0x7BF36AE2
D = 0x98BADCFE E = 0x10325476
按照这种方法,将80个步骤进行完毕。
第四轮最后一个步骤的A,B,C,D,E输出,将分别与记录单元A′,B′,C′,D′,E′中的数值求和运算。其结果将作为输入成为下一个512位明文分组的链接变量A,B,C,D,E,当最后一个明文分组计算完成以后,A,B,C,D,E中的数据就是最后散列函数值。
四、 实验步骤
主机A、B为一组,C、D为一组,E、F为一组。首先使用“快照X”恢复Windows系统环境。
1. RSA算法
RSA生成公钥及加密解密过程演示
(1)本机进入“密码工具”|“加密解密”|“RSA加密算法”|“公钥”页签,在生成公钥区输入素数p和素数q,这里要求p和q不能相等(因为很容易开平方求出p与q的值)并且p与q的乘积也不能小于127(因为小于127不能包括所有的ASCII码,导致加密失败),你选用的素数p与q分别是:p=__________;q=__________。
(2)单击“私钥d”下拉按钮,选择私钥d,并记录这个私钥用于解密,d=__________。
(3)单击“生成公钥”按钮生成公钥,记录下公钥e=__________ , n=__________。
(4)在生成公钥演示区中输入素数p=__________和素数q=__________,还有私钥d=__________。
单击“开始演示”按钮查看结果,填写表3-1。
表3-1 公钥生成演示结果
私钥d
公钥e
私钥n
公钥n
(5)在加/解密演示区中输入明文m=__________,公钥n=__________(m 源-于-网-络-收-集 ====Word行业资料分享--可编辑版本--双击可删==== (6)在密文c编辑框输入刚刚得到的密文,分别输入私钥n=__________,私钥d=__________,点击“解密演示”按钮,查看RSA解密过程,然后记录得到的明文m=__________。 (7)比较解密后的明文与原来的明文是否一致。 根据实验原理中对RSA加密算法的介绍,当素数p = 13,素数q = 17,私钥d = 143时,写出RSA公钥的生成过程:___________________________________________________。 利用生成的公钥,写出对明文m = 40的加密过程(加密过程计算量比较大,请使用密码工具的RSA工具进行计算):___________________________________________________。 利用私钥d = 143,对生成的密文进行解密:____________________________________。 RSA加密解密 (1)本机在生成公钥区输入素数p和素数q,这里要求p和q不能相等,并且p与q的乘积也不能小于127,记录你输入的素数,p=__________,q=__________。 (2)点击“私钥d”的下拉按钮,选择私钥d,并记录这个私钥用于解密,d=__________。 (3)点击“生成公钥”按钮生成公钥,记录下公钥e=__________, n=__________。将自己的公钥通告给同组主机。 (4)本机进入“加密/解密”页签,在“公钥e部分”和“公钥n部分”输入同组主机的公钥,在明文输入区输入明文:_____________________________________。 单击“加密”按钮对明文进行加密,单击“导出”按钮将密文导出到RSA共享文件夹(D:WorkEncryptionRSA)中,通告同组主机获取密文。 (5)进入“加密/解密”页签,单击“导入”按钮,从同组主机的RSA共享文件夹中将密文导入,点击“解密”按钮,切换到解密模式,在“私钥d部分”和“私钥n部分”输入自己的私钥,再次点击“解密”按钮进行RSA解密。 (6)将破解后的明文与同组主机记录的明文比较。 2. SHA1算法 SHA1生成文件摘要 (1)本机进入“密码工具”|“加密解密”|“SHA1哈希函数”|“生成摘要”页面,在明文框中编辑文本内容:_____________________________________________________。 单击“生成摘要”按钮,生成文本摘要:______________________________________。 单击“导出”按钮,将摘要导出到SHA1共享文件夹(D:WorkEncryptionSHA1)中,并通告同组主机获取摘要。 (2)单击“导入”按钮,从同组主机的SHA1共享文件夹中将摘要导入。 在文本框中输入同组主机编辑过的文本内容,单击“生成摘要”按钮,将新生成的摘要与导入的摘要进行比较,验证相同文本会产生相同的摘要。 (3)对同组主机编辑过的文本内容做很小的改动,再次生成摘要,与导入的摘要进行对比,验证SHA1算法的抗修改性。 SHA1算法流程 本机进入“密码工具”|“加密解密”|“SHA1哈希函数”|“演示”页签,在明文输入区输入文本(文本不能超过48个字符),单击“开始演示”,查看各模块数据及算法流程。 根据实验原理中对SHA1算法的介绍,如果链接变量的值分别为(其中,M[1]=E7CBEB94): A: 39669B34 B: 61E7F48C C: C04BD57B D: 8279FF1E E: 4E85FC91 源-于-网-络-收-集 ====Word行业资料分享--可编辑版本--双击可删==== 请写出第21步的运算过程以及经过运算后的链接变量。 五、 思考问题 1. Hash函数密码技术有哪些应用? 2. 简述RSA的公钥生成算法? 源-于-网-络-收-集
版权声明:本文标题:实验三--RSA算法和SHA1算法 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://m.elefans.com/dongtai/1702346631a2262.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论