文档库 最新最全的文档下载
当前位置:文档库 › 中国矿业大学 密码学课程设计

中国矿业大学 密码学课程设计

中国矿业大学 密码学课程设计
中国矿业大学 密码学课程设计

密码学

课程设计报告

张辰洋

信息安全08-3班学号:08083703 2011年6月25日

目录

实验一古典密码算法 (1)

1.1 古典密码Hill (1)

1.11 古典密码Hill概述 (1)

1.14 运行结果 (2)

1.15 密码安全性分析 (3)

1.2 古典密码 Vignere (4)

1.21 古典密码 Vignere概述 (4)

1.22 算法原理与设计思路 (4)

1.23 关键算法分析 (4)

1.24 运行结果 (5)

1.25 密码安全性分析 (6)

1.3古典密码Playfair (6)

1.31 古典密码Playfair概述 (6)

1.32 算法原理与设计思路 (6)

1.34 运行结果 (8)

1.35 密码安全性分析 (8)

1.4古典密码Vernam (8)

1.41 古典密码Vernam概述 (8)

1.42 算法原理与设计思想 (9)

1.43 关键代码分析 (9)

1.44 运行结果 (10)

1.45 安全性分析 (10)

实验二分组密码DES加密解密 (11)

2.1 分组密码DES加密解密概述 (11)

2.2 算法原理与设计思想 (11)

2.3 DES加密解密主要算法分析 (12)

2.4 运行结果 (13)

2.5 密码安全性分析 (14)

实验三公钥密码算法RSA (15)

3.1 公钥密码算法RSA概述 (15)

3.2 算法原理与设计思想 (15)

3.3 关键算法分析 (16)

3.4 运行结果 (17)

3.5 密码安全性分析 (18)

实验总结和体会 (19)

实验一 古典密码算法

1.1 古典密码Hill

1.11 古典密码Hill 概述

Hill 体制是1929年由Lester S.Hill 发明的,它实际上就是利用了我们熟

知的线性变换方法,是在Z26上进行的。Hill 体制的基本思想是将n 个明文字

母通过线性变换转化为n 个密文字母,解密时只需要做一次逆变换即可,密钥就

是变换矩阵。

1.12算法原理与设计思路

1.假设要加密的明文是由26个字母组成,其他字符省略。将每个字符与0-25

的一个数字一一对应起来。(例如:a/A —0,b/B —1,……z/Z —25)。

2.选择一个加密矩阵n n A ?,其中矩阵A 必须是可逆矩阵,例如

???????????

??

???=15227132102123916

296101

571823055

117

A 3.将明文字母分别依照次序每n 个一组(如果最后一组不足n 个的话,就将其补

成n 个),依照字符与数字的对应关系得到明文矩阵ming n n len ?/。

4.通过加密矩阵A ,利用矩阵乘法得到密文矩阵mi n n len ?/= ming n n len ?/?n n A ?mod 26;

将密文矩阵的数字与字符对应起来,得到密文。

5.解密时利用加密矩阵的逆矩阵1-A 和密文,可得到明文。

