整理密码学课设报告.docx

上传人:b****4 文档编号:670506 上传时间:2022-10-12 格式:DOCX 页数:40 大小:1.48MB
下载 相关 举报
整理密码学课设报告.docx_第1页
第1页 / 共40页
整理密码学课设报告.docx_第2页
第2页 / 共40页
整理密码学课设报告.docx_第3页
第3页 / 共40页
整理密码学课设报告.docx_第4页
第4页 / 共40页
整理密码学课设报告.docx_第5页
第5页 / 共40页
点击查看更多>>
下载资源
资源描述

整理密码学课设报告.docx

《整理密码学课设报告.docx》由会员分享,可在线阅读,更多相关《整理密码学课设报告.docx(40页珍藏版)》请在冰豆网上搜索。

整理密码学课设报告.docx

整理密码学课设报告

一.实验目的

通过课程设计,使学生进一步熟悉密码算法以及算法安全性的基本概念和原理;培养学生将密码理论和技术应用于实际的能力,使学生具备实施数据加/脱密和基本的密码分析的能力。

二.实验内容及基本要求

2.1、分组密码SPN的编程实现

①加密:

输入初始加密密钥和一串有意义的字符串,显示相应的加密结果;

②线性分析:

通过对明密文对的线性分析,破解出初始加密密钥;

③差分分析:

通过对明密文对的差分分析,破解出初始加密密钥;

④设计用户界面,界面要有加密选择,线性与差分分析选择,输入密钥与明文栏以及密文显示栏;

2.2、RSA的加/解密及快速加/解密

①编制或网上下载大素数生成算法,产生二个大素数p和q;

②编写RSA的加/解密过程和快速加/解密过程;

③通过调用时钟对二种加/解密方法的时间开销进行测试;

④设计用户界面,界面要有加/解密方式选择,快速方式与一般方式的选择及时间开销显示。

2.3、随机性检测

密文的随机性反映了密码的强度,通过设计随机性测试算法或运用工具对SPN生成的密文进行随机性检测,来测试SPN的密码强度。

三.实验原理

3.1、分组密码SPN

(1)迭代密码

迭代密码的核心是一个密钥编排方案和一个轮函数

密钥编排方案对密钥k进行变换,生成Nr个子密钥(也叫轮密钥),记为k1,k2,...,kNr

轮函数g是一个状态加密函数,以ki为密钥对当前状态wr-1进行变换,输出新的状态值wr,即g(wr-1,ki)=wr;轮函数是单射函数,存在一个逆变换g-1,有g-1(wr,ki)=wr-1

迭代密码的加密为将密钥k编排成Nr个轮密钥k1,k2,...,kNr,将明文x定义为初始状态w0,经过Nr轮变换得到wNr为密文y,即

w0=x,w1=g(w0,k1),w2=g(w1,k2),...

wNr-1=g(wNr-2,kNr-1),wNr=g(wNr-1,kNr)

y=wNr

迭代密码的解密为将密文y定义为初始状态wNr,经过Nr轮逆变换得到w0为明文x,即

y=wNr,wNr-1=g-1(wNr,kNr),wNr-2=g-1(wNr-1,kNr-1)

...

w1=g-1(w2,k2),w0=g-1(w1,k1),

x=w0

(2)代替-置换网络(Substitution-PermutationNetwork)

代替-置换网络(Substitution-PermutationNetwork)是一种简单的迭代密码。

处理的明文单元和状态值长度为l×m,轮函数g包括两个核心变换——代替和置换,分别记为πs和πp,有

πs:

{0,1}l→{0,1}l

πp:

{1,2,...,lm}→{1,2,...,lm}

在进行轮函数变换前,先用轮密钥和状态值进行异或(称为白化)

(3)SPN密码体制设计

设l,m,Nr是正整数,P=C={0,1}lm

K⊆({0,1}lm)Nr+1是由初始密钥k用密钥编排算法生成的所有可能的密钥编排方案集合,一个密钥编排方案记为(k1,k2,...,kNr+1)

