《信息安全技术》实验报告
实验五 完整的加密算法程序设计
一、实验目的
设计完整的对称加密算法、安全哈希算法和公钥加密算法。
二、实验内容
1、DES算法,包括密钥生成、加密和解密;
2、SHA-1算法;
3、RSA算法,包括密钥生成、加密和解密。
三、实验所需的软件
本实验可在以下两种编程语言中选择:
1、C++或VC++类;
2、Python类。
如使用其他语言,必须先得到老师批准。
四、实验要求及报告要求
1、3个算法均需要设计简单的用户界面,简单的命令提示符形式或者图形化界面均可。用于输入/显示“明文”、“密文”、“摘要”、“密钥”、“公钥/私钥”、“秘密值”以及算法所需的相关参数等内容。具体以字符串形式或数值形式输入/显示可自行决定。
2、DES算法采用长度56bit密钥,明文采用分块长度64bit,大于64bit的明文必须为64bit的整数倍。
3、SHA-1算法的摘要长度为160bit,原文长度不限(小于264bit)。
4、RSA算法采用公钥/私钥长度≤1024bit,明文长度≤256bit。可根据自己的编程能力和计算机计算能力,选择合适的密钥长度和明文长度。最终在实验报告中给出能正确实现加/解密的RSA算法的最大密钥长度和明文长度。
5、本实验要求实现的算法编程不得调用他人/第三方/开发平台等直接提供的加密算法函数,必须自行完成加密/解密/哈希运算过程的编程。输入、输出、数学函数等可以调用第三方函数库。
6、三个算法均要求编译成可以在PC机独立运行的EXE程序(不是手机App)。
7、纸质实验报告中无需贴出程序代码,只需给出程序流程框图、加密/解密/哈希运算的界面截图。电子版实验报告中附件提交编译后的EXE程序,程序源代码文件夹(工程文件夹)。
DES算法
1、子密钥的生成过程:
用户输入密码时其长度不受限制当输入的密码长度大于8字节时,前8个字节为有效密码。
a 我们在加密时设定的密钥先被转化成64比特的二进制;
b 然后再按照密钥置换函数PC-1(8x7)进行压缩置换,变成56位;
c 将其置换的输出再分为前28位C0和后28位D0两部分,然后再将此两部分进行16轮的循环左移及压缩置换PC-2(8X6),最后生成16个48位的子密钥。
1.1 压缩置换到56位
假设有密钥K(64位)第8位、第16位、第24位、第32位、第40位、第48位、第56位、第64位作为奇偶校验位,不参与运算,即实际密钥为56位。
对K(64位)使用PC-1(8×7)进行置换,去掉了8个校验位。

1.2 C0和D0的分类
经过PC-1置换后,将其置换的输出再分为前28位C0和后28位D0两部分,如图1所示

1.3 循环左移16轮
再将两部分按照表2进行16轮的循环左移。

C1和D1分别为C0和D0左移1位……C3和D3分别为C2和D2左移2位……C16和D16分别为C15和D15左移1位。
从而得到C1D1 ~ C16D16:
1.4 压缩置换到48位
每进行一轮循环左移,就按照表3进行压缩置换,得到一个子密钥。即置换后的输出数据的位数要比置换前输入的位数要少,原来的8行7列共56位数据被压缩成8行6列48位数据。在压缩置换过程中,第9、18、22、25、35、38、43、54共8位数据被丢掉。

置换过程如图2所示

Kn(48位) = PC-2( CnDn(56位) )
最终得到所有16个子密钥,每个48位。
2、明文加密
DES算法是对固定大小(64位)的数据块进行加密解密操作的,对于那些不够64位的数据块需要采用填充机制补位到64位长。设该明文串为M=m1m2…m64 (mi=0或1)。明文串经过长度都为48比特的16个子密钥K来加密,最后生成长度为64比特的密文E。
2.1 IP初始置换
假设有明文M(64位)则按下表进行位置的置换。

该比特串被分为32位的左半部分L0和32位的右半部分R0两部分,用于f函数的16轮迭代运算的首次迭代的初始输入。
2.2 加密数据
2.2.1 E盒置换
由于K1为48位,而R0为32位,所以需要将R0按照表5置换成48位再进行运算。

2.2.2 E盒置换结果与K1异或运算
将扩展置换后的48位输出与K1作异或运算。
2.2.3 S盒置换
将异或运算得到的48位结果数据分成8个6位的块,将每一块通过对应的一个S盒产生一个4位的输出,S盒接收6位的输入,经过置换输出4位的数据。
其具体置换过程为:
将6位输入中的第1位和第6位取出来形成一个2位的二进制数x,将其转化为十进制作为行数,然后将中间4位构成另一个二进制数y,将其转化为十进制作为列数,然后查出相应S盒的x行y列所对应的整数,将该整数置换为一个4位的二进制数,即为S盒的输出。例如,假设输入数据中的第一个6位数字块为010111,则需要通过查S1盒,先取出010111的第1位和第6位,得x=01,其对应的十进制数为1;然后取出中间的4位1011,得y=1011,其对应的十进制数为11,在S1盒中,第1行第11列的整数为11,将其转换为二进制为1011,则输出1011,即用4位的1011代替6位的010111。将8个6位数据的置换结果连在一起,形成一个32位的输出。
表6 S盒