6. 设明文为n n Z m m m m 2621),,(∈?+=,密文n n Z c c c c 2621),,.,(∈?=,密钥为26

Z 上的n*n 阶可逆方阵n n ij k K ?=)(,则

26mod 26

mod 1-==cK m mK c 解密:明文加密:密文

1.13 关键算法分析

欧几里德算法又称辗转相除法,用于计算两个整数a,b的最大公约数。产生公约数的目的是为了下一步求逆矩阵和矩阵时方便运算。

这段代码是加密的过程,主要设计思想是输入的明文与矩阵做乘法,当明文长度为矩阵阶数的倍数时,自动将明文变为列数与矩阵阶数相同,然后进行计算。当明文长度不是矩阵阶数的倍数时,则会出现无关字符。

代码中的利用矩阵乘法得到的密文输出即可,而解密的过程只需要利用矩阵的逆矩阵,也就是我们在做乘法的时候将矩阵换为它的逆矩阵即可得到明文。

1.14 运行结果

1.15 密码安全性分析

经过算法分析和设计,我们可以知道它的安全强度(m 是素数,模数为合数,

不是任意矩阵可逆) 为 26的m*m 次方。例如,当m=5时,得出它的安全强度

为2的117次方。通过矩阵,将信息均匀分布到每个m 长向量的每个分向量中,

具有比较好的随机性,相对于其他的古典密码来说,Hill 是比较安全的。

但是在已知m 组明文、密文和解密算法的情况下,我们需要解M 组同余方程

组,因此,密钥是可以恢复的。关键是求得加密矩阵的逆—解密矩阵。只要分析

出两个明文向量(线性无关)与相应的密文向量。若有

如果甲方截获了一段密文:OJWPISWAZUXAUUISEABAUCRSIPLBHAAMMLPJJOTENH

经分析这段密文是用HILL 2密码编译的,且这段密文的字母 UCRS 依次代表

了字母 TACO ,我们接着将要进行破译。

关系如下:

计算矩阵的逆

11332244b a b a A A b a b a ????

????== ? ? ? ?????????13132424b b a a A b b a a ????= ? ?????1

13132424b b a a A b b a a -????= ? ???????11321αβA C U ==???? ???????

?????? ??????? ??=A T 1201α221918αβA S R ==???? ??????? ?????? ??????? ??=O C 1532α203115A ?? ???2118319??= ???

()122118det (m od 26)345(m od 26)7319ββ===

破译

密文向量

明文向量

明文:Clinton is going to visit a country in Middle East

1.2 古典密码 Vignere

1.21 古典密码 Vignere 概述

1858年法国密码学家维吉尼亚提出一种以移位替换为基础的周期替换密

码。这种密码是多表替换密码的一种。是一系列(两个以上)替换表依次对明文

消息的字母进行替换的加密方法。

1.22 算法原理与设计思路

1.首先使用维吉尼亚方阵,它的基本方阵是26列26行。方阵的第一行是a 到z

按正常顺序排列的字母表,第二行是第一行左移循环一位得到得,其他各行依次

类推。

2.加密时,按照密钥字的指示,决定采用哪一个单表。例如密钥字是bupt ,加

密时,明文的第一个字母用与附加列上字母b 相对应的密码表进行加密,明文的

第二个字母用与附加列的字母u 相对应的密码表进行加密,依次类推。

3.令英文字母a,b,…,z 对应于从0到25的整数。设明文是n 个字母组成的字符

串,即 m=m1m2m3m4…mn

密钥字周期性地延伸就给出了明文加密所需的工作密钥

K=k1k2…kn,E (m )=C=c1c2…cn

加密:Ci=mi+kimod26

解密:mi=ci-kimod26,i=1,2,3,…,n

1.23 关键算法分析

12118319-?? ???

1918(m od 26)15(m od 26)321-??=? ?-??251673??

= ???1203115A -??= ???12118319-?? ??????

? ??=901711523902421952211016192112119113???????????????????? ??????? ??????? ???????????????????????189128113121015581916211313161020148?????????????????????? ??? ????????? ?????????????????????????????39201419151420221912141597971599???????????????????? ??????? ??????? ???????????????????????20321202514945120115141891341251920?????????????????????? ??? ??????? ? ?????????????????????????????

加密算法的关键是给出初始密钥,例如第一个密钥字母是e,对第一个明文字母p进行加密时,选用左边附加列上的字母e对应的那一行作为代替密码表,查处与p相对应的密文字母是T,依次类推即可得出明文。上述代码中的生成密钥部分为核心代码,只有密钥更长,才能保证密码算法的可靠性。解密算法和加密算法只需要减去密钥继续模26即可得到。

1.24 运行结果

1.25密码安全性分析

首先,破译的第一步就是寻找密文中出现超过一次的字母。有两种情况可能导致这样的重复发生。最有可能的是明文中同样的字母序列使用密钥中同样的字母加了密;另外还有一种较小的可能性是明文中两个不同的字母序列通过密钥中不同部分加了密,碰巧都变成了密文中完全一样的序列。假如我们限制在长序列的范围内,那么第二种可能性可以很大程序地被排除,这种情况下,我们多数考虑到4个字母或4个以上的重复序列。

其次,破译的第二步是确定密钥的长度,又看看这一段先:密钥 F O R E S T F O R E S T F O R E S T F O R E S T F O R 明文 b e t t e r t o d o w e l l t h a n t o s a y w e l l 密文 G S K X W K Y C U S O X Q Z K L S G Y C J E Q P J Z C 第一个YC出现后到第二个YC的结尾一共有12个字母(U S O X Q Z K L S G Y C)那么密钥的长度应是12的约数---1,2,3,4,6,12之中的一个(其中,1可排除)。

第三,破译的时候,可以从一下几个方面进行考虑。1.A-E段,U-Z段以及O-T段的特征比较显著,可先从这些方面着手; 2.如果一些字符串出现的频率较多,不妨猜猜,特别要注意THE,-ING等的出现;3.要留意那些图表中没有出现的字母,很多时候也会是突破点,如X与Z的空缺;4.图表最好还是做一下,毕竟比较直观,好看。

因此,利用单纯的数学统计方法就可以攻破维吉尼亚密码,所以在使用这种密码的过程中,我们尽量增加密钥的长度,只有密钥长度的足够长时,密码的使用才会越安全。

1.3古典密码Playfair

1.31古典密码Playfair概述

Playfair密码最为著名的多字母加密密码.它将明文中的双字母组合作为一个单元.并将这些单元转换为密文双字母的组合。Playfair算法基于一个 5x5的字母矩阵.该矩阵通过一个关键词构造。从左到右、从上到下填入该关键词的字母,并去除重复的字母(两个a只取一个);其次。按照字母表顺序将其余字母填入矩阵的剩余空问。字母I和J被算作一个字母,可以根据使用者的意愿在形成密文时确定用I或L

1.32 算法原理与设计思路

Playfair算法根据下列规则一次对明文的两个字母进行加密。这两个字母构成一对。其加密规则如下:

(1)一对明文字母如果是重复的,则在这对明文字母中间插入一个填充字符,

如x。因此,单词session将被分割成:se ss si on.

(2)如果分割后的明文字母对在矩阵的同一行中都出现,则分别用矩阵中其右侧的字母代替.行的最后一个字母山行的E第一个字母代替。例如,on被加密成qo.而st被加密为tn。

(3)如果分割后的明文字母对在矩阵的一列中都出现,则分别用矩阵中其下方的字母代替.列的最后一个字母由列的第一个字母代替。例如,en被加密成nU.而aW被加密成ba。

(4)如果分割后的明文字母对既不在矩阵的同一列中都出现也不在矩阵的同一行中都出现.密文是这两个字母所在的长方形的另两个顶点。例如,8e被加密成nk,而cu被加密成ix(或ix)。

(5)如果明文有奇数个字母,末尾加一个无效字母。

1.33关键算法分析

上述代码主要是用来填充矩阵,首先将明文矩阵进行填充,也就是第一张图片所显示的,这是算法的关键,也是第一步所在。然后上面的算法中还有因为是将明文两两分组,即每两个明文分为一组,那么当明文为奇数的时候,就需要添加一个无关字符,使它可以达到偶数个,以方便分组。

在算法设计过程中,我一共设计了两个函数,即decrypt()加密函数,encrypt()解密函数,main()主函数。主函数中调用加密函数和解密函数,使程序可以比较顺利的进行。

1.34运行结果

1.35 密码安全性分析

尽管Playfair密码被认为是比较安全的,它仍然是相对容易攻破的。普莱费尔密码隐藏了的频率,但是该体制仍可以用统计分析方法来破译。因为它的明文仍然完整地保留了明文语言的结果。几百个字母的密文就足够我们分析出规律了。在英文中各种连字:th,he,an,in,re,es,…

因此,Playfair密码对抗穷举攻击的效果比较差。即有26*26=676个双字母,利用现代计算机来分析,很短时间内就可以将其破解。

1.4古典密码Vernam

1.41 古典密码Vernam概述

替换代码的密钥是一个随机且不重复的字符序列,这种密码则称为一次密密码,因为它的密钥只使用一次。该密码体制是美国电话电报公司的Joseph Mauborgne在1917年为电报通信设计的一种密码,所以又称为Vernam密码。Vernam密码在对明文加密,前首先将明文编码为(0,1)序列,然后再进行加密变换。

1.42 算法原理与设计思想

1.按递增顺序把每个明文字母作为一个数字,A=0,B=1等等。

2.对输入密文中每一个字母做相同的处理。

3.将明文中的每个字母与密钥中的相应字母相加。

4.如果得到的和大于26,则从中减去26。

5.将和转化为字母,从而得到密文。

6.设m=(m1 m2 m3 … mi …)为明文,k=(k1 k2 k3 … ki …)为密钥,其中mi,ki ∈(0,1), i≥1,

加密变换为:c=(c1 c2 c3 … ci …) ,其中ci =mi Å ki , i≥1, 这里为模2加法(或异或运算)

解密变换为:m=(m1 m2 m3 … mi …) ,其中mi =ci Å ki , i≥1, 1.43 关键代码分析

这段代码是整个程序的核心代码,首先,将字母变换为数字,字母对应0-26个数字;这是将字母转化后为模26的除法做准备。其次,是加密运算过程,主要就是明文与密钥相加后模26即可得到密文,最后,解密过程中,用得到的密文减去密钥之后模26即可得到明文。这就是整个算法的核心。然后将得到的数字变换为字母,变换的时候,和第一步的过程是相同的。

1.44 运行结果

1.45 安全性分析

在应用Vernam密码时,如果对不同的明文使用不同的随机密钥,这时Vernam密码为一次一个密码。由于每一密钥序列都是等概率随机产生的,敌手没有任何信息用来对密文进行密码分析。香农(Claude Shannon)从信息论的角度证明了这种密码体制在理论上是不可破译的。但如果重复使用同一个密钥加密不同的明文,则这时的Vernam密码就较为容易破译。

若敌手获得了一个密文c=(c1 c2 c3 … ci …) 和对应明文m=(m1 m2 m3 … mi …) 时,就很容易得出密钥k=(k1 k2 k3 … ki …) ,其中ki =ci Å mi ,i≥1。故若重复使用密钥,该密码体制就很不安全。

实际上Vernam密码属于序列密码,加密解密方法都使用模2加,这使软硬件实现都非常简单。但是,这种密码体制虽然理论上是不可破译的,然而

在实际应用中,真正的一次一密系统却受到很大的限制,其主要原因在于该

密码体制要求:

① 密钥是真正的随机序列;

② 密钥长度大于等于明文长度;

③ 每个密钥只用一次(一次一密)。这样,分发和存储这样的随机密钥序列,并确保密钥的安全都是很因难的;另外,如何生成真正的随机序列也是一个现实问题。因此,人们转而寻求实际上不对攻破的密码系统。

实验二分组密码DES加密解密

2.1 分组密码DES加密解密概述

DES 使用一个56 位的密钥以及附加的8 位奇偶校验位,产生最大64 位的分组大小。这是一个迭代的分组密码,使用称为Feistel 的技术,其中将加密的文本块分成两半。使用子密钥对其中一半应用循环功能,然后将输出与另一半进行“异或”运算;接着交换这两半,这一过程会继续下去,但最后一个循环不交换。DES 使用16 个循环,使用异或,置换,代换,移位操作四种基本运算。

2.2 算法原理与设计思想

DES的加密过程可分为加密处理,加密变换和子密钥生成几个部分组成。

1.加密处理过程

(1)初始变换。加密处理首先要对64位的明文按表1所示的初始换位表IP进行变换。表中的数值表示输入位被置换后的新位置。例如输入的第58位,在输出的时候被置换到第1位;输入的是第7位,在输出时被置换到第64位。

(2)加密处理。上述换位处理的输出,中间要经过16轮加密变换。初始换位的64位的输出作为下一次的输入,将64位分为左、右两个32位,分别记为L0和R0,从L0、R0到L16、R16,共进行16轮加密变换。其中,经过n轮处理后的点左右32位分别为Ln和Rn,则可做如下定义:

Ln=Rn-1

Rn=Ln-1

其中,kn是向第n轮输入的48位的子密钥,Ln-1和Rn-1分别是第n-1轮的输出,f是Mangler函数。

(3)最后换位。进行16轮的加密变换之后,将L16和R16合成64位的数据,再按照表2所示的最后换位表进行IP-1的换位,得到64位的密文,这就是DES算法加密的结果。

2.加密变换过程

通过重复某些位将32位的右半部分按照扩展表3扩展换位表扩展为48位,而56位的密钥先移位然后通过选择其中的某些位减少至48位,48位的右半部分通过异或操作和48位的密钥结合,并分成6位的8个分组,通过8个S-盒将这48位替代成新的32位数据,再将其置换一次。这些S-盒输入6位,输出4位。

3.子密钥生成过程

钥通常表示为64位的自然数,首先通过压缩换位PC-1去掉每个字节的第8位,用作奇偶校验,因此,密钥去掉第8、16、24……64位减至56位,所以实际密钥长度为56位,而每轮要生成48位的子密钥。

4.解密处理过程

从密文到明文的解密过程可采用与加密完全相同的算法。不过解密要用加密的逆变换,就是把上面的最后换位表和初始换位表完全倒过来变换。这里不再赘述。

2.3 DES加密解密主要算法分析

上述是我做程序中主要用到的函数和算法,DES_Run()主要功能就是涉及到S盒的变换,即将S盒的内容包含在里面。DES_SetKey()的功能是设置密钥,main()函数调用上面的主要方法和步骤,完成实验算法。而接下来的16轮子密钥的功能就是方便下面的与子密钥进行异或时使用。

与子密钥异或得到48位,每6比特一组,共分成8组,分别作为8个S盒的输入;每一个分组将对应于一个S盒进行变换运算:分组1由S盒1进行变换操作,分组2由S盒2操作…而且8个S盒所表示的变换也是不同的。

这段代码的作用是设置密钥,DES算法共需16轮迭代运算,每轮迭代运算使用一个子密钥,共需要16个子密钥。子密钥是从用户输入的初始密钥(或称为种子密钥)产生的,用户输入的初始密钥K为64位,其中有8为用于奇偶校验,分别位于第8,16,24,32,40,48,56,64。奇偶校验位用于检查密钥K在产生和分配以及存储过程中可能发生的错误,这样DES的密钥实际上只有56位。2.4 运行结果

接下来我将其封装为可视化界面,将程序封装到里面。

2.5 密码安全性分析

DES是对称的分组密码算法。对称的分组密码算法最主要的问题是:由于加解密双方都要使用相同的密钥,因此在发送、接收数据之前,必须完成密钥的分发。因而,密钥的分发便成了该加密体系中的最薄弱、风险最大的环节,各种基本的手段均很难保障安全地完成此项工作,从而使密钥更新的周期加长,给他人破译密钥提供了机会。

其次,由于算法各轮的子密钥是通过改变初始密钥这种方式得到的,因此有些初始密钥成了弱密钥(weakkey)。初始密钥分成两部分,每部分各自独立的移动。如果每一部分的所有位都是0或1,那么算法的任意一个周期的密钥都是相同的。当密钥是全1、全0、或者一半全1、一半全0时,会发生这种情况。下面以十六进制编码的方式给出了四种弱密钥。

弱密钥值( 带奇偶校验位) 真实密钥

0101 0101 0101 0101 0000000 0000000

1F1F 1F1F E0E0 E0E0 0000000 FFFFFFF

E0E0 E0E0 1F1F 1F1F FFFFFFF 0000000

FEFE FEFE FEFE FEFE FFFFFFF FFFFFFF

但是DES仅有56位二进制未免太短,许多密码学专家力荐使用更长的密钥,理由是穷举攻击的可能性。设已知一段密码文C及与它对应的明码文M,用一切可能的密钥K加密M,直到得到E(M)=C,这时所用的密钥K即为要破译的密码的密

钥。穷举法的时间复杂性是T=O(n),空间复杂性是S=O(1)。

对于DES密码,n=256≈7×106,即使使用每秒种可以计算一百万个密钥的大型计算机,也需要算106天才能求得所使用的密钥,因此看来是很安全的。但是密码专家Diffie和Hellman指出,如果设计一种一微秒可以核算一个密钥的超大规模集成片,那么它在一天内可以核算8.64×1010个密钥。如果由一个百万个这样的集成片构成专用机,他们当时估计:这种专用机的造价约为两千万美元。在五年内分期偿还,平均每天约需付一万美元。由于用穷举法破译平均只需要计算半个密钥空间,因此获得解的平均时间为半天。

这样,破译每个DES密码的花销只是五千美元。后来,Diffie在1981年又修改了他们的估计,认为以1980年的技术而论,用造价为五千万美元的专用机破译DES密码平均要花两天时间。但是他与Hellman都预计:1990年时,破译DES密码的专用机的造价将大幅度下降。同时,DES的硬件实现方法逐步接近Diffie和Hellman的专用机所要求每秒百万次的速度。在1993年,MuchaelWiener设计了一个一百万美元的机器,它能在平均3.5小时内,完成DES的穷举攻击,到1990年时,DES是完全不安全的。

实验三公钥密码算法RSA

3.1 公钥密码算法RSA概述

RSA密码体制是美国麻省理工学院(MIT)Rivest、Shami和Adleman于1978年提出来的,它是第一个理论上最为成功的公开密钥密码体制,它的安全性基于数论中的Euler定理和计算复杂性理论中的下述论断:求两个大素数的乘积是很容易计算的,但要分解两个大素数的乘积,求出它们的素数因子却是非常困难的,它属于NP—完全类,是一种幂模运算的加密体制。除了用于加密外,它还能用于数字签字和身份认证。下面将从各个方面来详细对RSA公钥体制进行研究。3.2 算法原理与设计思想

RSA算法的过程

首先产生密钥,过程如下:

(1) 随机产生两个长度为K/2位的素数P 和 Q

(2) 计算公钥 publicKey=P*Q;(publicKey 是k位的长度)

(3) 随机产生一个加密密钥 keyE, 2<=keyE<=Φ(n)-1其中GCD(keyE, Φ(n))=1; 注意这是保证解密密钥keyE *keyD mod Φ(n)=1 有解的充要条件,Φ(n)称为

n的欧拉函数,值为: Φ(n)=(P-1)*(Q-1)

(4) 求解解密密钥keyD=keyE-1 mod (n) ,keyE-1为解密密钥keyD的逆元,此公式原方程为(keyE*keyD mod (n)=1)

由此公钥,加密密钥,解密密钥全部产生。

其次对明文加密或对密文进行解密,过程如下:

(1) 加密: C = M keyE mod publicKey;其中M表示明文,C表示密文

(2) 解密: M = C keyD mod publicKey. 其中M表示明文,C表示密文

算法流程图:

图2 总的流程图

图1为加密或解密流程图

图3 产生密钥流程图

3.3 关键算法分析

该算法是主要生成大素数的,大素数的产生是算法实现的关键。因此,我没有使用素数生成头文件或者类,而是采取用小素数生成大素数的方法,先找到一些随机素数,然后由随机素数生成大素数。

当算法产生了大素数后,接着就是生成公钥和私钥了,求解密密钥实际上是如何去解一次同余方程ax ≡ 1 mod n。根据费马定理与欧拉定理给出了同余方程的解为:

x=a(Φ(n)-1) mod n

由此可得出iKeyD*iKeyE≡ 1 mod Φ(n)

即iKeyD=iKeyE(Φ(Φ(n))-1) mod Φ(n)

3.4 运行结果

3.5 密码安全性分析

在公布RSA算法之后,在使用RSA密码体制和分析RSA算法发现了一系列的算法本身脆弱性及其存在的问题。

(1)RSA公钥密码体制在加密或解密变化中涉及大量的数值计算,其加密和解密的运算时间比较长,这比数据加密标准DES的计算量开销大,在一定程度上限制了它的应用范围,以致于实际使用RSA密码体制无法用软件产品,必须用超大规模集成电路的硬件产品。

(2)虽然提高N=P*Q的位数会大大提高RSA密码体制的安全性,但其计算量呈指数增长,以致使其实现的难度增大,实用性降低。

(3)RSA公钥密码体制的算法完整性(指密钥控制加密或解密变换的唯一性)和安全性(指密码算法除密钥本身外,不应该存在其它可破译密码体制的可能性)沿有等进一步完善。

(4)RSA算法面临着数学方法的进步和计算机技术飞跃发展带来的破译密码能力日趋增强的严重挑战。因子分解问题有了长跑的发展,1995年人类成功地分解了128位十进制数RSA密码算法,破译512位长的RSA指日可待。

尽管如此,自1978年RSA算法公布以来,公开密钥密码已从理论研究进入实际应用研究阶段。RSA公开密钥密码算法在信息交换过程中使用比较广泛,安全性比较高。以当前的计算机水平,如选择1024位长的密钥(相当于300位十进

密码学基础课程设计指导书

《现代密码学基础》课程设计指导书 杨柳编 湖南科技大学计算机科学与工程学院 2014年12月

一、概述 本课程在简要复习数学基础知识之后,探讨了密码学研究的基本问题:通过不安全的通信媒介如何进行安全通信。也可以理解为关心任何希望限制不诚实者达到目的的问题,把度量和评价一个密码体制(协议)的安全性作为一个重点。就目前来说,密码学的研究领域已从消息加密扩大到了数字签名、消息认证、身份识别、抗欺骗协议等。无疑,在整个教学过程中非常重视密码学的基础,当然包括数学基础。并针对实际的密码体制(协议)强调设计与分析(攻击),对现代密码学的主要研究问题都进行了介绍。 对于密码学这样的课程,同学们一定要从理论、技术、应用三个方面进行学习与思考。密码体制(协议)无疑是我们的学习重点,密码体制(协议)也可以单纯地理解为计算机算法,从而有设计、分析、证明、实现的问题。实现密码体制(协议)就是我们经常讲的八个字:模型、算法、程序、测试。 二、课程设计步骤 课程设计步骤要求如下: 1.模型 从数学的角度看,解决任何问题都要建立一个数学模型,对于密码学来说更是如此。我们还可以认为,数据结构中的存储结构也是模型。于是这一部分的任务就是建立起问题的逻辑结构和存储结构,为算法设计和编码实现打下基础。 2.算法 这一部分对同学们的要求是能看懂书上的常用算法,并对其中的参数可以进行调整和设置,能实现和应用它们。 3.程序 编码实现得到程序。 4. 测试 5. 提交课程设计报告

三、课程设计报告编写要求 课程设计报告开头标明课程设计题目、设计者的班级、姓名、学号和完成日期,内容包括:模型、算法、程序、测试四个部分。 四、设计要求 可以只做第7题,不做第7题的要做第1题-第6题。 五、课程设计题目 大整数运算包的设计与实现 1.问题描述 大整数运算是现代密码学算法实现的基础,重要性不言而喻。大整数我们指的是二进制位512、1024和2048的数,一般的语言不支持。 2.基本要求 以类库头文件的形式实现。 3.实现提示 在选择了大整数的存储结构之后,主要实现以下运算: ①模加; ②模减; ③模乘; ④模整除; ⑤模取余。这五种运算模拟手算实现。 ⑥幂模:利用“平方-乘法”算法实现。 ⑦GCD:利用欧几里得算法实现。 ⑧乘法逆: 利用扩展的欧几里得算法实现。 ⑨素数判定与生成:概率性素数产生方法产生的数仅仅是伪素数,其缺点在于,

密码学课程设计-刘欣凯

现代密码学实验 题目:2012现代密码学实验 姓名:刘欣凯学号:192102-21 院(系):计算机学院专业:信息安全指导教师:任伟职称:副教授 评阅人:职称: 2012 年12 月

现代密码学实验原创性声明 本人以信誉声明:所呈交的现代密码学实验是在导师指导下进行的研究工作及取得的研究成果,论文中引用他人的文献、数据、图件、资料均已明确标注出,论文中的结论和结果为本人独立完成,不包含他人成果及为获得中国地质大学或其他教育机构的学位或证书而使用过的材料。与我一同工作的同志对本研究所做的任何贡献均已在论文中作了明确的说明并表示了谢意。 毕业论文作者(签字):刘欣凯 签字日期:2012年12 月18 日 学校代码:10491 本科生学号:20101003356

现代密码学实验 本科生:刘欣凯 学科专业:信息安全 指导老师:任伟 二〇一二年十二月

目录 实验一古典密码算法 (5) 1.1 仿射密码 (5) 1.11 算法原理和设计思路 (5) 1.12 关键算法分析 (5) 1.13运行结果 (7) 1.2古典密码hill (8) 1.21古典密码hill概述 (8) 1.22 算法原理和设计思路 (8) 1.23 关键算法分析 (9) 1.24 运行结果 (10) 1.25 密码安全性分析 (10) 1.3古典密码Vegenere (12) 1.31古典密码Vegenere概述 (12) 1.32算法原理和设计思路 (12) 1.33 关键算法分析 (12) 1.34 运行结果 (13) 1.35密码安全性分析 (14) 1.4古典密码Playfair (15) 1.41古典密码Playfair概述 (15) 1.42算法原理和设计思路 (15) 1.43 运行结果 (17) 1.44 密码安全性分析 (17) 实验二ElGamal签名体制 (18) 2.1 ElGamal签名概述 (18) 2.2算法原理和设计思路 (18) 2.3关键算法分析 (20) 2.4运行结果 (20) 实验三 Rabin加密和签名 (21)

AES密码学课程设计(C语言实现)

成都信息工程学院课程设计报告 AES加密解密软件的实现 课程名称:应用密码算法程序设计 学生姓名:樊培 学生学号:2010121058 专业班级:信息对抗技术101 任课教师:陈俊 2012 年6月7日

课程设计成绩评价表

目录 1、选题背景 (4) 2、设计的目标 (4) 2.1基本目标: (4) 2.2较高目标: (5) 3、功能需求分析 (5) 4、模块划分 (6) 4.1、密钥调度 (6) 4.2、加密 (8) 4.2.1、字节代替(SubBytes) (8) 4.2.2、行移位(ShiftRows) (10) 4.2.3、列混合(MixColumn) (11) 4.2.4、轮密钥加(AddRoundKey) (13) 4.2.5、加密主函数 (14) 4.3、解密 (16) 4.3.1、逆字节替代(InvSubBytes) (16) 4.3.2、逆行移位(InvShiftRows) (17) 4.3.3、逆列混合(InvMixCloumns) (17) 4.3.4、轮密钥加(AddRoundKey) (18) 4.3.5、解密主函数 (18) 5.测试报告 (20) 5.1主界面 (20) 5.2测试键盘输入明文和密钥加密 (20) 5.3测试键盘输入密文和密钥加密 (21) 5.3测试文件输入明文和密钥加密 (22) 5.4测试文件输入密文和密钥加密 (22) 5.5软件说明 (23) 6.课程设计报告总结 (23) 7.参考文献 (24)

1、选题背景 高级加密标准(Advanced Encryption Standard,AES),在密码学中又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准。这个标准用来替代原先的DES,已经被多方分析且广为全世界所使用。经过五年的甄选流程,高级加密标准由美国国家标准与技术研究院(NIST)于2001年11月26日发布于FIPS PUB 197,并在2002年5月26日成为有效的标准。2006年,高级加密标准已然成为对称密钥加密中最流行的算法之一。该算法为比利时密码学家Joan Daemen和Vincent Rijmen所设计,结合两位作者的名字,以Rijndael 之命名之,投稿高级加密标准的甄选流程。(Rijndael的发音近于 "Rhine doll") 严格地说,AES和Rijndael加密法并不完全一样(虽然在实际应用中二者可以互换),因为Rijndael加密法可以支援更大范围的区块和密钥长度:AES的区块长度固定为128 位元,密钥长度则可以是128,192或256位元;而Rijndael使用的密钥和区块长度可以是32位元的整数倍,以128位元为下限,256位元为上限。加密过程中使用的密钥是由Rijndael 密钥生成方案产生。大多数AES计算是在一个特别的有限域完成的。 截至2006年,针对AES唯一的成功攻击是旁道攻击 旁道攻击不攻击密码本身,而是攻击那些实作于不安全系统(会在不经意间泄漏资讯)上的加密系统。2005年4月,D.J. Bernstein公布了一种缓存时序攻击法,他以此破解了一个装载OpenSSL AES加密系统的客户服务器[6]。为了设计使该服务器公布所有的时序资讯,攻击算法使用了2亿多条筛选过的明码。有人认为[谁?],对于需要多个跳跃的国际互联网而言,这样的攻击方法并不实用[7]。 Bruce Schneier称此攻击为“好的时序攻击法”[8]。2005年10月,Eran Tromer和另外两个研究员发表了一篇论文,展示了数种针对AES的缓存时序攻击法。其中一种攻击法只需要800个写入动作,费时65毫秒,就能得到一把完整的AES密钥。但攻击者必须在执行加密的系统上拥有执行程式的权限,方能以此法破解该密码系统。 虽然高级加密标准也有不足的一面,但是,它仍是一个相对新的协议。因此,安全研究人员还没有那么多的时间对这种加密方法进行破解试验。我们可能会随时发现一种全新的攻击手段会攻破这种高级加密标准。至少在理论上存在这种可能性。 2、设计的目标 2.1基本目标: (1)在深入理解AES加密/解密算法理论的基础上,能够设计一个AES加密/解密软件系统,采用控制台模式,使用VS2010进行开发,所用语言为C语言进行编程,实现加密解密; (2)能够完成只有一个明文分组的加解密,明文和密钥是ASCII码,长度都为16个字符(也就是固定明文和密钥为128比特),输入明文和密钥,输出密文,进行加密后,能够进

密码学课程设计设计

2009年密码学暑期课程设计说明 姓名:张志佳学号:072337 下面分别是AuthorityServer服务器端,ClientGUI客户端,以及ProviderGUI 提供者端得三张主界面的截图: 1.AuthorityServer服务器端: 2.ClientGUI客户端:

3.ProviderGUI提供者端:

本软件的总体介绍: 平时,我们在上网时,经常会从网上面下载一些资源,有时要注册为XX 网站的用户才能够下载网站的资源,本软件就是实现的这样一系列功能的演示软件,因为演示软件,因此讲很多东西都做到了软件的外面,看起来很繁琐,其实,你如果按照下面的操作说明,按步骤执行还是很简单的。 本软件,并没有做用户的注册这一模块,而是将预先将一张用户列表存在服务器端,用户必须用列表中的用户名,才能够登录服务器成功,并且如果你的用户密码不正确,也不能获得正确的资源密文。 资源的加密加密是采用现在还是很安全的DES加密算法实现,在传输过程中,对数据进行MAC认证,来确认数据是否,本修改过。 可能会遇到的问题: 问题1. 有可能你在按下某一个按钮时,会出现如下的提示信息,如图示: 解决方法:这是因为你将.exe 程序从根目录中拿到外面了,程序中需要在根目录下载入.txt 文件。因此建议测试者请不要将exe程序拿到外面测试,如果拿到外面测试,请将根目录中的“name.txt”和“密码学课程设计软件说明.chm”文件一起复制出来,从而使程序能够正常的运行。 问题 2.在执行客户端应用程序时,可能你在点击Client客户端界面上的“获取密钥”按钮时,界面会出现卡住的现象,

1密码学-DES实验报告

南京信息工程大学实验(实习)报告实验(实习)名称对称密码实验(实习)日期得分指导教师 系计软院专业网络工程年2011 班次 1 姓名学号20111346026 一.实验目的 1.理解对称加密算法的原理和特点 2.理解DES算法的加密原理 二.实验内容 第一阶段:初始置换IP。在第一轮迭代之前,需要加密的64位明文首先通过初始置换IP 的作用,对输入分组实施置换。最后,按照置换顺序,DES将64位的置换结果分为左右两部分,第1位到第32位记为L0,第33位到第64位记为R0。 第二阶段:16次迭代变换。DES采用了典型的Feistel结构,是一个乘积结构的迭代密码算法。其算法的核心是算法所规定的16次迭代变换。DES算法的16才迭代变换具有相同的结构,每一次迭代变换都以前一次迭代变换的结果和用户密钥扩展得到的子密钥Ki作为输入;每一次迭代变换只变换了一半数据,它们将输入数据的右半部分经过函数f后将其输出,与输入数据的左半部分进行异或运算,并将得到的结果作为新的有半部分,原来的有半部分变成了新的左半部分。用下面的规则来表示这一过程(假设第i次迭代所得到的结果为LiRi): Li = Ri-1; Ri = Li-1⊕f(Ri-1,Ki);在最后一轮左与右半部分并未变换,而是直接将R16 L16并在一起作为未置换的输入。 第三阶段:逆(初始)置换。他是初始置换IP的逆置换,记为IP-1。在对16次迭代的结果(R16 L16)再使用逆置换IP-1后,得到的结果即可作为DES加密的密文Y输出,即Y = IP-1 (R16 L16) 三.流程图&原理图

流程图

DES原理图

华科大密码学课程设计实验报告

密码学课程设计实验报告 专业:信息安全 班级:0903 姓名:付晓帆 学号:U200915328

一、 DES 的编程实现 1.实验目的 通过实际编程掌握DES 的加、脱密及密钥生成过程,加深对DES 算法的认识。 2.实验原理 a.加密过程 DES 是一个分组密码,使用长度为56比特的密钥加密长度为64比特的明文,获得长度为64比特的密文,其加密过程: (1) 给定一个明文X ,通过一个固定的初始置换IP 置换X 的比特,获得X0,X0=IP(X)=L0R0,L0R0分别是X0的前32比特和后32比特。 (2) 然后进行16轮完全相同的运算,有如下规则,其中0

实验报告_密码学

信息安全实验报告 学号: 学生姓名: 班级:

实验三密码学实验 一、古典密码算法实验 一、实验目的 通过编程实现替代密码算法和置换密码算法,加深对古典密码体制的了解,为深入学习密码学奠定基础。 二、编译环境 运行windows 或linux 操作系统的PC 机,具有gcc(linux)、VC (windows)等C语言编译环境。 三、实验原理 古典密码算法历史上曾被广泛应用,大都比较简单,使用手工和机械操作来实现加密和解密。它的主要应用对象是文字信息,利用密码算法实现文字信息的加密和解密。下面介绍两种常见的具有代表性的古典密码算法,以帮助读者对密码算法建立一个初步的印象。 1.替代密码 替代密码算法的原理是使用替代法进行加密,就是将明文中的字符用其它字符替代后形成密文。例如:明文字母a、b、c、d ,用D、E、F、G做对应替换后形成密文。 替代密码包括多种类型,如单表替代密码、多明码替代密码、多字母替代密码、多表替代密码等。下面我们介绍一种典型的单表替代密码,恺撒(caesar)密码,又叫循环移位密码。它的加密方法,就是将明文中的每个字母用此字符在字母表中后面第k个字母替代。它的加密过程可以表示为下面的函数:E(m)=(m+k) mod n 其中:m 为明文字母在字母表中的位置数;n 为字母表中的字母个数;k 为密钥;E(m)为密文字母在字母表中对应的位置数。例如,对于明文字母H,其在字母表中的位置数为8,设k=4,则按照上式计算出来的密文为L:E(8) = (m+k) mod n = (8+4) mod 26 = 12 = L

2.置换密码 置换密码算法的原理是不改变明文字符,只将字符在明文中的排列顺序改 变,从而实现明文信息的加密。置换密码有时又称为换位密码。 矩阵换位法是实现置换密码的一种常用方法。它将明文中的字母按照给的 顺序安排在一个矩阵中,然后用根据密钥提供的顺序重新组合矩阵中字母,从而 形成密文。例如,明文为attack begins at five,密钥为cipher,将明文按照每行 6 列的形式排在矩阵中,形成如下形式: a t t a c k b e g i n s a t f i v e 根据密钥cipher中各字母在字母表中出现的先后顺序,给定一个置换: 1 2 3 4 5 6 f = 1 4 5 3 2 6 根据上面的置换,将原有矩阵中的字母按照第 1 列,第 4 列,第 5 列,第 3 列, 第2列,第 6 列的顺序排列,则有下面形式: a a c t t k b i n g e s a I v f t e 从而得到密文:abatgftetcnvaiikse 其解密的过程是根据密钥的字母数作为列数,将密文按照列、行的顺序写出,再根据由密钥给出的矩阵置换产生新的矩阵,从而恢复明文。 四、实验内容和步骤 1、根据实验原理部分对替代密码算法的介绍,自己创建明文信息,并选择 一个密钥k,编写替代密码算法的实现程序,实现加密和解密操作。 2、根据实验原理部分对置换密码算法的介绍,自己创建明文信息,并选择一个密钥,编写置换密码算法的实现程序,实现加密和解密操作。 五、总结与思考 记录程序调试过程中出现的问题,分析其原因并找出解决方法。记录最终实现的程序执行结果。

密码学课程设计

一、设计题目 随机数产生器应用系统 二、课题要求 系统功能要求: 1)模拟线性移位寄存器、线性同余发生器等产生伪随机数,并比较算法性能以及伪随机数的随机性; 2)利用该模拟随机数,应用到口令认证系统中,完成口令的生产、口令的加密保护、登陆验证等功能; 3)利用该模拟随机数,应用到密钥生成系统中,可以利用该密钥完成对称密钥的加密和解密功能。 三、系统设计和模块设计 1.总体设计思路 利用线性同余发生器(LCG)和线性反馈移位寄存器(LFSR)生成伪随机数M序列,并通过口令认证系统完成口令生成加密工作,同时完成对随机数的加密和解密功能。 2.模块设计思路 2.1原理 通过一定的算法对事先选定的随机种子(seed)做一定的运算可以得到一组人工生成的周期序列,在这组序列中以相同的概率选取其中一个数字,该数字称作伪随机数,由于所选数字并不具有完全的随机性,但是从实用的角度而言,其随机程度已足够了。这里的“伪”的含义是,由于该随机数是按照一定算法模拟产生的,

