通信安全.docx
- 文档编号:5454195
- 上传时间:2023-05-08
- 格式:DOCX
- 页数:13
- 大小:91.34KB
通信安全.docx
《通信安全.docx》由会员分享,可在线阅读,更多相关《通信安全.docx(13页珍藏版)》请在冰点文库上搜索。
通信安全
密码算法
1205021042华奇林12通信工程
(一)班
1恺撒密码
它是一种代换密码。
据说凯撒是率先使用加密函的古代将领之一,因此这种加密方法被称为恺撒密码。
凯撒密码作为一种最为古老的对称加密体制,在古罗马的时候都已经很流行,他的基本思想是:
通过把字母移动一定的位数来实现加密和解密。
明文中的所有字母都在字母表上向后(或向前)按照一个固定数目进行偏移后被替换成密文。
例如,当偏移量是3的时候,所有的字母A将被替换成D,B变成E,以此类推X将变成A,Y变成B,Z变成C。
由此可见,位数就是凯撒密码加密和解密的密钥。
1.1算法原理
密码的使用最早可以追溯到古罗马时期,《高卢战记》有描述恺撒曾经使用密码来传递信息,即所谓的“恺撒密码”,它是一种替代密码,通过将字母按顺序推后起3位起到加密作用,如将字母A换作字母D,将字母B换作字母E。
因据说恺撒是率先使用加密函的古代将领之一,因此这种加密方法被称为恺撒密码。
这是一种简单的加密方法,这种密码的密度是很低的,只需简单地统计字频就可以破译。
现今又叫“移位密码”,只不过移动的位数不一定是3位而已。
密码术可以大致分为两种,即移位和替换,当然也有两者结合的更复杂的方法。
在移位中字母不变,位置改变;替换中字母改变,位置不变。
将替换密码用于军事用途的第一个文件记载是恺撒著的《高卢记》。
恺撒描述了他如何将密信送到正处在被围困、濒临投降的西塞罗。
其中罗马字母被替换成希腊字母使得敌人根本无法看懂信息。
苏托尼厄斯在公元二世纪写的《恺撒传》中对恺撒用过的其中一种替换密码作了详细的描写。
恺撒只是简单地把信息中的每一个字母用字母表中的该字母后的第三个字母代替。
这种密码替换通常叫做恺撒移位密码,或简单的说,恺撒密码。
尽管苏托尼厄斯仅提到三个位置的恺撒移位,但显然从1到25个位置的移位我们都可以使用,因此,为了使密码有更高的安全性,单字母替换密码就出现了。
1.2代码实现
#include
#include
#include
intmain()
{
chara[100];
while(gets(a))
{
intt=strlen(a);
for(inti=0;i { if((a[i]>='d'&&a[i]<='z')||(a[i]>='D'&&a[i]<='Z')) { a[i]=(char)(a[i]-3); } elseif((a[i]>='a'&&a[i]<='c')||(a[i]>='A'&&a[i]<='C')) { a[i]=(char)(a[i]+23); } } printf("%s\n",a); } return0; } 1.3运行结果 2Vigenere密码算法 2.1Vigenere密码算法原理 Vigenere的密码中,发件人和收件人必须使用同一个关键词(或者同一文字章节),这个关键词或文字章节中的字母告诉他们怎么样才能前后改变字母的位置来获得该段信息中的每个字母的正确对应位置。 比如如果关键字“BIG”被使用了,发件人将把信息按三个字母的顺序排列。 第一个三字母单词的第一个字母将应当向后移动一个位置(因为B是排在A后面的字母),第二个字母需要向后移动8位(I是A后面第8个字母),而第三个字母需要向后移动6位(G是A后面第6个字母)。 2.2Vigenere密码算法流程 2.3Vigenere密码代码实现 #include #include usingnamespacestd; constintN=26; charv[N][N]={{'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'}}; intnumber(charx)//把行号字母对应到数字 { chary='a'; for(inti=0;i { if(x==(y+i))returni; } } voidencryption(stringm,stringk)//加密 { cout<<"明文: "; cin>>m; cout<<"密钥: "; cin>>k; intmlen,klen; mlen=m.length(); klen=k.length(); char*p,*q,*t;//明文,初始密钥,密钥串。 把string换成char p=newchar[m.length()+1]; strcpy(p,m.c_str()); q=newchar[k.length()+1]; strcpy(q,k.c_str()); t=newchar[m.length()+1]; intj=0; for(inti=0;i { t[i]=q[j]; j++; j=j%klen; }//生成密钥 cout<<"密文: "; for(i=0;i cout< cout< } voiddisencryption(stringc,stringk)//解密 { cout<<"密文: "; cin>>c; cout<<"密钥: "; cin>>k; intclen,klen; clen=c.length(); klen=k.length(); char*p,*q,*t;//密文,初始密钥,密钥串。 把string换成char p=newchar[c.length()+1]; strcpy(p,c.c_str()); q=newchar[k.length()+1]; strcpy(q,k.c_str()); t=newchar[c.length()+1]; intj=0; for(inti=0;i { t[i]=q[j]; j++; j=j%klen; }//生成密钥 cout<<"明文: "; for(i=0;i for(intj=0;j if(v[number(t[i])][j]==p[i]){cout< cout< } intmain() { for(inti=1;i { for(intj=0;j { v[i][j]=v[i-1][(j+1)%N]; }//方阵初始化 } cout<<"欢迎使用维吉尼亚加密! "< cout<<"请选择要进行的操作"< intflag; do{ cout<<"1.加密2.解密3.结束: "< cin>>flag; stringm,k; if(flag==1)encryption(m,k); elseif(flag==2)disencryption(m,k); elseif(flag! =1&&flag! =2&&flag! =3)cout<<"输入错误,请重新输入! "; }while(flag! =3); return0; } 2.3Vigenere密码代码运行结果 3RSA算法 3.1算法原理 RSA加密算法是在1977年开发的,是目前最有影响力的公钥加密算法,它能够抵抗到目前为止已知的所有密码攻击,已被ISO推荐为公钥数据加密标准。 RSA算法基于一个十分简单的数论事实: 将两个大素数相乘十分容易,但那时想要对其乘积进行因式分解却极其困难,因此可以将乘积公开作为加密密钥。 在RSA算法中,我们先要获得两个不同的质数P和Q做为算法因子,再找出一个正整数E,使得E与 (P-1)*(Q-1) 的值互质,这个E就是私钥。 找到一个整数D,使得(E*D)mod((P-1)*(Q-1))=1成立,D就是公钥1。 设N为P和Q的乘积,N则为公钥2。 加密时先将明文转换为一个或一组小于N的整数I,并计算ID modN的值M,M就密文。 解密时将密文ME modN,也就是M的E次方再除以N所得的余数就是明文。 因为私钥E与(P-1)*(Q-1)互质,而公钥D使(E*D)mod((P-1)*(Q-1))=1成立。 破解者可以得到D和N,如果想要得到E,必须得出(P-1)*(Q-1),因而必须先对N进行因数分解。 如果N很大那么因数分解就会非常困难,所以要提高加密强度P和Q的数值大小起着决定性的因素。 一般来讲当P和Q都大于2128时,按照目前的机算机处理速度破解基本已经不大可能了。 (1)费马小定理: 有N为任意正整数,P为素数,且N不能被P整除,则有NP modP=N (2)积模分解公式有X、Y和Z三个正整数,且X*Y大于Z,则有: (X*Y)modZ=((XmodZ)*(YmodZ))modZ (3)有P和Q两个互质数,如果有XmodP=0,XmodQ=0,则有: XmodPQ=0 (4)有P和Q两个互质数,设有整数X和Y满足YmodP=X,YmodQ=X,则有: YmodPQ=X (5)有P和Q两个互质数,设有整数X和Y满足YmodPQ=X ,则有: YmodP=X,YmodQ=X (6) RSA定理: : 若P和Q是两个相异质数,另有正整数R和M,其中M的值与(P-1)(Q-1)的值互质,并使得(RM)mod(P-1)(Q-1)=1。 有正整数A,且A A=B 3.2密钥生成 RSA算法是一种非对称密码算法,所谓非对称,,使用其中一个加密,则需要用另一个才能解密。 RSA的算法涉及三个参数,n、e1、e2。 其中,n是两个大质数p、q的积,n的二进制表示时所占用的位数,就是所谓的密钥长度。 e1和e2是一对相关的值,e1可以任意取,但要求e1与(p-1)*(q-1);再选择e2,要求(e2*e1)mod((p-1)*(q-1))=1。 (n,e1),(n,e2)就是密钥对。 其中(n,e1)是公共密钥,(n,e2)为私钥。 RSA加解密的算法完全相同,设A为明文,B为密文,则: A=B^e2modn;B=A^e1modn;(公钥加密体制中,一般用公钥加密,私钥解密) e1和e2可以互换使用,即: A=B^e1modn;B=A^e2modn; 3.3代码实现 C源程序 #include intcandp(inta,intb,intc)//数据处理函数,实现幂的取余运算 {intr=1; b=b+1; while(b! =1) { r=r*a; r=r%c; b--; } printf("%d\n",r); returnr; } intfun(intx,inty)//公钥e与t的互素判断 { intt; while(y) { t=x; x=y; y=t%y; } if(x==1) return0;//x与y互素时返回0 else return1;//x与y不互素时返回1 } voidmain() { intp,q,e,d,m,n,t,c,r; printf("请输入两个素数p,q: "); scanf("%d%d",&p,&q); n=p*q; printf("计算得n为%3d\n",n); t=(p-1)*(q-1);//求n的欧拉数 printf("计算得t为%3d\n",t); printf("请输入公钥e: "); scanf("%d",&e); if(e<1||e>t||fun(e,t)) { printf("e不合要求,请重新输入: ");//e<1或e>t或e与t不互素时,重新输入 scanf("%d",&e); } d=1; while(((e*d)%t)! =1)d++;//由公钥e求出私钥d printf("经计算d为%d\n",d); printf("加密请输入1\n");//加密或解密选择 printf("解密请输入2\n"); scanf("%d",&r); switch(r) { case1: printf("请输入明文m: ");//输入要加密的明文数字 scanf("%d",&m); c=candp(m,e,n); printf("密文为%d\n",c);break; case2: printf("请输入密文c: ");//输入要解密的密文数字 scanf("%d",&c); m=candp(c,d,n); printf("明文为%d\n",m);break; } } 3.4RSA的安全性与破解 在RSA密码应用中,公钥KU是被公开的,即e和n的数值可以被第三方窃听者得到。 破解RSA密码的问题就是从已知的e和n的数值(n等于pq),想法求出d的数值,这样就可以得到私钥来破解密文。 从上文中的公式: d≡e-1(mod((p-1)(q-1)))或de≡1(mod((p-1)(q-1)))我们可以看出。 密码破解的实质问题是: 从Pq的数值,去求出(p-1)和(q-1)。 换句话说,只要求出p和q的值,我们就能求出d的值而得到私钥。 当p和q是一个大素数的时候,从它们的积pq去分解因子p和q,这是一个公认的数学难题。 比如当pq大到1024位时,迄今为止还没有人能够利用任何计算工具去完成分解因子的任务。 因此,RSA从提出到现在已近二十年,经历了各种攻击的考验,逐渐为人们接受,普遍认为是目前最优秀的公钥方案之一。 然而,虽然RSA的安全性依赖于大数的因子分解,但并没有从理论上证明破译RSA的难度与大数分解难度等价。 即RSA的重大缺陷是无法从理论上把握它的保密性能如何。 此外,RSA的缺点还有: A)产生密钥很麻烦,受到素数产生技术的限制,因而难以做到一次一密。 B)分组长度太大,为保证安全性,n至少也要600bits以上,使运算代价很高,尤其是速度较慢,较对称密码算法慢几个数量级;且随着大数分解技术的发展,这个长度还在增加,不利于数据格式的标准化。 因此,使用RSA只能加密少量数据,大量的数据加密还要靠对称密码算法。 3.5RSA算法的用途 RSA的运算速度慢,所以很少用于对文件的加解密,在保密信道中常用于对会话秘钥的加密。 RSA主要用于PKI身份认证系统,详细说有数字证书、数字签名、数字签章、数字水印、数字信封等。 目前最贴近生活的一些案例如: 银行的u盾、银行卡的刷卡机、淘宝和12306的数字证书。 另外现在随着电子商务电子政务的铺开,登陆认证权限管理越来越贴近生活,RSA的空间越来越大。 当然RSA也有着一些问题,虽然有PKCS系列标准框架罩着,仍然有黑客活动的空间,如前一段时间公布的13分钟破解RSA。 现在商业的前沿已经开始着手用ECC算法来替代RSA,重构人们的密码生活。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 通信 安全