2.2.4 P盒置换
将S盒的输出结果再通过一个P盒置换产生一个32位的输出。
2.2.5 P盒置换结果与L0异或运算
然后再将P盒置换的结果与左半部分进行异或运算。
2.2.6 左右交换位置
然后将上一步的结果赋给R1,R0则原封不动的赋给L1,之后进入下一轮迭代。最后生成L16和R16,其中R16为L15与P盒置换结果做异或运算的结果,L16是R15的直接赋值。
2.2.7 密文的生成
经过16次的迭代,我们得到了16对32位的数据块,即
L1R1, L2R2, L3R3, …, L16R16;
最后一对L16R16就是我们需要的。然后将L16与R16的位置交换,继续对R16L16(64位)运用一次IP-1(见表)排列,排列的结果即为密文。

3、解密
DES的解密过程和DES的加密过程完全类似,加密是对右边进行加密,解密则是对左边进行解密,然后将16轮的子密钥序列K1,K2……K16的顺序倒过来。即第一圈用第16个子密钥K16,第二轮用K15,其余类推。
4、实验截图

密钥和明文皆只接收前8个字节,输入长度超8字节,则多余部分将被忽略。
SHA-1
1、数据填充
首先肯定是对原文数据进行填充,输入不定长度的原文,要使其长度满足: “长度 mod 512bit =448bit”不管其长度是否满足,都要在其后至少添加一个十进制数128即0x80,其二进制形式为1000 0000,如果长度不满足就在添加完0x80后继续填充0,一直填充到满足"长度 mod 512bit =448bit "为止
2、添加消息长度
在补充成长度 mod 512bit =448bit后添加原文数据长度,记住原文数据长度要占八字节。可以表示2的64-1次方个数。将这个数据块看作无符号的64位整数来处理,该数据块包含了原始消息的长度(在填充之前的消息长度)。
3、初始化MD缓冲器
使用160位缓冲器来存放hash函数的中间和最终结果。可用5个32位(8位16进制)的寄存器(A、B、C、D、E)来表示:
A=0x67452301;B=0xEFCDAB89;C=0x98BADCFE;D=0x10325476;E=0xC3D2E1F0
4、以512位(16字)数据块为单位处理消息
在进行完上述步骤后,不出错的话,此时填充后的数据长度刚好是512bit即64byte的倍数,然后开始每512bit一算。现在我们每组能获取一个64字节的数据 SHA-1是分为四组每组4个字节,一共四轮计算,但其输出长度固定为20字节,所以我们要将填充后的数据长度再进行处理,处理过程:
首先是将原本的64个字节的字符数据统一处理成一组四个字节的无符号整型数据共16个无符号整型数据,然后再在其后填充,一填充到满足80个无符号整形数据位置,16后的数据填充规制如下图。

现在处理就完成了,我们开始用80/20刚好得4组每组四个字节
然后将ABCDE五组数进行处理,如下图,其中ABCDE运算用的数据均来自于上一轮的。

其中的ft,Wt和Kt数据来源如下图


最终将最后一轮计算的ABCDE与第一轮的相加得出最后结果。
5、实验截图

RSA算法
因为想要密钥长度能达到1024个bit,而想要进行2的1024次方量级的数学运算的话,则需要一点运算库的支持,所以引用了大整数运算库gmp,在本算法实现中的所有数学运算,包括加减乘除,模指数运算,全都需要经由gmp库的函数进行运算。而数据也要存储在它定义的数据类型mpz_t中。
1、密钥生成
1、选择两个不同的素数p、q
用随机数种子生成两个随机数,然后用gmp自带的素数生成函数根据两个随机数向上查找素数。
2、计算它们的乘积n=p×q;
用gmp的乘法函数mpz_mul (key_n, p, q)运算p*q并赋予给n。
3、计算欧拉函数Ф(n)=(p-1)(q-1);
即使是减法,也需要通过mpz_sub_ui(p, p, 1)函数来减一。
然后通过mpz_mul(key_fi, p, q)来获得fi值。
4、选择与Ф(n)互素,并且小于Ф(n)的整数e;
由于这一步运算计算量过于庞大,e直接取值65537。
5、计算d,使得d×e mod Ф(n) = 1。
d通过快速模指运算得出。
基本思想:对
分治

可以把a分解成二进制数

结果的密钥分别为{e,n}和{d,n}。
C=Pe mod n
P=Cd mod n
2、实验截图

密钥长度支持到1024bit,明文长度支持到256bit
最后是三个实验的代码
链接:https://pan.baidu.com/s/14akE0Dbeu6XbS5y57_EW-g
提取码:rhy5
浙公网安备 33010602011771号