其结果是确定的,是可见的,因此并不是真正的随机数。伪随机数的选择是从随机种子开始的,所以为了保证每次得到的伪随机数都足够地“随机”,随机种子的选择就显得非常重要,如果随机种子一样,那么同一个随机数发生器产生的随机数也会一样。 2.2线性同余算法生成随机数 到目前为止,使用最为广泛的随机数产生技术是由Lehmer首先提出的称为线性同余算法,即使用下面的线性递推关系产生一个伪随机数列x1,x2,x3,… 这个算法有四个参数,分别是: a 乘数 0 ≤ a < m c 增量 0 ≤ c< m m 模数 m > 0 ≤ x0 < m x0 初始种子(秘密) 0 伪随机数序列{ xn}通过下列迭代方程得到: xn+1=(axn+c)modm 如果m、a、c和x0都是整数,那么通过这个迭代方程将产生一系列的整数,其中每个数都在0 ≤ xn < m的范围内。数值m、a和c的选择对于建立一个好的伪随机数产生器十分关键。为了形成一个很长的伪随机数序列,需要将m设置为一个很大的数。一个常用准则是将m选为几乎等于一个给定计算机所能表示的最大非负整数。因而,在一个32位计算机上,通常选择的m值是一个接近或等于231的整数。此外,为了使得随机数列不易被重现,可以使用当前时间的毫秒数作为初始种子的位置。 2.2 线性反馈移位寄存器生成随机数 LFSR是指给定前一状态的输出,将该输出的线性函数再用作输入的线性寄存器。异或运算是最常见的单比特线性函数:对寄存器的某些位进行异或操作后作为输入,再对寄存器中的各比特进行整体移位。赋给寄存器的初始值叫做“种子”,因为线性反馈移位寄存器的运算是确定性的,所以,由寄存器所生成的数据流完全决定于寄存器当时或者之前的状态。而且,由于寄存器的状态是有

