公开密钥加密

随着Internet用户的激增,世界正步入网络经济的新时代。如网上购物、网上银行、网上证券等。然而,有一些人利用利用他们所掌握的技术非法侵入他人的计算机系统,窃取、篡改、破坏一些重要的数据,给社会造成巨大的损失。密码技术的发展与应用,对解决信息交换的安全问题,保障数据信息的安全,起着不可忽视的作用。

所谓密码技术,就是针对信息进行重新编码,从而达到隐藏信息的内容,使非法用户无法获取信息真实内容的一种手段。目前在网络中,一般采用两种密码体制:对称密钥体制和非对称密钥体制。对称密钥体制中的加密密钥和解秘密钥是相同的,所以又称密秘密钥密码体制。对称密钥算法运算效率高、使用方便、加密效率高,在处理大量数据时被广泛使用,但其关键是要保证密钥的安全,为安全起见,密钥要定期改变,所以,对称密钥就存在一个如何安全管理密钥的问题。与对称密钥体制相对应的非对称密钥体制又称为公开密钥密码体制,它是在1976 年由Diffe 和Hellman 发表的《密码学的新方向》一文中提出的,从此打破了长期使用单密钥体制的束缚。自此提出公约密码思想以后,涌现出很多的公约密钥算法体系,经过20多年的实践检验,公约系统的应用技术日趋完善,应用领域日趋广泛。公开密钥密码体制,加密密钥和解秘密钥是分开采用一对不同的密钥进行的,分别存在一个公钥和私钥,公钥公开,私钥保密,并且知道其中一个时并不能从中推出另一个。其典型的算法有背包密码、RSA等。  其中RSA公约算法系统因为其可靠安全性,易于实现性,更是受大家的认可和欢迎。

RSA加密算法的最大优点就是不需要对密钥通信进行保密,所需传输的只有公开密钥,这样就省去了一条开销很大的密钥传输信道。其保密性强,密钥管理方便,并且具有数字签名、认证和签别等多种功能,特别适合于现代保密通信的需要。大多数使用公钥密码进行加密和数字签名的产品和标准使用的都是RSA算法。RSA的安全性是基于大数因子分解的困难性。目前一般认为RSA需要1024位以上的字长才有安全保障。由于RSA所采用的模幂运算耗时太多,因此它通常只能用于加密少量数据或者加密密钥。需要注意的是,RSA的安全性只是一种计算安全性,绝对不是无条件的安全性,这是由它的理论基础决定的。所以,在实现RSA算法的过程中,每一步都应该尽量从安全性方面考虑。本文就RSA算法以及如何用Matlab语言实现给于了详细的分析。

1  数据加密概述

   密码学是一门古老而深奥的学科,它对一般人来说是陌生的,因为长期以来,它只在很少的范围内,如军事、外交、情报等部门使用。计算机密码学是研究计算机信息加密、解密及其变换的科学,是数学和计算机的交叉学科,也是一门新兴的学科。随着计算机网络和计算机通讯技术的发展,计算机密码学得到前所未有的重视并迅速普及和发展起来。在国外,它已成为计算机安全主要的研究方向,也是计算机安全课程教学中的主要内容。

  密码是实现秘密通讯的主要手段,是隐蔽语言、文字、图象的特种符号。凡是用特种符号按照通讯双方约定的方法把电文的原形隐蔽起来,不为第三者所识别的通讯方式称为密码通讯。在计算机通讯中,采用密码技术将信息隐蔽起来,再将隐蔽后的信息传输出去,使信息在传输过程中即使被窃取或载获,窃取者也不能了解信息的内容,从而保证信息传输的安全。

任何一个加密系统至少包括下面四个组成部分:

(1)未加密的报文,也称明文。

(2)加密后的报文,也称密文。

(3)加密解密设备或算法。

(4)加密解密的密钥。

发送方用加密密钥,通过加密设备或算法,将信息加密后发送出去。接收方在收到密文后,用解密密钥将密文解密,恢复为明文。如果传输中有人窃取,他只能得到无法理解的密文,从而对信息起到保密作用。

 

1.1 基本概念

