RSA加密算法从提出到现在已三十年,经历了各种攻击的考验,逐渐为人们接受,普遍认为是目前最优秀的公钥加密方案之一。那么,我现在就给大家介绍一下RSA加密算法应用现状及其在文件加密中的应用。

一、RSA加密算法介绍与应用现状

1、RSA加密算法算法原理

假设明文分组为M,密文分组为C,RSA加密算法主要参数如下:

p,q为两个素数(保密);令n?Tq;由欧拉定理可得φ(n)=(p—1)(q—1);选取c,使得gcd(φ(n),e)=1,1<e<φ(n):由dc=1modφ(n),计算d;这样,(c,n)作为公钥,(d,n)作为私钥。使用公钥对信息文件加密,使用私钥解密。

加密算法:C=Memodn

解密算法:Cdmod n=(Mem0d nymod n- M_nod n-M)

RSA加密算法的安全性依赖于大数分解,但是否等同于大数分解一直未能得到理论上的证明,因为没有证明破解RSA加密算法就一定需要作大数分解。运算中最费时的运算是模幂乘运算。

目前,RSA加密算法的一些变种算法已被证明等价于大数分解。不管怎样,分解n是最显然的攻击方法,现在,人们已能分解多个十进制位的大素数。因此,模数n必须选大一些,因具体适用情况而定。由于进行的都是大数计算,使得RSA加密算法最快的情况也比DES慢,无论是软件还是硬件实现。速度一直是RSA加密算法的缺陷,所以一般来说只用于少量数据文件加密。

2、RSA加密算法的缺点

1)产生密钥很麻烦,受到素数产生技术的限制,因而难以做到一次一密。

2) RSA加密算法的安全性依赖于大数的因子分解,无法从理论上把握它的保密性能如何伪,并没有从理论上证明破译RSA加密算法的难度与大数分解难度等价。

3)速度太慢,由于RSA加密算法的分组长度太大,为保证安全性,n至少也要600 bits以上,使运算代价很高,尤其是速度较慢,较对称加密算法慢几个数量级:且随着大数分解技术的发展,这个长度还在增加,不利于数据格式的标准化。目前,SET(Secure Electronic Transaction)协议中要求CA采用2048比特长的密钥,其它实体使用1024比特的密钥。

为了速度问题,目前人们广泛使用私、公钥密码结合使用的方法。

优缺点互补:私钥密码加密速度快,人们用它来加密较长的文件,然后用RSA加密算法来给文件密钥加密,极好地解决了私钥密码的密钥分发问题。

3、下面介绍RSA加密算法优势

1)解决大规模网络应用中密钥的分发和管理问题

采用分组密码、序列密码等对称加密体制时,加解密双方所用的密钥都是秘密的,而且需要定期更换,新的密钥总是要通过某种秘密渠道分配给使用方,在传递的过程中,稍有不慎,就容易泄露。

2)实现网络中的数字签名机制

对称密钥技术由于其自身的局限性,无法提供网络中的数字签名。这是因为数字签名是网络中表征人或机构的真实性的重要手段,数字签名的数据需要有惟一性、私有性,而对称密钥技术中的密钥至少需要在交互双方之间共享,因此,不满足惟一性、私有性,无法用做网络中的数字签名。

相比之下,公钥加密技术由于存在一对公钥和私钥,私钥可以表征惟一性和私有性,而且经私钥加密的数据只能用与之对应的公钥来验证,其他人无法仿冒,所以,可以用作网络中的数字签名服务。

二、RSA加密算法在文件加密中的应用

1、文件加密使用RSA加密算法的可行性

通过前面的论述,不难看出RSA当今的应用多在于数字签名和证书等方面。之所以只应用于这些短小数据的加密解密,是因为RSA加密算法加密极慢,速度是DES对称密钥加密速度的千分之一左右,正是因为这样,把RSA应用于普通文件加密的想法一直被忽略,通常文件枝想象成大数据块,但是实际上在日常应用中,有些极其重要的文本资科是并不太大的,比如因担心遗忘而用普通文本记录的银行帐号和密码、不应被陌生人知道的重要电话号码、几千字节大的重要小图片等。

虽然RSA加密运算的速度十分慢,但是在PC性能越来越好的今天,对于几千字节的数据进行一次几百位密钥的RSA加密,所消耗的时间应该是可以接受的。有专家建议,普通公司使用1024位的密钥就可以保证资料的安全性,对于极其重要的信息,可以使用2048位的密钥。对于日常临时性的应用,768位的密钥就可以满足要求m。例如,在一台配置为AMD Atbron2800+,外频333MHZ,物理内存512MB的PC上测试实现的系统,以560bit的n逐字节加密一个IKB大小的文件需要55秒。通常记录如银行帐号密码等重要数据的文本文件大小不足百字节,加密只需要数秒钟。所以对于小型文件,进行较长密钥的RSA加密是完全可行的。