密码学实验报告(AES,RSA)

华北电力大学 实验报告| | 实验名称现代密码学课程设计 课程名称现代密码学 | | 专业班级:学生姓名: 学号:成绩: 指导教师:实验日期:

[综合实验一] AES-128加密算法实现 一、实验目的及要求 (1)用C++实现; (2)具有16字节的加密演示; (3)完成4种工作模式下的文件加密与解密:ECB, CBC, CFB,OFB. 二、所用仪器、设备 计算机、Visual C++软件。 三. 实验原理 3.1、设计综述 AES 中的操作均是以字节作为基础的,用到的变量也都是以字节为基础。State 可以用4×4的矩阵表示。AES 算法结构对加密和解密的操作,算法由轮密钥开始,并用Nr 表示对一个数据分组加密的轮数(加密轮数与密钥长度的关系如表2所示)。AES 算法的主循环State 矩阵执行1 r N 轮迭代运算,每轮都包括所有 4个阶段的代换,分别是在规范中被称为 SubBytes(字节替换)、ShiftRows(行位移变换)、MixColumns(列混合变换) 和AddRoundKey ,(由于外部输入的加密密钥K 长度有限,所以在算法中要用一个密钥扩展程序(Keyexpansion)把外部密钥 K 扩展成更长的比特串,以生成各轮的加密和解密密钥。最后执行只包括 3个阶段 (省略 MixColumns 变换)的最后一轮运算。 表2 AES 参数 比特。

3.2、字节代替(SubBytes ) AES 定义了一个S 盒,State 中每个字节按照如下方式映射为一个新的字节:把该字节的高4位作为行值,低4位作为列值,然后取出S 盒中对应行和列的元素作为输出。例如,十六进制数{84}。对应S 盒的行是8列是4,S 盒中该位置对应的值是{5F}。 S 盒是一个由16x16字节组成的矩阵,包含了8位值所能表达的256种可能的变换。S 盒按照以下方式构造: (1) 逐行按照升序排列的字节值初始化S 盒。第一行是{00},{01},{02},…,{OF}; 第二行是{10},{l1},…,{1F}等。在行X 和列Y 的字节值是{xy}。 (2) 把S 盒中的每个字节映射为它在有限域GF(k 2)中的逆。GF 代表伽罗瓦域,GF(82) 由一组从0x00到0xff 的256个值组成,加上加法和乘法。 ) 1(] [2)2(3488++++= x x x x X Z GF 。{00}被映射为它自身{00}。 (3) 把S 盒中的每个字节记成),,,,,,,,(012345678b b b b b b b b b 。对S 盒中每个字节的每位 做如下变换: i i i i i i c b b b b b i b ⊕⊕⊕⊕⊕='++++8mod )7(8mod )6(8mod )5(8mod )4( 上式中i c 是指值为{63}字节C 第i 位,即)01100011(),,,,,,,,(012345678=c c c c c c c c c 。符号(')表示更新后的变量的值。AES 用以下的矩阵方式描述了这个变换: ?? ? ?? ? ? ? ? ? ??? ? ????????????+???????????????????????????????????????? ????????????=??????????????????????????0110001111111000011111000011111000011111100011111100011111100011111100017654321076543210b b b b b b b b b b b b b b b b 最后完成的效果如图:

杭电密码学DES密码实验报告

课程实验报告 课程密码学实验 学院通信工程学院 专业信息安全 班级14083611 学号14084125 学生姓名刘博 实验名称DES密码实验 授课教师胡丽琴

DES密码实验 一、实验要求: 1、了解分组密码的起源与涵义。 2、掌握DES密码的加解密原理。 3、用Visual C++实现DES密码程序并输出结果。 二、实验内容: 1、1949年,Shannon发表了《保密系统的通信理论》,奠定了现代密码学的基础。他还指出混淆和扩散是设计密码体制的两种基本方法。扩散指的是让明文中的每一位影响密文中的许多位,混淆指的是将密文与密钥之间的统计关系变得尽可能复杂。而分组密码的设计基础正是扩散和混淆。在分组密码中,明文序列被分成长度为n的元组,每组分别在密钥的控制下经过一系列复杂的变换,生成长度也是n的密文元组,再通过一定的方式连接成密文序列。 2、DES是美国联邦信息处理标准(FIPS)于1977年公开的分组密码算法,它的设计基于Feistel对称网络以及精心设计的S盒,在提出前已经进行了大量的密码分析,足以保证在当时计算条件下的安全性。不过,随着计算能力的飞速发展,现如今DES已经能用密钥穷举方式破解。虽然现在主流的分组密码是AES,但DES的设计原理仍有重要参考价值。在本实验中,为简便起见,就限定DES 密码的明文、密文、密钥均为64bit,具体描述如下: 明文m是64bit序列。 初始密钥K是64 bit序列(含8个奇偶校验bit)。 子密钥K1, K2…K16均是48 bit序列。 轮变换函数f(A,J):输入A(32 bit序列), J(48 bit序列),输出32 bit序列。 密文c是64 bit序列。 1)子密钥生成: 输入初始密钥,生成16轮子密钥K1, K2 (16) 初始密钥(64bit)经过置换PC-1,去掉了8个奇偶校验位,留下56 bit,接着分成两个28 bit的分组C0与D0,再分别经过一个循环左移函数LS1,得到C1与D1,连成56 bit数据,然后经过置换PC-2,输出子密钥K1,以此类推产生K2至K16。