数据加密技术就是指将一个信息或明文经过加密钥匙及加密函数转换,变成无意义的密文,而接收方则将此密文经过解密函数.解密钥匙还原成明文。加密技术是网络安全技术的基石。

明文,即加密前的真实的数据或信息,它是可以被外界所识别,它指代的含义比较广泛,比如用户A要将一份文件发送给用户B,那么我们就将用户A手里所拿的那份文件称之为明文。

密文,就是对信息经过一定的处理,使它变成无意义的乱码,非指定用户无法对它进行识别,例如A使用密钥K加密消息并将其发送给B,B收到加密的消息后,使用密钥K对其解密以恢复原始消息,那么在这一过程当中A在途中发送给B的东西我们就叫它密文,因为这个文件除B外,其他人得到它也没有任何意义,这就保证了信息传送的保密性。

完成加密和解密的算法成为为密码体制。人们一方面要把自己的信号隐蔽起来,另一方面则想把别人的隐蔽信息挖掘出来,于是就产生了密码分析的逆科学——密码分析。密码分析研究的问题是如何把密文转换成明文。把密文转换成明文的过程称为破译。破译也是进行函数变换,变换过程中使用的参数也叫密钥。

   一般地,如果求解一个问题需要一定量的计算,但环境所能提供的实际资源却无法实现,则这种问题是计算上不可能的。如果一个密码体制的破译是计算上不可能的。则称该密码体制是计算上安全的。密码体制必须满足三个基本要求:

(1)对所有的密钥、加密和解密都必须迅速有效;

(2)体制必须容易使用;

(3)体制的安全性必须只依赖于密钥的保密性。密码体制要实现的功能可分为保密性和真实性两种。

保密性要求密码分析员无法从截获的密文中求出明文。一般情况下一个密码体制的保密性包括两项要求:

(1)即使截获了一段密文C,甚至知道了与它对应的明文M,密码分析要从系统中求出解密变换,仍然是计算上不可行的。

(2)密码分析员要由截获的密文C中系统的求出明文M是计算上不可能的。

数据的真实性要求密码分析员无法用虚假的密文代替真是密文而不被察觉,它也包括两个要求:

(1)对于给定的C,即使密码分析员知道了对应于它的明文M,要系统的求出加密变换仍然是计算上不可能的。

(2)密码分析员要系统地找到密文,使其是明文空间上有意义的明文,这在计算上是不可能的。

1.2 数据加密分类

专用密钥:又称为对称密钥或单密钥,加密和解密时使用同一个密钥,即同一个算法。如DES和MIT的Kerberos算法。单密钥是最简单方式,通信双方必须交换彼此密钥,当需给对方发信息时,用自己的加密密钥进行加密,而在接收方收到数据后,用对方所给的密钥进行解密。当一个文本要加密传送时,该文本用密钥加密构成密文,密文在信道上传送,收到密文后用同一个密钥将密文解出来,形成普通文体供阅读。在对称密钥中,密钥的管理极为重要,一旦密钥丢失,密文将无密可保。这种方式在与多方通信时因为需要保存很多密钥而变得很复杂,而且密钥本身的安全就是一个问题。

公开密钥:又称非对称密钥,加密和解密时使用不同的密钥,即不同的算法,虽然两者之间存在一定的关系,但不可能轻易地从一个推导出另一个。有一把公用的加密密钥,有多把解密密钥,如RSA算法。

非对称密钥由于两个密钥(加密密钥和解密密钥)各不相同,因而可以将一个密钥公开,而将另一个密钥保密,同样可以起到加密的作用。

在这种编码过程中,一个密码用来加密消息,而另一个密码用来解密消息。在两个密钥中有一种关系,通常是数学关系。公钥和私钥都是一组十分长的、数字上相关的素数(是另一个大数字的因数)。有一个密钥不足以翻译出消息,因为用一个密钥加密的消息只能用另一个密钥才能解密。每个用户可以得到唯一的一对密钥,一个是公开的,另一个是保密的。公共密钥保存在公共区域,可在用户中传递,甚至可印在报纸上面。而私钥必须存放在安全保密的地方。任何人都可以有你的公钥,但是只有你一个人能有你的私钥。它的工作过程是:“你要我听你的吗?除非你用我的公钥加密该消息,我就可以听你的,因为我知道没有别人在偷听。只有我的私钥(其他人没有)才能解密该消息,所以我知道没有人能读到这个消息。我不必担心大家都有我的公钥,因为它不能用来解密该消息。”

