密码学课程设计目录一.实验目的...........................................................................................................................1二.实验内容及基本要求.......................................................................................................12.1、分组密码SPN的编程实现............................................................................................12.2、RSA的加/解密及快速加/解密.......................................................................................12.3、随机性检测......................................................................................................................1三.实验原理...........................................................................................................................13.1、分组密码SPN.................................................................................................................13.2、RSA的加/解密及快速加/解密.......................................................................................63.3、随机性检测......................................................................................................................6四.实验过程...........................................................................................................................75.1、分组密码SPN.................................................................................................................75.1.1SPN加密..............................................................................................................75.1.2线性密码分析.....................................................................................................105.1.3差分密码分析.....................................................................................................125.2、RSA的加/解密及快速加/解密.....................................................................................155.1.1生成大素数.........................................................................................................155.1.2运用模重复平方的RSA加/解密......................................................................185.1.3运用蒙哥马利的RSA快速加解密...................................................................205.1.4运用中国剩余定理的RSA解密.......................................................................235.3、随机性检测....................................................................................................................25五.实验结果.........................................................................................................................256.1、分组密码SPN...............................................................................................................256.2、RSA的加/解密及快速加/解密.....................................................................................286.3、随机性检测....................................................................................................................31六.实验心得总结.................................................................................................................33密码学课程设计1一.实验目的通过课程设计,使学生进一步熟悉密码算法以及算法安全性的基本概念和原理;培养学生将密码理论和技术应用于实际的能力,使学生具备实施数据加/脱密和基本的密码分析的能力。二.实验内容及基本要求2.1、分组密码SPN的编程实现①加密:输入初始加密密钥和一串有意义的字符串,显示相应的加密结果;②线性分析:通过对明密文对的线性分析,破解出初始加密密钥;③差分分析:通过对明密文对的差分分析,破解出初始加密密钥;④设计用户界面,界面要有加密选择,线性与差分分析选择,输入密钥与明文栏以及密文显示栏;2.2、RSA的加/解密及快速加/解密①编制或网上下载大素数生成算法,产生二个大素数p和q;②编写RSA的加/解密过程和快速加/解密过程;③通过调用时钟对二种加/解密方法的时间开销进行测试;④设计用户界面,界面要有加/解密方式选择,快速方式与一般方式的选择及时间开销显示。2.3、随机性检测密文的随机性反映了密码的强度,通过设计随机性测试算法或运用工具对SPN生成的密文进行随机性检测,来测试SPN的密码强度。三.实验原理3.1、分组密码SPN(1)迭代密码迭代密码的核心是一个密钥编排方案和一个轮函数密码学课程设计2密钥编排方案对密钥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}lmK⊆({0,1}lm)Nr+1是由初始密钥k用密钥编排算法生成的所有可能的密钥编排方案集合,一个密钥编排方案记为(k1,k2,...,kNr+1)状态值w长度为l×m,记为w1,w2,...,wlm;w可以看成m个长度为l的子串连接而成,记为w=w1,w2,...,wm,其中wi=w(i-1)l+1,w(i-1)l+2,...,w(i-1)l+l加密过程使用如下算法描述:w0=xforr=1toNr-1{ur=wr-1⊕kr//白化fori=1tom{vri=πs(uri)//代替}wr=(vrπp(1),vrπp(2),...,vrπp(lm))//置换}uNr=wNr-1⊕kNrfori=1tom{vNri=πs(uNri)//代替}密码学课程设计3y=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输入输出线性关系示例密码学课程设计4这种输入输出关系是一种”线性关系”。采用已知明文攻击方法,如果掌握了足够多的明-密文对,即可求出轮密钥ki,进而根据轮密钥编排方案反向推导出加密密钥k。线性密码分析思路为找到足够多的明文-密文对,对可能的密钥进行穷举,计算相关随机变量的偏差,正确的密钥作用下,偏差的绝对值最大不需要对全部密钥空间进行穷举,只需要对随机变量有影响的密钥比特进行穷举,这些密钥比特称为候选子密钥具体算法如下:线性攻击(T,T,πs-1)for(L1,L2)=(0,0)to(F,F){//L1,L2表示候选子密钥k52和k54Count[L1,L2]=0//每个候选子密钥分配一个计数器并初