其实从一个简单的角度来说,既然RSA用于数字签名可行,那就完全可以用于同样大小的普通文件,对于较大的文件,如果分成与数字签名同样大小的段(这里假设数字签名较短,不分段一次计算加密完成),分开的各段逐一进行加密运算,那所需要的时间也只是按文件大小线性的增长.通常数字签名为几十字节,加密运算并不需要很长的等待,这就说明对于几百字节或一两K字节大小的文件来说,如果
进行RSA加密,并不会是非常漫长的工作.当然,如果文件更大,加密就显得十分漫长了。比如按前面叙述的45毫秒大数运算程序推理,加密IM字节大小的文件需要约1天的时间。所以,要在普通PC用几百位以上的长密钥RSA加密算法加密文件,文件不能过大,一般可以接受的上限是几KB,如果要在较短时间内加密大文件,需要缩短密钥长度以减小运算,这将带来安全性隐患。

2、文件加密使用RSA加密算法的意义

RSA加密算法表达方式简单、保密性强、没有密钥管理的麻烦,并且具有数字签名、认证和鉴别等功能,特别适合于现代保密通信的需要嗍。如前节所述,小型文件加密可以使用RSA加密算法。比如,因担心遗忘而用普通文本记录的银行帐号和密码、不应被陌生人知道的重要电话号码、几千字节大的重要小图片等。可行的方法未必是必要的,下面我们将讨论何种文件适合用非对称密钥加密,即RSA加密算法加密文件的意义所在。

对于前面叙述的带有重要信息的小型文本和二进制数据的维护,①如果不加密,将无法放心的保存在计算机上,尤其是连同的或机房里的公共计算机,②如果借助功能强大的大型多用户数据保护程序维护几个小型文件,显得十分烦琐,好比杀鸡用牛刀.@如果采用对称密钥加密,即加密解密的密钥相同,只适合部分情况。在某些情况下,使用对称密钥加密文件,交流使用不够方便。比如,张三由于某种原因,需要将自己的某个文件在公共计算机上留给李四,而不希望别人看到内容。如果采用对称密钥加密,张三和李四提前约好一个密码就可以。但是如果张三想要在同一台公共计算机上再留一个秘密文件给王五,而不希望别人看到,就要和王五另外约定一个密码。如果需要在这台公共计算机上留十个文件给不同的人,自己就要记和十个人约定好的密码,这样以来交流起来不够方便,因为对于张三,要自己维护太多的密钥,非对称密钥(公开密钥方式)恰好解决这样的问题。只要大家都在这台计算机或这台计算机可以访问到的地方,留下自己的公开密钥,一切就变的容易解决了。张三要留给李四的文件,就用李四的公开密钥加密,要留给王五的文件,就用王五的公开密钥加密。李四和王五只要把留给自己的文件用自己的私有密钥解密,就可以得到留给自己的文件了,显然,非对称密钥体制更适合多用户交流,而将这种加密方式直接应用于文件加密,使我们在公开场合的交流更加灵活方便。

一种更实际的情况是,我们想通过Internet上的公众论坛或邮件发送重要保密信息给某人。例如发送一个银行帐号和密码给某人.这种情况要保证安全,在当今互联网络上是比较棘手的。①如果用公众论坛直接留言给指定用户,论坛管理员和服务器管理员通常有方法看到数据。②如果发送邮件,虽然传送过程是加密的,但是密码毕竟是由邮件服务器维护,所以系统管理员通常也有办法看到内容.问题的关键在于我们所有的数据包括密钥保存在服务器之上。在这种情况下,我们需要使用公开密钥方式,并自己维护私有密钥。RSA加密算法文件加密可以灵活地解决这些问题。例如,我们可以将任意一个文件用某人的公开密钥加密变换成一段可以复制粘贴的文本,然后粘贴在公众互联网上,对方只需把需要解密的文本复制保存成一个文本文件,在本地机用自己的私有密钥解密即可.我们可以将自己的私有密钥通过DES加密算法加密后保存在自己的移动磁盘上,使用的时候只要将其解密读取即可,用完后立即从当前操作环境清除,这样,我们自己维护自己的私有密钥,利用简单并且公开的方式,可以安全传送任意小型数据,包括一切二进制文件。

小知识之RSA公钥加密算法

RSA公钥加密算法是1977年由Ron Rivest、Adi Shamirh和LenAdleman在(美国麻省理工学院)开发的。RSA取名来自开发他们三者的名字。RSA是目前最有影响力的公钥加密算法,它能够抵抗到目前为止已知的所有密码攻击,已被ISO推荐为公钥数据加密标准。RSA算法基于一个十分简单的数论事实:将两个大素数相乘十分容易,但那时想要对其乘积进行因式分解却极其困难,因此可以将乘积公开作为加密密钥。