公钥加密体制具有以下优点:

(1) 密钥分配简单。

(2) 密钥的保存量少。

(3) 可以满足互不相识的人之间进行私人谈话时的保密性要求。

(4) 可以完成数字签名和数字鉴别。

   RSA算法的理论基础是数论中的欧拉函数,他的安全性基于大数分解的困难性,在理论上要计算两个大素数的乘积是容易的,但反过来要把一个大数分解成两个素数因子相乘的形式是很困难的,正是由于这个原因保证了此算法的安全性。

RSA的安全性依赖于大数分解。公钥和私钥都是两个大素数 ( 大于 100个十进制位)的函数。据猜测,从一个密钥和密文推断出明文的难度等同于分解两个大素数的积。
  密钥对的产生:选择两个大素数,p 和q 。计算:n = p * q 。然后随机选择加密密钥e,要求 e 和 ( p - 1 ) * ( q - 1 ) 互质。最后,利用Euclid 算法计算解密密钥d, 满足 e * d = 1 ( mod ( p - 1 ) * ( q - 1 ) ) 其中n和d也要互质。数e和 n是公钥,d是私钥。两个素数p和q不再需要,应该丢弃,不要让任何人知道。 加密信息 m(二进制表示)时,首先把m分成等长数据块 m1 ,m2,..., mi ,块长s,其中 2^s <= n, s 尽可能的大。对应的密文是:ci = mi^e ( mod n ) ( a ) 解密时作如下计算: mi = ci^d ( mod n ) ( b )

算法流程

(1). 产生密钥

任意选取两个不同的大质数p和q,计算乘积n=p*q; 
    ② 任意选取一个大整数e,e与(p-1)*(q-1)互素,整数e用做加密密钥。注意:e的选取是很容易的,例如,所有大于p和q的素数都可用。 
    ③ 确定解密密钥d:  d * e = 1 mod(p - 1)*(q - 1) 

    根据e、p和q可以容易地计算出d。 
    ④ 公开整数n和e,但是不公开d; 

clc

clear

disp('产生密钥对:')

p=input('输入第一个大素数:p=');                                        

q=input('输入第二个大素数:q=');

n=p*q

fain=(p-1)*(q-1)

e=floor(unifrnd(0,fain,1,1))                  

while(gcd(e,fain)~=1)|(e<2);

 e=floor(unifrnd(0,fain,1,1))

end

%模n求逆函数

n1=fain;n2=e;b1=0;b2=1;

for i=1:1000

        q1=floor(n1/n2);

        r=n1-q1*n2;

       if r~=0

           n1=n2;

           n2=r;

           t=b2;

           b2=b1-q1*b2;

           b1=t;

       else

         break

       end

end

if n2~=1

  warning('所求的模逆不存在') ;

end

if n2==1

  d=mod(b2,fain)

  fid=input('输入待加密的明文:','s');

f=abs(fid);

for i=1:length(f)  

a=f(i);b=e;c=1;

for j=1:1000

if b==0

        dashuchenmi=c;

end

if mod(b,2)~=0

         b=b-1;

         c=mod(c*a,n);

else

       b=b/2;

       a=mod(a*a,n);

end

end

  dashuchenmi=c;

  miwen(i)=setstr(dashuchenmi);

end

for i=1:length(f)

a2=miwen(i);b2=d;c2=1;

for j=1:1000

if b2==0

  dashuchenmi2=c2;

end

if mod(b2,2)~=0

       b2=b2-1;

       c2=mod(c2*a2,n);

else

       b2=b2/2;

       a2=mod(a2*a2,n);

end

end

       dashuchenmi2=c2;

       mingwen(i)=setstr(dashuchenmi2);

end

end

disp('对所输入的明文进行加密后的密文:')

miwen

disp('经过解密后恢复出的明文:')

mingwen

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

fpga和matlab

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值