密码学-RSA加密解密算法的实现课程设计报告

密码学课程报告《RSA加密解密算法》 专业:信息工程(信息安全) 班级:1132102 学号:201130210214 姓名:周林 指导老师:阳红星 时间:2014年1月10号

一、课程设计的目的 当前最著名、应用最广泛的公钥系统RSA是在1978年,由美国麻省理工学院(MIT)的Rivest、Shamir和Adleman在题为《获得数字签名和公开钥密码系统的方法》的论文中提出的。 RSA算法是第一个既能用于数据加密也能用于数字签名的算法,因此它为公用网络上信息的加密和鉴别提供了一种基本的方法。它通常是先生成一对RSA 密钥,其中之一是保密密钥,由用户保存;另一个为公开密钥,可对外公开,甚至可在网络服务器中注册,人们用公钥加密文件发送给个人,个人就可以用私钥解密接受。为提高保密强度,RSA密钥至少为500位长,一般推荐使用1024位。 公钥加密算法中使用最广的是RSA。RSA算法研制的最初理念与目标是努力使互联网安全可靠,旨在解决DES算法秘密密钥的利用公开信道传输分发的难题。而实际结果不但很好地解决了这个难题;还可利用RSA来完成对电文的数字签名以抗对电文的否认与抵赖;同时还可以利用数字签名较容易地发现攻击者对电文的非法篡改,以保护数据信息的完整性。此外,RSA加密系统还可应用于智能IC卡和网络安全产品。 二、RSA算法的编程思路 1.确定密钥的宽度。 2.随机选择两个不同的素数p与q,它们的宽度是密钥宽度的1/2。 3.计算出p和q的乘积n 。 4.在2和Φ(n)之间随机选择一个数e , e 必须和Φ(n)互素,整数e 用做加密密钥(其中Φ(n)=(p-1)*(q-1))。 5.从公式ed ≡ 1 mod Φ(n)中求出解密密钥d 。 6.得公钥(e ,n ), 私钥 (d , n) 。 7.公开公钥,但不公开私钥。 8.将明文P (假设P是一个小于n的整数)加密为密文C,计算方法为: C = Pe mod n 9.将密文C解密为明文P,计算方法为:P = Cd mod n 然而只根据n和e(不是p和q)要计算出d是不可能的。因此,任何人都可对明文进行加密,但只有授权用户(知道d)才可对密文解密 三、程序实现流程图: 1、密钥产生模块:

密码学课程设计

信息安全技术应用实践 课程设计报告 设计题目信息的安全传递 专业名称: 班级: 学号: 姓名: 指导教师: 2014年7月

目录 一、引言 (3) 二、设计方案 (3) 1.安全需求 (3) 2.概要设计 (3) 3.详细设计 (5) 三、安全性分析........................................................................................................... 错误!未定义书签。 四、运行结果 (8) 五、总结 (8) 参考文献 (11)

一、引言 对于信息安全问题,经常出现QQ被盗号骗取财物等案件的出现。信息的安全性十分重要,尤其是一些个人的隐私。 人们也越来越重视信息的安全传递,所以设计出一个安全传递信息的系统刻不容缓。所以在此次课程设计我设计了一个信息传递系统,此系统是基于JAVA应用程序开发的,结合密码学的加密算法实现。其主要特性是安全的完成信息的传递。 二、设计方案 1.安全需求 1).服务器端每一客户口令安全存储(口令保护) 2).对所有通信内容用分组密码以计数器模式进行加密 3).对所有的通信内容用认证码(MAC)进行完整性检验 4).服务器对每个客户进行身份认证 5).服务器端抗重放攻击 2概要设计 1. (BrokerGUI) 发送代理端代替发送者进行内部操作,它设置了与服务端的共享密钥、实现共享口令的加密密钥的加密、随机密钥的加密,、文件的加密、消息的验证。 工作进程:

假设口令“sharedPwd”为代理与授权服务器共享口令 1)用“sharedPwd”生成加密密钥“K-BC”,以及MAC密钥“K-MAC” 2)随机生成一个密钥“K”;并且用“K”生成一个新的加密密钥“K-temp” 和一个新的MAC密钥“K-MAC-temp”。 3)对输入文件内容进行加密和计算MAC E[ K-temp, file contents ] || MAC[ K-MAC-temp, E[ K-temp, file contents ] ] 4)对新的密钥“K”进行加密和计算MAC E[ K-BC, K ] || MAC[ K-MAC, E[ K-BC, K ] ] 5)输出所有上述信息 2.(BrokerClient) 接收代理端应该设置自己的用户名和密码,且要发防重放的随机数。与服务器端建立通信通道,向服务器端发送加密后的信息。对方接收来自服务器的信息。 相对服务器而言,接收端的任务主要就是保证消息的安全性、保密性、完整性等。 1)用“用户口令”生成加密密钥“K-BC-user”,以及MAC密钥“K-MAC-user1”; 2)接收端提供给服务器 R ||user1 || MAC[ K-MAC-user1, R || user1 ] 这里R是一个随机数,user1为用户名 3)接收端从服务器获得 E[ K-BC-user1, K ] || MAC[ K-MAC-user1, E[ K-BC-user1, K ] ] 解密得“K”,并计算出加密密钥“K-temp”和 一个新的MAC密钥“K-MAC-temp”。 解密和验证“file contents”。 3.AuthorityServer) 服务端实现发送代理端和接收代理端之间的连接,是一个中转站。服务器接受和发送的信息都是加密的,保证了消息的安全性。 服务端实现对了发送代理端的消息认证,实现接收代理端的用户身份认证,对密钥的解密和加密,实现了防重放攻击。 工作进程:

DES算法及其程序实现

DES算法及其程序实现 一.D ES算法概述 ①DES算法为密码体制中的对称密码体制,又被成为美国数据加密标准,是1972年美国IBM公司研制的对称密码体制加密算法。明文按64位进行分组,密钥长64位,密钥事实上是56位参与DES运算(第8、16、24、32、40、48、56、64位是校验位,使得每个密钥都有奇数个1)分组后的明文组和56位的密钥按位替代或交换的方法形成密文组的加密方法。 ②DES算法的特点:分组比较短、密钥太短、密码生命周期短、运算速度较慢。 ③DES算法把64位的明文输入块变为64位的密文输出块,它所使用的密钥也是64位,整个算法的主流程图如下: 二.D ES算法的编程实现 #include #include using namespace std;

const static char ip[] = { //IP置换 58, 50, 42, 34, 26, 18, 10, 2, 60, 52, 44, 36, 28, 20, 12, 4, 62, 54, 46, 38, 30, 22, 14, 6, 64, 56, 48, 40, 32, 24, 16, 8, 57, 49, 41, 33, 25, 17, 9, 1, 59, 51, 43, 35, 27, 19, 11, 3, 61, 53, 45, 37, 29, 21, 13, 5, 63, 55, 47, 39, 31, 23, 15, 7 }; const static char fp[] = { //最终置换 40, 8, 48, 16, 56, 24, 64, 32, 39, 7, 47, 15, 55, 23, 63, 31, 38, 6, 46, 14, 54, 22, 62, 30, 37, 5, 45, 13, 53, 21, 61, 29, 36, 4, 44, 12, 52, 20, 60, 28, 35, 3, 43, 11, 51, 19, 59, 27, 34, 2, 42, 10, 50, 18, 58, 26, 33, 1, 41, 9, 49, 17, 57, 25 }; const static char sbox[8][64] = { //s_box /* S1 */ 14, 4, 13, 1, 2, 15, 11, 8, 3, 10, 6, 12, 5, 9, 0, 7, 0, 15, 7, 4, 14, 2, 13, 1, 10, 6, 12, 11, 9, 5, 3, 8, 4, 1, 14, 8, 13, 6, 2, 11, 15, 12, 9, 7, 3, 10, 5, 0, 15, 12, 8, 2, 4, 9, 1, 7, 5, 11, 3, 14, 10, 0, 6, 13, /* S2 */ 15, 1, 8, 14, 6, 11, 3, 4, 9, 7, 2, 13, 12, 0, 5, 10, 3, 13, 4, 7, 15, 2, 8, 14, 12, 0, 1, 10, 6, 9, 11, 5, 0, 14, 7, 11, 10, 4, 13, 1, 5, 8, 12, 6, 9, 3, 2, 15, 13, 8, 10, 1, 3, 15, 4, 2, 11, 6, 7, 12, 0, 5, 14, 9, /* S3 */ 10, 0, 9, 14, 6, 3, 15, 5, 1, 13, 12, 7, 11, 4, 2, 8, 13, 7, 0, 9, 3, 4, 6, 10, 2, 8, 5, 14, 12, 11, 15, 1, 13, 6, 4, 9, 8, 15, 3, 0, 11, 1, 2, 12, 5, 10, 14, 7, 1, 10, 13, 0, 6, 9, 8, 7, 4, 15, 14, 3, 11, 5, 2, 12, /* S4 */ 7, 13, 14, 3, 0, 6, 9, 10, 1, 2, 8, 5, 11, 12, 4, 15, 13, 8, 11, 5, 6, 15, 0, 3, 4, 7, 2, 12, 1, 10, 14, 9, 10, 6, 9, 0, 12, 11, 7, 13, 15, 1, 3, 14, 5, 2, 8, 4, 3, 15, 0, 6, 10, 1, 13, 8, 9, 4, 5, 11, 12, 7, 2, 14,

密码学实验报告总结

密码学实验报告(本文档为Word版本,下载后可自由编辑) 项目名称:××××××××× 项目负责人:××× 联系电话:××××× 编制日期:×××××

密码学实验报告 实验目的:掌握Caesar密码加密解密原理,并利用VC++编程实现。 实验内容:Caesar密码的加密原理是对明文加上一个密钥(偏移值)而得到密文。假设密钥为3,那么字母“a”对应的ASCII码为97,加上3得100正好是字母“d”的ASCII码值, 实验说明:加密实现的两种方式,只限定英文字母(区分大小写),加密时,根据明文字符是小(大)写字母,采用加密运算: 密文字符=“a”或“A”+(明文字符-“a”或“A”+password%26+26)%26 如果输入其他字符,则直接原样输出,不作处理 可以是任意字符 加密时,我们不做任何区分,直接利用Caesar密码算法 密文字符=明文字符+password 解密反之。 实验结果: void CCaesarDlg::OnButton1() //加密按钮 { UpdateData(TRUE); //从界面上的输入的值传入成员变量 m_crypt=m_plaintxt; //密文进行初始化,它与明文的长度是相同的 for(int i=0;i=48&&m_plaintxt.GetAt(i)<=57) //如果输入的字符是数字 { m_crypt.SetAt(i,'0'+(m_plaintxt.GetAt(i)-'0'+m_password%10 +10)%10);

密 码 学 的 发 展 满分!

课程论文 题目密码学的发展 一、引言 1.研究背景 近几年来,信息安全成为全社会的需求,信息安全保障成为国际社会关注的焦点。而密码学是信息安全的核心,应用密码学技术是实现安全系统的核心技术。应用密码学研究如何实现信息的机密性、完整性和不可否认性。随着信息系统及网络系统的爆炸性增长,形形色色的安全威胁严重阻碍了当前的信息化进程,因此,亟待使用密码学来增强系统的安全性。而密码学课程设计正是为这方面做出了具体的实践。 2.开发意义 密码技术是一门古老而十分有用的技术,随着计算机通信技术的迅猛发展,大量的敏感信息通过公共设施或计算机网络进行交换。特别是Internet的广泛应用、电子商务和电子政务的迅速发展,越来越多的信息需要严格的保密,如:银行账号、个人隐私等。正是这种对信息的机密性和真实性的需求,密码学才逐成为比较热门的学科。 在当今密码学不仅用于国家军事安全上,人们已经将重点更多的集中在实际应用,在你的生活就有很多密码,例如为了防止别人查阅你文件,你可以将你的文件加密;为了防止窃取你钱物,你在银行账户上设置密码,等等。随着科技的发展和信息保密的需求,密码学的应用将融入了你的日常生活。 二、密码学的发展史 1.古典密码 世界上最早的一种密码产生于公元前两世纪。是由一位希腊人提出的,人们称之为棋盘密码,原因为该密码将26个字母放在5×5的方格里,i,j放在一个格子里,具体情况如下表所示 行的标号,β是列标号。如c对应13,s对应43等。如果接收到密 文为:43 15 13 45 42 15 32 15 43 43 11 22 15 ,则对应的明文 即为secure message。另一种具有代表性的密码是凯撒密码。它是 将英文字母向前推移k位。如k=5,则密文字母与明文与如下对应关 系 a b c d e f g h i j k l m n o p q r s t u v w x y z

密码学课程设计(格式)2016

南京航空航天大学 课程设计报告 课程名称密码学课程设计 学院计算机科学与技术年级2014 学生姓名陶超权学号161420330 开课时间2016 至2017 学年第一学期

一、实验目的 通过实现简单的古典密码算法,理解密码学的相关概念如明文(plaintext )、密文(ciphertext )、加密密钥(encryption key )、解密密钥(decryption key )、加密算法(encryption algorithm)、解密算法(decryption algorithm )等。 二、实验内容 1)用C\C++语言实现单表仿射(Affine )加/解密算法; 2)用C\C++语言实现统计26个英文字母出现频率的程序; 3)利用单表仿射加/解密程序对一段较长的英文文章进行加密,再对明文和密文中字母出现的频率进行统计并作对比,观察有什么规律。 仿射变换: 加密:()26mod )(21m k k m E c k +== 解密:( )26mod )(11 2k c k c D m k -==- 其中,k 1和k 2为密钥,k 1∈Z q ,k 2∈Z q *。 三、实验步骤 1)在main 函数中构建框架,函数主要分为三部分,加密,解密,计算字符出现频率; 2)加密函数encrypt(),首先需要输入两个密钥K1,k2,需要注意k2是和26互质的,所以这里用gcd()函数判断了k2与26的最大公约数,加解密都采用了文件操作,明文和密文都保存在文件中,这里加密时根据ascii 码,对大小字母分别加密,其他字符则保持不变; 3)解密函数decode(),和加密函数类似,需要注意解密要用到密钥K2的逆元,所以这里用函数inverse_k2()进行了逆元的求解,另外需要注意的是解密运算过程中可能出现数值为负数的情况,在模运算下应该将它们重新置为整数。 4)计算字符频率函数calculateCharFreq(),这里只对大小字母进行统计,不计其他字符。 源代码: ********************* main.cpp ********************** #include #include int main () { void encrypt (); void decode (); void calculateCharFreq ();

