密码学课程设计.docx
- 文档编号:25040633
- 上传时间:2023-06-04
- 格式:DOCX
- 页数:14
- 大小:104.03KB
密码学课程设计.docx
《密码学课程设计.docx》由会员分享,可在线阅读,更多相关《密码学课程设计.docx(14页珍藏版)》请在冰豆网上搜索。
密码学课程设计
密码学
课程设计报告
目录
实验一凯撒加密算法.......................................................................................1
1.1算法简介.................................................................................................................1
1.2算法原理..................................................................................................................1
1.3加解密算法...............................................................................................................1
1.4运行截图...............................................................................................................2
实验二MD5算法
2.1算法简介................................................................................................................3
2.2算法分析...............................................................................................................3
2.3算法步骤...............................................................................................................4
2.4运行截图.................................................................................................................5
实验三分组密码AES加密解密..........................................................................6
3.1算法概述...................................................................................................................6
3.2算法设计思路............................................................................................................6
3.3运行结果....................................................................................................................8
实验四椭圆曲线加密算法...............................................................................................9
4.1算法简介.....................................................................................................................9
4.2算法设计......................................................................................................................9
4.3运行结果.....................................................................................................................9
实验总结............................................................................................................................10
实验一凯撒加密算法
1.1算法简介
著名的凯撒加密算法就是一种简单的替代加密法,它是将明文中每一个字符用右移3位并以26个字符为模的替代(A由D替代,B由E替代,··…—,W由Z替代,X由A替代,Y由B替代,Z由C替代)。
1.2基本原理
在密码学中存在着各种各样的置换方式,但所有不同的置换方式都包含2个相同的元素。
密钥和协议(算法)。
凯撒密码的密钥是3,算法是将普通字母表中的字母用密钥对应的字母替换。
置换加密的优点就在于它易于实施却难于破解. 发送方和接收方很容易事先商量好一个密钥,然后通过密钥从明文中生成密文,即是敌人若获取密文,通过密文直接猜测其代表的意义,在实践中是不可能的。
凯撒密码的加密算法极其简单。
其加密过程如下:
在这里,我们做此约定:
明文记为m,密文记为c,加密变换记为E(k1,m)(其中k1为密钥),解密变换记为D(k2,m)(k2为解密密钥)(在这里k1=k2,不妨记为k)。
凯撒密码的加密过程可记为如下一个变换:
c≡m+k mod n (其中n为基本字符个数)
同样,解密过程可表示为:
m≡c+k mod n (其中n为基本字符个数)
对于计算机而言,n可取256或128,m、k、c均为一个8bit的二进制数。
显然,这种加密算法极不安全,即使采用穷举法,最多也只要255次即可破译。
当然,究其本身而言,仍然是一个单表置换,因此,频率分析法对其仍是有效的。
1.3加解密算法
恺撒密码的替换方法是通过排列明文和密文字母表,密文字母表示通过将明文字母表向左或向右移动一个固定数目的位置。
例如,当偏移量是左移3的时候(解密时的密钥就是3):
明文字母表:
ABCDEFGHIJKLMNOPQRSTUVWXYZ
密文字母表:
DEFGHIJKLMNOPQRSTUVWXYZABC
使用时,加密者查找明文字母表中需要加密的消息中的每一个字母所在位置,并且写下密文字母表中对应的字母。
需要解密的人则根据事先已知的密钥反过来操作,得到原来的明文。
例如:
明文:
THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG
密文:
WKH TXLFN EURZQ IRA MXPSV RYHU WKH ODCB GRJ
恺撒密码的加密、解密方法还能够通过同余数的数学方法进行计算。
首先将字母用数字代替,A=0,B=1,...,Z=25。
此时偏移量为n的加密方法即为:
加密:
E (x)= (x+n) mod 2
解密:
D (x)= (x-n) mod 2
1.4运行截图:
实验二MD5算法
2.1算法简介
MD5算法是MD4算法的改进算法。
RonRivest于1990年提出MD4单向散列函数,MD表示消息摘要(MessageDigest),对输入消息,算法产生128位散列值。
该算法首次公布之后,BertdenBoer和AntoonBosselaers对算法三轮中的后两轮进行了成功的密码分析。
在一个不相关的分析结果中,RalphMerKle成功地攻击了前两轮。
尽管这些攻击都没有扩展到整个算法,但Rivest还是改进了其算法,结果就是MD5算法。
MD5算法是MD4的改进算法,它比MD4更复杂,但设计思想相似,输入的消息可任意长,输出结果也仍为128位,特别适用于高速软件实现,是基于32-位操作数的一些简单的位操作。
2.2算法分析
2.2.1MD5的安全性
RonRivest概述了MD5安全性:
a.与MD4相比,增加了第四轮。
b.每一步均有唯一的加法常数。
c.为减弱第二轮中函数G的对称性从((X∧Y)∨(X∧Z)∨(Y∧Z))变为((X∧Z)∨(Y∧(Z)))。
d.每一步加上了上一步的结果,引起更快的雪崩效应。
e.改变了第二轮和第三轮中访问消息子分组的次序,使其形式更不相似。
f.近似优化了每一轮中的循环左移位移量以实现更快的雪崩效应。
各轮的位移量互不相同。
从安全角度讲,MD5的输出为128位,若采用纯强力攻击寻找一个消息具有给定Hash值的计算困难性为2128,用每秒可试验1000000000个消息的计算机需时1.07×1022年。
若采用生日攻击法,寻找有相同Hash值的两个消息需要试验264个消息,用每秒可试验1000000000个消息的计算机需时585年。
1.2.2实现方法
由于此处的文件校验用到要求比较高的场合,故采用了方法6,md5校验算法,从CodeGuru下载了一个md5校验算法的实现模块,加入自己要校验的文件名,实现完成。
下面具体描述一下实现过程:
1、创建一个简单的对话框程序;
2、设置CString类型的变量m_filename和m_strFileChecksum以存放要校验的文件名和校验和;
3、在对话框类中创建ChecksumSelectedFile()函数,调用md5校验和类(附录中有其实现文件)中的GetMD5计算文件校验和。
4、使用定时器定时巡检该文件的校验和,一旦发现校验和发生变化,立刻出现提示。
2.3算法步骤
将输入消息按512-位分组,最后要填充成为512位的整数倍,且最后一组的后64位用来填充消息长度(填充前)。
填充方法为附一个1在消息后,后接所要求的多个0。
这样可以确保不同消息在填充后不相同。
由于留出64位用来表示消息长度,那么消息的长度最多可达264字节,相当于4G×4G字节,文件的长度是不可能达到这么大,因此通常都是只采用64位中的低32位来表示消息长度,高32位填充0。
初始化MD变量。
由于每轮输出128位,这128位可用下面四个32位字A,B,C,D来表示。
其初始值设为:
A=0x01234567
B=0x89ABCDEF
C=0xFEDCBA98
D=0x76543210
开始进入算法主循环,循环的次数是消息中512位消息分组的数目。
先将上面A、B、C、D四个变量分别复制到另外四个变量a、b、c、d中去。
主循环有四轮,每轮很相似。
每轮进行16次操作,每次操作对a、b、c、d四个变量中的三个作一次非线性函数运算,然后将所得结果加上第四个变量,消息的一个子分组和一个常数。
再将所得结果向右环移一个不定的数,并加上a,b,c或d中之一。
最后用该结果取代a,b,c或d中之一。
以下是每次操作中用到的四个非线性函数(每轮一个)。
F(X,Y,Z)=(X∧Y)∨((X)∧Z)
G(X,Y,Z)=(X∧Z)∨(Y∧(Z))
H(X,Y,Z)=X⊕Y⊕Z
I(X,Y,Z)=Y⊕(X∨(Z))
其中,⊕是异或,∧是与,∨是或,是反符号。
这些函数是这样设计的:
如果X、Y和Z的对应位是独立和均匀的,那么结果的每一位也应是独立和均匀的。
函数F是按逐位方式操作:
如果X,那么Y,否则Z。
函数H是逐位奇偶操作符。
设Mj表示消息的第j个子分组(从0到15),<<
FF(a,b,c,d,Mj,s,ti)表示a=b+((a+F(b,c,d)+Mj+ti)<<
GG(a,b,c,d,Mj,s,ti)表示a=b+((a+G(b,c,d)+Mj+ti)<<
HH(a,b,c,d,Mj,s,ti)表示a=b+((a+H(b,c,d)+Mj+ti)<<
II(a,b,c,d,Mj,s,ti)表示a=b+((a+I(b,c,d)+Mj+ti)<<
四轮(64步)结果略。
注:
常数ti的选择:
第i步中,ti是232×abs(sin(i))的整数部分,i的单位是弧度。
所有这些完成之后,将A,B,C,D分别加上a,b,c,d。
然后用下一分组数据继续运行算法,最后的输出是A,B,C和D的级联。
最后得到的A,B,C,D就是输出结果,A是低位,D为高位,DCBA组成128位输出结果。
2.5运行截图
实验三分组密码AES加密解密
3.1算法概述
AES算法是一个迭代型分组密码,其分组长度和密钥长度都可变,各自可以为128比特、192比特、256比特。
AES算法对明文以字节为单位进行处理,这里我们以128位的分组、128位密钥的情况为例。
首先将明文按字节分成列组,将明文的前4个字节组成一列,接下来的4个字节组成第二列,后面的字节依次组成第三列和第四列,则组成了一个4乘4的矩阵。
这样AES输入的16个字节排成了一个二维数组,称之为状态矩阵。
AES的加密解密变换都是基于状态数组来处理的,在中间结果上的不同变换操作称为状态。
同样,密钥也可以表示成一个矩阵。
3.2算法设计思路
3.2.1AES的加密变换
AES的加密变换有最基本的变换单位—“轮”多次迭代而成,而当组长度与密钥分组长度均为128比特时,轮数位Nr=10。
我们将AES中的轮变换记为Round,State表示消息矩阵,RoundKey表示轮密钥矩阵。
一轮的完成将改变State矩阵中的元素,称为改变它的状态。
对于加密来说,输入到第一轮的State就是明文消息矩阵,最后一轮输出的State就是对应的密文消息矩阵。
AES的轮(除最后一轮外)变换由四个不同的变换组成,这些变换我们称之为内部轮函数,AES的轮可表示成如下形式:
Round(State,RoundKey){
ByteSub(State);
ShiftRows(State);
MixColumns(State);
AddRoundKey(State,RoundKey);
}
其中,ByteSub(State)称为字节变换,ShiftRow(State)称为移位变换MixColumn(State)称为列混合变换以及AddRoundKey(State,RoundKey)为与子密钥异或。
最后一轮略微的不同,将其记作FinalRoundKey(State,RoundKey),相当于前面的Round(State,RoundKey)去掉MixColumns(State)。
从图六我们可以清楚的看到AES的算法执行过程为:
(1)给定的明文M,将State初始换为M,并进行AddRoundKey(State,RoundKey),将RoundKey与State进行异或运算;
(2)对于前Nr-1轮中的每一轮,分别执行Round(State,RoundKey)过程;
(3)执行最后一轮FinalRoundKey(State,RoundKey)过程,即只执行ByteSub(State)、ShiftRows(State)、AddRoundKey(State,RoundKey)这三个操作。
3.2.2AES的解密变换
AES的解密变换与加密变换是互逆的,轮函数也分为4层。
分别为InvShiftRows(State)逆行移位变换、InvByteSub(State)逆字节代替变换、AddRoundKey(State,RoundKey)与InvMixColumns(State)逆列混合变换。
同样在最后一轮中,不采用列的InvMixColumns(State)变换。
将AES的解密过程的轮变换表示为
InvRound(State,RoundKey){
InvShiftRows(State);
InvByteSub(State);
AddRoundKey(State,RoundKey);
InvMixColumns(State);
}
则AES的算法的解密执行过程为
(1)给定的密文C,进行State初始化,并进行AddRoundKey(State,RoundKey),将RoundKey与State进行异或运算;
(2)对于前Nr-1轮中的每一轮,分别执行InvRound(State,RoundKey)过程;
(3)执行最后一轮的InvShiftRows(State)变换、InvByteSub(State)变换、AddRoundKey(State,RoundKey)变换。
AES密钥编排
AES的每一轮的轮密钥都是从初始的种子密钥编排得到的,密钥编排包括密钥扩展和轮密钥选取两个步骤。
首先密钥扩展将种子密钥扩展成长为Nb(Nr+1)的扩展密钥,然后从扩展密钥中依次选取Nb个字长作为每一轮的密钥。
2.3实现算法分析
(1)voidchartomatrix(unsignedchar*str,unsignedcharBase[][4])
函数说明:
此函数的功能是进行输入转换,即将输入的字符串(密钥或明文)转换成一个4*4矩阵。
(2)voidByteSub(unsignedchara[4][4],unsignedcharb[4][4])
函数说明:
此函数的功能是进行字节代替变换,它作用在所传数组的每个位上,将没一位利用代替表进行运算,代替表的功能由程序开头所给出的数组Sbox[256]类完成。
(3)voidIvByteSub(unsignedchara[4][4],unsignedcharb[4][4])
函数说明:
此函数的功能是进行逆字节代替变换,是字节代替变换的逆变换,在对密文解密时调用,它利用逆字节代替表将所传数组中的每一位非线性地变换成令一位。
(4)voidShiftRow(unsignedcharb[][4],unsignedcharC[][4])
函数说明:
此函数的功能是进行行移位变换,它作用于S盒的输出,对所传数组的每一行循环左移不同的位数。
(5)voidIvShiftRow(unsignedcharb[][4],unsignedcharC[][4])
函数说明:
此函数的功能是进行逆行移位变换,是行移位变换的逆变换,对所传数组的每一行右移不同的位数。
(6)voidMixColumn(unsignedcharC[][4],unsignedchard[][4])
函数说明:
此函数的功能是进行列混合变换,将所传数组上的每一列看成GF(28)上的一个多项式,且与一个固定的多项式C(x)进行模M(x)=x4+1乘法,其中多项式C(x)={03}x3+{01}x2+{01}x+{02}。
(7)voidIvMixColumn(unsignedcharC[][4],unsignedchard[][4])
函数说明:
此函数的功能是进行逆列混合变换,是列混合变换的逆变换,将所传数组中的每一列看作有限域GF(28)上,次数小于4的多项式,并且与一个固定的多项式C-1(x)=C(x)={0b}x3+{0d}x2+{09}x+{0e},多项式C-1(x)是C(x)的乘法逆多项式,即C(x)
C-1(x)={01}。
(8)voidAddRoundKey(unsignedchard[][4],unsignedcharkey[][4],unsignedchare[][4])
函数说明:
此函数的功能是将所传数组与子密钥数组按位异或。
3.3运行结果
实验四椭圆曲线加密算法
4.1算法简介
椭圆曲线指的是由韦尔斯特拉斯(Weierstrass)方程y2+a1xy+a3y=x3+a2x2+a4x+a6所确定的平面曲线。
若F是一个域,ai∈F,i=1,2,…,6。
满足式1的数偶(x,y)称为F域上的椭圆曲线E的点。
F域可以是有理数域,还可以是有限域GF(Pr)。
椭圆曲线通常用E表示。
除了曲线E的所有点外,尚需加上一个叫做无穷远点的特殊点O。
4.2算法设计
在椭圆曲线加密(ECC)中,利用了某种特殊形式的椭圆曲线,即定义在有限域上的椭圆曲线。
其方程如下:
y2=x3+ax+b(modp)
这里p是素数,a和b为两个小于p的非负整数,它们满足:
4a3+27b2(modp)≠0其中,x,y,a,b∈Fp,则满足式
(2)的点(x,y)和一个无穷点O就组成了椭圆曲线E。
椭圆曲线离散对数问题ECDLP定义如下:
给定素数p和椭圆曲线E,对Q=kP,在已知P,Q的情况下求出小于p的正整数k。
可以证明,已知k和P计算Q比较容易,而由Q和P计算k则比较困难,至今没有有效的方法来解决这个问题,这就是椭圆曲线加密算法原理之所在。
4.3运行结果
实验总结和体会
经过这一段时间对密码学课程的深入学习和体会,我掌握和了解到了很多的知识,在密码学课程设计中,将这些知识灵活的应用起来,更加深了对密码学的认识。
就比如实验一,实验一是古典密码实验。
古典密码大多是由单表代换和置换产生的。
这些密码体系曾经风靡一时,但是其单一的加密方法使得其很容易被统计攻击所破解。
从而有了多表代换密码。
但是随着科技的发展,穷举攻击还是能攻破它。
虽然古典密码体系现在已经不在使用,但是其对于我们还是有借鉴意义和学习的价值。
在编程中,我更深刻的了解到了古典密码的加密解密操作,也进一步的巩固的了课堂的只是。
但是我也存在很大的不足。
编程能力的不足导致我没有办法做出一个可视化界面,也没有办法把这四种加密方法合成一个程序。
在以后的学习中我还要加强我的编程能力,进一步的学习。
总之,通过独立完成此次课设,在编程的过程中遇到了很多问题,发现了自己编程能力的不足以及课堂学习的局限,知道了只有通过动手实践才能真正的掌握所学的知识。
并且在此次课设中,通过询问同学和上网查询资料,也在自己的努力下完成了编程任务,锻炼了自己的分析问题和解决问题的能力。
但是也有很多不是很懂的地方,例如一些算法的具体实施和实现,在老师和同学们的帮助下,我最终完成了密码学课程设计的实验,因此,特别感谢任老师和其他同学的帮忙。
同时,通过实际编写密码分析程序,也极大地激发了我对密码学的兴趣,希望在以后的学习中不断地积累和丰富密码学的相关理论与技术。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 密码学 课程设计
![提示](https://static.bdocx.com/images/bang_tan.gif)