状态值w长度为l×m,记为w1,w2,...,wlm;

w可以看成m个长度为l的子串连接而成,记为

w=w<1>,w<2>,...,w,其中

w=w(i-1)l+1,w(i-1)l+2,...,w(i-1)l+l

加密过程使用如下算法描述:

w0=x

forr=1toNr-1{

ur=wr-1⊕kr//白化

fori=1tom{

vr=πs(ur)//代替

}

wr=(vrπp

(1),vrπp

(2),...,vrπp(lm))//置换

}

uNr=wNr-1⊕kNr

fori=1tom{

vNr=πs(uNr)//代替

}

y=vNr⊕kNr+1//白化

returny

具体加密过程如图3.1所示:

图3.1SPN加密过程示例

(4)线性密码分析

线性密码分析,是通过分析S盒的线性特性,从而发现明文比特、密文比特和密钥比特之间可能存在的线性关系,如果S盒设计不当,这种线性关系会以较大的概率存在,称为概率线性关系。

线性密码分析一种已知明文攻击方法,已知x和y,确定k或k的部分比特。

其中,S盒的选择对SPN的安全性影响巨大,假设一个S盒按如下规则设计,见图3.2

图3.2S盒示例

可以发现其实是将输入进行了循环左移,如图3.3

图3.3输入输出线性关系示例

这种输入输出关系是一种”线性关系”。

采用已知明文攻击方法,如果掌握了足够多的明-密文对,即可求出轮密钥ki,进而根据轮密钥编排方案反向推导出加密密钥k。

线性密码分析思路为找到足够多的明文-密文对,对可能的密钥进行穷举,计算相关随机变量的偏差,正确的密钥作用下,偏差的绝对值最大

不需要对全部密钥空间进行穷举,只需要对随机变量有影响的密钥比特进行穷举,这些密钥比特称为候选子密钥

具体算法如下:

线性攻击(T,T,πs-1)

for(L1,L2)=(0,0)to(F,F){//L1,L2表示候选子密钥k5<2>和k5<4>

Count[L1,L2]=0//每个候选子密钥分配一个计数器并初始化为0

}