密码学课程设计论文

课程设计 一、课程设计的内容 运用C语言、C++面向对象、数据结构以及刚学习的密码学等知识,在认真学习古典密码的理论知识之后,通过编程进行各类古典密码的算法的实现,并产生界面友好。 二、课程设计的要求与数据 论文摘要包括,摘要正文和关键词,课程设计正文(绪论(说明做这个课题的意义)、理论部分(相关的理论)、代码的实现部分、总结)三、课程设计应完成的工作 各类古典密码算法的编写 程序MFC的关联 论文的撰写(目录的自动生成) 四、应收集的资料及主要参考文献 论文摘要: 本文主要对古典密码中的移位密码(凯撒密码),仿射密码,维吉利亚(Vigenere)密码以,单表代换密码,置换密码和周期置换密码进行算法设计,最后用C++方法实现友好界面。通过对这几个古典密码的算法分析,更加系统的掌握其中的原理和应用。 关键词凯撒密码、置换密码、算法、MFC关联、代码

目录 第1章绪论 (3) 第2章理论部分 (3) 2.1:移位密码 (4) 2.2:仿射密码 (4) 2.3:维吉利亚密码 (4) 2.4:一般的单表代换密码 (4) 2.5:列置换密码 (4) 2.6:周期置换密码 (4) 第3章代码的实现 (5) 3.1:程序主界面: (5) 3.2 移位密码: (5) 3.3 仿射密码 (6) 3.4 维吉利亚密码 (9) 3.5 单表代换密码 (12) 3.6 置换密码 (15) 3.7 周期置换密码 (16) 第4章总结 (18) 第5章参考文献 (19)

第1章绪论 密码学包括两部分,即密码编码学和密码分析学,这两个部分即对立又统一,正是由于其对立性才促进了密码学的发展。一个密码系统的安全性只有通过对该系统抵抗当前各类攻击能力的考查和全面分析才能做出定论。密码体制的安全性分析是一个相当复杂的问题,但有一点是清楚的,那就是掌握现有的分析方法并使用这些方法对相应的体制进行分析以考察其安全强度。 在密码编码体制中,有两种最基本也是最古老的编码体制一直沿用至今,它们是代换密码和置换密码,由于历史悠久并且是现代密码体制的基本组成部分,因而在密码学中占有重要的地位。古典密码是密码学发展的一个阶段,也是近代密码学产生的渊源,尽管古典密码大多比较简单,一般可用手工或机械方式实现其加密和解密过程,破译也比较简单,目前已经很少采用,但了解它们的设计原理,有助于理解、设计和分析现代密码。 日常生活中,在大多数的情况下,我们不用担心别人偷听,因为即使被人偷听到了他也无法用偷听到的信息做什么坏事。但当我们谈论某些比较敏感的话题时,被别人偷听到的话可能会产生一些负面的影响,对当事人很不利。在文字交流中,一些重要的信息,比如重要决定,人事变动和秘密情报等,当事人是不希望别人看到的,但如何进行交流呢?一个简单的办法就是采用文字编码。 例如,将英文中的每个字母固定地换成它后面第5个字母,A换成F,B换成G,…,V换成A,W换成B,…,最后Z换成E。字母编码如下表所示: 原文 A B C D …V W X Y Z 密文 F G H I … A B C D E 因此,消息I love you就变成了n qtaj dtz,消息有明确的信息,而编码后的字符串却是一串乱码,信息隐藏在其中,达到了保密的效果。 对于古典密码体制而言,我们有如下的约定:加密解密时忽略空格和标点符号,这可能让人不太适应,但是经过解密后,几乎总是可以正确的还原明文中的这些空缺。如果保留这些空缺,密文会保持明文的结构特点,为攻击者提供便利。 本文主要是通过对各类型的古典密码进行算法设计,通过编写程序来深层掌握古典密码的算法技术,通过对各类型古典密码进行详细的分析,分工讨论,在实现系统掌握这些密码算法的同时,也对C语言和C++面向对象进行了复习,有效的巩固了以前的知识,也培养了对专业密码学的学习兴趣。 第2章理论部分 代换是古典密码中用到的最基本的处理技巧,它在现代密码学中得到了广泛的应用,内容非常的丰富,人们采用代换密码进行加密时并没有固定的模式。按照一个明文字母是否总是被一个固定的字母代换进行划分时,代换密码可以分为两大类:(1)单表代换密码:对明文消息中出现的同一个字母,在加密时都用同一个固定的字母来代换,不管它出现在什么地方。移位密码和仿射密码都属于单表代换密码。 (2)多表代换密码:明文消息中出现的同一个字母,在加密时不是完全被同一个

相关文档
相关文档 最新文档