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的公钥生成算法?

源-于-网-络-收-集

本文标签: 加密生成密码公钥过程