密码学的重要性:
随着计算机网络技术和通讯技术的迅猛发展,大量的敏感信息常常通过计算机网络进行交换,在这些信息的传输与处理的过程中,如何保护信息安全使之不被非法窃取或篡改,成为人们关注的问题。因此计算机密码学就成为信息安全中的一个重要的研究领域。密码体制的分类方法有很多,常用的几种分类方法如下:根据加密与解密算法中使用密钥是否相同,将其分为对称密钥密码体制和非对称密钥密码体制。
非对称密码体制的由来
在公开的计算机网络上安全地传送和保管密钥是一个严峻的问题。正是由于对称密码学中双方都使用相同的密钥,因此无法实现数据签名和不可否认性等功能。20世纪70年代以来,一些学者提出了公开密钥体制,即运用单向函数的数学原理,以实现加、解密密钥的分离。加密密钥是公开的,解密密钥是保密的。密钥对的工作是可以任选方向的。这提供了"数字签名"的基础,如果要一个用户用自己的私人密钥对数据进行了处理,别人可以用他提供的公共密钥对数据加以处理。由于仅仅拥有者本人知道私人密钥,这种被处理过的报文就形成了一种电子签名----一种别人无法产生的文件。 数字证书中包含了公共密钥信息,从而确认了拥有密钥对的用户的身份。
从对称密码到非对称密码
对称密码算法计算开销小,算法简单,加密速度快,是目前用于信息加密的主要算法。但它在进行安全通信前需要以安全方式进行密钥交换。这一步骤,在某些情况下会非常困难,甚至无法实现。例如,某一贸易方有几个贸易关系,他就要维护几个专用密钥且没法鉴别贸易发起方或贸易最终方,因为贸易的双方的密钥相同。另外,由于对称加密系统仅能用于对数据进行加解密处理,提供数据的机密性,不能用于数字签名。因而人们迫切需要寻找新的密码体制。
在谈到加密的时候,最新的不一定是最好的。应该选择那种合适的、已经被大量公开分析和测试过的加密算法,因为在密码学领域是没有机会去尝试一个新算法的。
算法和密钥
明文M,密文C,加密E,解密D
密钥用K表示
K可以是很多数值里的任意值,密钥K的可能值的范围叫做密钥空间。加密和解密运算都使用这个密钥,即运算都依赖于密钥,并用K作为下标表示,加解密函数表达为:
E(M , k)=C
D(C , k)=M
D(E(M , k), k)=M,如图所示。
非对称密码与对称密码的对比
非对称密码体制
优点:
不需要经安全渠道传递密钥,大大简化了密钥管理, 加密数据安全性高。
在多人之间进行保密信息传输所需的密钥组和数量很小。
实现数字签名。
缺点:
公开密钥加密比私有密钥加密在加密/解密时的速度慢,因此公钥加密不适合较大数据。
对称密码体制
优点:
计算开销小,算法简单,密钥较短,加解密速度快,因此特别适用于对较大的数据流执行加密转换。
缺点:
仅能用于对数据进行加解密处理,提供数据的机密性。
规模复杂。
不能实现数字签名。
非对称密码与对称密码的对比
非对称密码体制
应用:主要用于短消息和对称密钥的加密。如SSL,PGP,和S/MIME中。
常用算法:RSA算法、E1 Gamal算法
对称密码体制
应用:主要用于长明文的加密,如文件,网络,数据库加密。
常用算法:(分流加密算法和分组加密算法两种)
非对称密码的应用:数字签名
数字签名是解决商务难题而诞生的,电子商务需要保证交易两方的确定性,而数字签名就能很好的解决。对文件进行加密只解决了传送信息的保密问题,而防止他人对传输的文件进行破坏,以及如何确定发信人的身份还需要采取其它的手段,这一手段就是数字签名。
在电子商务安全保密系统中,数字签名技术有着特别重要的地位,在电子商务安全服务中的源鉴别、完整性服务、不可否认服务中,都要用到数字签名技术。在电子商务中,完善的数字签名应具备签字方不能抵赖、他人不能伪造、在公证人面前能够验证真伪的能力。实现数字签名有很多方法,目前数字签名采用较多的是公钥加密技术。目前的数字签名是建立在公共密钥体制基础上,它是公用密钥加密技术的另一类应用。
混合加密
对称密码体制与非对称密码体制各有优缺点,因此,通常把这两种技术结合起来以实现最佳性能。即用非对称密码技术在通信双方之间传送私钥,而用私钥来对实际传输的数据加密。
RSA算法
背景:
1976年,Diffie和Hellman在文章“密码学新方向”中首次提出了公开密钥密码体制的思想
1977年,Rivest、Shamir和Adleman三个人实现了公开密钥密码体制,现在称为RSA公开密钥体制,它是第一个既能用于数据加密也能用于数字签名的算法。这种算法易于理解和操作,算法的名字以发明者的名字命名:Ron Rivest, Adi Shamir和Leonard Adleman。
RSA的安全性一直未能得到理论上的证明。它经历了各种攻击,至今未被完全攻破
应用前景:
RSA主要用于PKI身份认证系统,详细说有数字证书、数字签名、数字签章、数字水印、数字信封等。目前最贴近生活的一些案例如:银行的u盾、银行卡的刷卡机、淘宝和12306的数字证书。
另外现在随着电子商务电子政务的铺开,登陆认证权限管理越来越贴近生活,RSA的空间越来越大。
安全性分析:
RSA的安全性基于分解大整数的困难性假定,但是否等同于大整数分解一直未能得到理论上的证明,因为没有证明破解 RSA就一定需要作大数分解。假设存在一种无须分解大数的算法,那它肯定可以修改成为大数分解算法。目前, RSA 的一些变种算法已被证明等价于大数分解。不管怎样,分解n是最显然的攻击方法。现在,人们已能分解多个十进制位的大素数。因此,模数n 必须选大一些,因具体适用情况而定。
RSA的缺点:
1)产生密钥很麻烦,受到素数产生技术的限制,因而难以做到一次一密。
2)安全性,RSA的安全性依赖于大数的因子分解,但并没有从理论上证明破译RSA的难度与大数分解难度等价,而且密码学界多数人士倾向于因子分解不是NP问题。
3)速度太慢,由于RSA 的分组长度太大,为保证安全性,n 至少也要 600 bitx以上,使运算代价很高,尤其是速度较慢,较对称密码算法慢几个数量级;且随着大数分解技术的发展,这个长度还在增加,不利于数据格式的标准化。
RSA算法的代码
#include<iostream>
#include<cmath>
using namespace std;
void main()
{
int p,q;
cout<<"请输入两个较大的素数:"<<endl;
cin>>p>>q;
cout<<"p="<<p<<",q="<<q<<endl;
int n,o;
n=p*q;
o=(p-1)*(q-1);
cout<<"n="<<n<<",o="<<o<<endl;
cout<<"请从【0,"<<o-1<<"】中选择一个与"<<o<<"互素的数e:"<<endl;
int e,i;
float d;
cin>>e;
for(i=1;;i++)
{
d=(float)(o*i+1)/e;
if(d-(int)d==0)
break;
}
cout<<"e="<<e<<",d="<<d<<endl;
cout<<"公开密钥Pk={e,n}={"<<e<<","<<n<<"}"<<endl;
cout<<"秘密密钥Sk={d,n}={"<<d<<","<<n<<"}"<<endl;
cout<<endl;
cout<<"请输入要加密的正整数(以-1结束):"<<endl;
int m1[500],m3[500],m4[500];
double m2[500];
int j;
for(j=0;j<500;j++)
{
cin>>m1[j];
if(m1[j]==-1)
break;
m2[j]=pow(m1[j],e);
m4[j]=m2[j]/n;
m3[j]=m2[j]-m4[j]*n;
}
cout<<"密文为:"<<endl;
int k;
for(k=0;k<j;k++)
cout<<m3[k]<<" ";
cout<<endl;
}
ElGamal算法
安全性分析
攻击ElGamal加密算法等价于解离散对数问题,有限域上离散对数问题 已知(Zp,+,*)是一个有限域,g为Zp*的生成元,y∈ Zp ,求x使得y=gx mod p。如果求离散对数问题是容易的,则获得公钥攻击者能够解出x,则算法完全破译。
特点:
Elgamal密码体制的特点是:密文由明文和所选随机数k来确定,因而是非确定性加密,一般称为随机化加密。对同一明文,由于不同时刻的随机数k不同而得出不同的密文。
由于Elgamal算法是建立在计算Zp上离散对数的困难性之上的,而有些p在Zp中离散对数容易求解,应避免使用这类素数。
ElGamal算法代码
#include <stdio.h>
/********************************
变量定义
p:大素数
d:随机选择的密钥
y:公钥
m: 明文
*********************************/
int p , d , y , m ;
/****************************************
int Mod(int x, int y , int m) ;
此函数运用模重复平方计算法快速计算幂取模
需要将y转成2进制 , 在此通过模2,除2,来求
y各个bit位上的值
****************************************/
int Mod(int x,int y,int m){//模平方的运算
int a,b;
a=1;
b=x;
while( y ){
if( y % 2 == 1 )
a = a * b % m ;
y /= 2 ;
b = b * b % m ;
}
return a;
}
/**********************************************
int Inverse(int a , int b , int &x , int &y) ;
这个函数是求逆元的,用的是扩展的欧几里得算法
通过此算法得到的是 a_1*a+b_1*b=1 ; a_1就是
a mod b 的逆元
***********************************************/
int a_1 , b_1 ;
int Inverse(int a,int b,int &a_1,int &b_1)
{
int t,d;
if (b==0) { a_1=1; b_1=0; return a; }
d=Inverse(b,a%b,a_1,b_1);
t=a_1;
a_1=b_1;
b_1=t-a/b*b_1;
return d;
}
void Encry(int p,int a,int d,int m,int k)
{
int u , c1 , c2;
y = Mod( a , d , p ) ;
u = Mod( y , k , p ) ;
c1 = Mod( a , k , p ) ;
c2 = u * m % p ;
printf("c1=%d c2=%d \n",c1,c2) ;
}
void Decry(int c1,int c2,int d,int p)
{
int v , v_1 , m ;
v = Mod ( c1 , d , p ) ;
Inverse( v , p ,a_1 , b_1 ) ;
a_1 = ( a_1 + p ) % p ;
v_1 = a_1 ;
m = c2 * v_1 % p ;
printf("m=%d \n", m ) ;
}
int main()
{
int flag ;
while( 1 ){
printf("操作: 1.加密 2.解密 \n");
scanf("%d",&flag);
if(1==flag){
int a , k;
printf("输入:素数p,生成元a,私钥d,明文m,随机数k; ");
scanf("%d%d%d%d%d",&p,&a,&d,&m,&k);
Encry( p , a , d , m , k ) ;
}
else{
int p , d , c1 , c2;
printf("输入c1,c2,私钥d,素数p; ");
scanf("%d%d%d%d",&c1,&c2,&d,&p);
Decry( c1 , c2 , d , p ) ;
}
}
return 0;
}
/*
p = 2579
a = 2
d = 765
m = 1299
k = 853
*/
RSA算法与EIGamal算法比较:
实验分配工作
:ppt演讲与制作,ElGamal算法程序编写
:论文、RSA算法程序编写
实验总结:
通过这次的实验,了解了非对称密码算法RSA和ElGamal,会运用一些现成的算法进行编程,对一些比较复杂的算法开始基本认识并深刻的掌握。在以后所涉及这方面的知识将会有全新的了解和掌握。
《密码学》课程设计教学大纲
课程编号:089233 设计周数:3 周 学分数:3 应开学期:5
一、课程设计的目的
通过本课程实验,使学生能运用应用密码学的基本概念、基本原理、协议和技术,阐释一般安全网络环境中密码产品如何利用密码学理论工作的原理,分析密码技术的实现过程和方法。
二、适用专业
信息安全专业、以及与信息安全相关的数学系信息专业、通信专业和计算机专业等。
三、课程设计的基本要求
要求实验者有较强的理论基础和动手编程能力。对于每一个实验都给出了实验目的﹑实验内容﹑预习要求(实验导读)﹑实验提示﹑实验作业。主张学生在做实验前,必须要充分预习,充分准备,要依靠自己在做实验之前要编出程序,经过实验调试改正程序,得出正确的结果。
四、课程设计的内容
密码实验共安排三个代表性的实验。在此基础之上,如果学生有余力可以研究具体的密码分析算法,如差分攻击,代数攻击等。进一步加深对密码算法的理解。
五、时间分配
六、成绩评定
实验单独考核,按预习、操作、纪律、实验报告综合评定成绩,按优、良、中、及格、不及格评定,教学结束后, 实验成绩不超过总成绩的30%。
七、说明
密码实验共安排三个代表性的实验。不论哪类实验,都不希望具体的实验步骤整齐划一和实验报告内容千篇一律。实验者应当尽可能发挥自己的潜能,写出有各自特色的实验报告。比如,要求有对程序的分析,要在描述一些基本功能的基础上,自行给出能够其余可行的思路。除此之外,还应自己探索更深入和优化的方法,探讨相关参数对性能的影响,据此加以总结列举在实验报告上。同时应该侧重写出自己在算法分析、设计思路、实现功能或程序代码等方面的特色,写出设计和实现过程中遭遇到的难点和解决办法,可以不拘泥于实验指导给出的参考性设计思路,尽可能在深度和广度上加以拓展。只有这种各具特色的实验报告,才将更有利于体现实验者在创新思维和动手能力上的差异。
制定者:李昕
审定者:林果园
批准者:周勇
沈阳工程学院课程设计设计题目院系信息学院班级信安本111学生姓名学号指导教师祝世东王素芬职称工程师副教授起止日期20xx年1月6日…
密码学课程设计报告班级:信安10-1班姓名:学号:指导老师:一、Hash算法的实现MD5算法1.1算法概述MD5算法是一种消息摘要…
密码学课程报告《RSA加密解密算法》专业:信息工程(信息安全)班级:1132102学号:****姓名:***时间:20××年1月1…
XX大学密码学课程设计姓名学号学院指导老师完成日期20xx0106一实验任务及要求任务使用IDEA算法实现加解密过程要求1输入至少…
计算机与信息工程学院《密码学课程设计》报告(20××/20学年第二学期)题目:Diffie-Hellman密钥交换协议系别:计算机…
课程设计课程名称密码学题目名称AES的实现与分析学生学院应用数学学院专业班级11信息安全1班学号学生姓名指导教师李锋20xx年12…
西安科技大学《现代密码学》课程设计报告题目:密码学计算器学院:计算机科学与技术学院班级:姓名:学号:日期:20XX.1.8一.课程…
沈阳工程学院课程设计设计题目院系信息学院班级信安本111学生姓名学号指导教师祝世东王素芬职称工程师副教授起止日期20xx年1月6日…
密码学课程设计班级成员姓名指导教师20xx7中国矿业大学计算机学院密码学课程设计目录密码学课程设计11实验一实现一个多表古典加密和…
密码学课程报告《RSA加密解密算法》专业:信息工程(信息安全)班级:1132102学号:****姓名:***时间:20××年1月1…