foreach(x,y)∈T{

for(L1,L2)=(0,0)to(F,F){

v4<2>=L1⊕y<2>

v4<4>=L2⊕y<4>

u4<2>=πs-1(v4<2>)

u4<4>=πs-1(v4<4>)

z=x5⊕x7⊕x8⊕u46⊕u48⊕u414⊕u416//计算随机变量值

ifz=0{

Count[L1,L2]++;

}

}

max=-1

for(L1,L2)=(0,0)to(F,F){

Count[L1,L2]=|Count[L1,L2]-T/2|

ifCount[L1,L2]>max{

max=Count[L1,L2]

maxkey=(L1,L2)

}

//maxkey即为所求子密钥

(4)差分密码分析

通过分析明文对的差值对密文对差值的影响来恢复某些密钥比特的分析方法,分析两个输入的异或和两个输出的异或之间的线性关系。

构造若干个明文串对,每对明文的异或结果相同,观察相应的密文异或结果。

差分分析是一种选择明文攻击方法,比线性分析更早提出,分析效果略差于线性分析。

仍以“循环左移”S盒为例

假设两个输入分别是x=1010和x*=1101

则相应的输出是y=0101和y*=1011

输入的异或为x’=x⊕x*=0111

输出的异或为y’=y⊕y*=1110

可以发现不论x和x*如何变化,只要它们的异或是0111,相应输出的异或都是1110,(x’,y’)被称为一个差分

如果S盒是线性的,整个SPN也会是线性的,明文和密文的差分也会是线性的

差分分析的优势在于,分析过程基本可以忽略密钥的干扰作用。

差分密码分析思路

找到足够多的四元组(x,x*,y,y*),其中x’=x⊕x*固定不变。

对可能的密钥进行穷举,计算相关差分的扩散率,正确的密钥作用下,扩散率应最大

和线性分析一样,不需要对全部密钥空间进行穷举,只需要对候选子密钥进行穷举即可。

具体算法如下:

差分攻击(T,T,πs-1)

for(L1,L2)=(0,0)to(F,F)//L1,L2表示候选子密钥k5<2>和k5<4>

{

Count[L1,L2]=0//每个候选子密钥分配一个计数器并初始化为0

}

foreach(x,x*,y,y*)∈T

{

if(y<1>=y*<1>andy<3>=y*<3>)

{//只考虑y’<1>和y’<3>=0

for(L1,L2)=(0,0)to(F,F){

v4<2>=L1⊕y<2>

v4<4>=L2⊕y<4>

u4<2>=πs-1(v4<2>)

u4<4>=πs-1(v4<4>)

(v4<2>)*=L1⊕(y<2>)*

(v4<4>)*=L2⊕(y<4>)*

(u4<2>)*=πs-1((v4<2>)*)

(u4<4>)*=πs-1((v4<4>)*)

(u4<2>)’=u4<2>⊕(u4<2>)*

(u4<4>)’=u4<4>⊕(u4<4>)*

if(u4<2>)’=0110and(u4<4>)’=0110{

Count[L1,L2]++;

}

}

}

}

max=-1

for(L1,L2)=(0,0)to(F,F){

ifCount[L1,L2]>max{

max=Count[L1,L2]

maxkey=(L1,L2)}

}

//maxkey即为所求子密钥

3.2、RSA的加/解密及快速加/解密

非对称密码算法是指一个加密系统的加密密钥和解密密钥是不同的,或者说不能用其中一个推导出另一个。

在非对称密码算法的两个密钥中,一个是用于加密的密钥,它是可以公开的,称为公钥;另一个是用于解密的密钥,是保密的,称为私钥。

非对称密码算法解决了对称密码体制中密钥管理的难题,并提供了对信息发送人的身份进行验证手段,是现代密码学最重要的发明。

RSA密码体制是目前为止最成功的非对称密码算法,它是在1977年由Rivest、Shamir和Adleman提出的第一个比较完善的非对称密码算法。

它的安全性是建立在“大数分解和素性检测”这个数论难题的基础上,即将两个大素数相乘在计算上容易实现,而将该乘积分解为两个大素数因子的计算量相当大。

虽然它的安全性还未能得到理论证明,但经过20多年的密码分析和攻击,迄今仍然被实践证明是安全的。

RSA算法描述如下:

(1)公钥

选择两个互异的大素数p和q,n是二者的乘积,即n=pq,使Φ(n)=(p-1)(q-1)为欧拉函数。

随机选取正整数e,使其满足gcd(e,Φ(n))=1,即e和Φ(n)互质,则将(n,e)作为公钥。

(2)私钥

求出正数d,使其满足e×d=1(modΦ(n)),则将(n,d)作为私钥。

(3)加密算法

对于明文M,由C=Me(modn),得到密文C。

(4)解密算法

对于密文C,由M=Cd(modn),得到明文M。

如果窃密者获得了n、e和密文C,为了破解密文必须计算出私钥d,为此需要先分解n。

为了提高破解难度,达到更高的安全性,一般商业应用要求n的长度不小于1024位,更重要的场合不小于2048位。

3.3、随机性检测

随机性测试方法

对于一个用DES加密产生的密文序列,分别以下面三种情况设计测试随机性工具

(1)0和1在密文中所占比例

(2)00、01、10、11在密文中所占比例

(3)000、001、010、011、100、101、110、111在密文中所占比例

四.实验过程

5.1、分组密码SPN

5.1.1SPN加密

(一)数据结构选用

该部分首先确定选用数据结构,我选用C#中的List类型来存储切分后的明文单元与加密后的密文单元以及用于显示的string单元,因为List这种数据结构在添加元素的时候类似于C语言中的链表,动态存储,这样就适应了明文大小不确定的特点,避免了申请固定存储空间大小带来的麻烦。

对于S盒与P盒,我采用一维数组的数据结构来存储相关信息。

具体声明如下:

st

展开阅读全文
相关搜索

当前位置:首页 > 人文社科 > 法律资料

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1