青岛大学本科生毕业论文(设计)
Research And Development Of
RSA File Encryption
青岛大学本科生毕业论文(设计)
摘 要
分析 RSA 算法的应用现状,论证文件加密应用 RSA 算法的可行性和意义。设计一
套完整实用的 RSA 文件加密解决方案,具体编码实现。对 RSA 算法进行研究,从常规
RSA 算法出发,用 C++实现 RSA 加密算法类库,并在 32 位 windows 平台封装成组件。
在.Net 平台引用此组件,实现可以对任意文件进行 RSA 加密操作的窗体应用程序。经过
加密的文件以及密钥文件都是文本文件。给出关键类类图、整个应用程序的结构描述文
档、关键模块流程图、较详细的接口文档、所有源代码。对应用程序进行测试,对测试
结果进行分析研究,进而对应用程序进行改进,对关键算法进行尽可能的优化,最终得
到一个在 windows 运行的可以用指定密钥对任意文件进行 RSA 加密并可解密的完整应
用程序,和一些相关的可移植组件。
关键词 RSA RSA 算法 文件加密 加密成文本
Abstract
Do research about the application area of RSA encryption and reason that RSA can be
used for file encryption. Design a RSA file-encrypt solution and complete an application on
Microsoft Windows™. Design a C++ class based on normal RSA algorithm. And make a DLL
module based on the class. Then complete a .Net Framework™ window-application using that
DLL. The application can encrypt any file and decrypt them. The file after encryption can be
saved as a text file. And the encryption-keys also can be saved as text.Provide pivotal classes
chart, project description, core algorithm flowchart, all source code, and module interfaces
document. Do application performance test and record the performance data. Analyze the
result then optimize core algorithm and improve the application. Finally, create a practical
application using RSA algorithm that can encrypt and decrypt any file. And several modules in
the project can be reuse by other applications. For
the C++ class can be
cross-compiled for handheld devices, the DLL can be referenced by other win32 applications,
and the .Net class can be easily referenced by web server applications or web services.
instance,
Keywords RSA RSA algorithm file encryption
encrypt to text
1
青岛大学本科生毕业论文(设计)
目 录
前 言........................................................................................................................ 3
第 1 章 RSA 应用现状及应用于文件加密的分析.............................................. 4
1.1 RSA 算法介绍与应用现状.................................................................................................. 4
1.2 RSA 应用于文件加密的分析.............................................................................................. 5
1.2.1 文件加密使用 RSA 的可行性......................................................................................5
1.2.2 文件加密使用 RSA 的意义..........................................................................................6
第 2 章 RSA 文件加密软件的设计与实现...........................................................7
2.1 需求分析与总体设计..........................................................................................................7
2.1.1 功能分析........................................................................................................................7
2.1.2 工程方案选择................................................................................................................8
2.2 各部分的设计与开发........................................................................................................10
2.2.1 实现 RSA 加密算法的 C++核心类库........................................................................10
2.2.2 封装 C++核心类库的 DLL 组件................................................................................19
2.2.3 引用 DLL 的.Net 类与实现文件操作功能的窗体应用程序.................................... 20
第 3 章 软件整体测试与分析改进......................................................................21
3.1 编写测试各项性能需要的精确计时类............................................................................21
3.2 测试数据与分析改进........................................................................................................21
3.2.1 密钥生成测试..............................................................................................................21
3.2.2 数据输入输出测试......................................................................................................24
3.2.3 加密解密测试..............................................................................................................24
3.2.4 性能分析与改进优化..................................................................................................27
3.3 使用中国余数定理............................................................................................................28
第 4 章 可移植模块的简要说明与开发前景..................................................... 30
结束语...................................................................................................................... 31
谢 辞...................................................................................................................... 32
参考文献.................................................................................................................. 33
附 录...................................................................................................................... 34
2
青岛大学本科生毕业论文(设计)
前 言
RSA 公钥加密算法是第一个既能用于数据加密也能用于数字签名的算法。它易于理
解和操作,也十分流行。算法的名字以发明者的姓氏首字母命名:Ron Rivest, Adi Shamir
和 Leonard Adleman。虽然自 1978 年提出以来,RSA 的安全性一直未能得到理论上的证
明,但它经历了各种攻击,至今(2006 年)未被完全攻破。随着越来越多的商业应用和
标准化工作,RSA 已经成为最具代表性的公钥加密技术。VISA、MasterCard、IBM、
Microsoft 等公司协力制定的安全电子交易标准(Secure Electronic Transactions,
SET)就采用了标准 RSA 算法,这使得 RSA 在我们的生活中几乎无处不在。网上交易加密
连接、网上银行身份验证、各种信用卡使用的数字证书、智能移动电话和存储卡的验证
功能芯片等,大多数使用 RSA 技术。
当今公钥加密更广泛应用于互联网身份认证,本课题将公钥加密算法 RSA 应用于小
型文件加密。将任意文件加密成文本的解决方案,使其使用更加灵活。整个工程的分层
设计,给引用移植和后续开发带来便利。
3
青岛大学本科生毕业论文(设计)
第 1 章 RSA 应用现状及应用于文件加密的分析
1.1 RSA 算法介绍与应用现状
RSA 算法可以简单叙述如下:
<密钥生成>
取素数 p,q,令 n=p×q.
取与(p-1)×(q-1)互素的整数 e,
由方程 d×e=1 (mod (p-1)×(q-1))解出 d,
二元组(e,n)作为公开密钥,
二元组(d,n)作为私有密钥.
<加密解密>
b=ae mod n,c=bd mod n.
附录中给出了证明 a=c (mod n).
(具体的 RSA 算法协议见 http://www.di-mgt.com.au/rsa_alg.html ,提及的算法中的字
母与协议文档中的一致,不再另做解释)
RSA 公开密钥加密算法自 20 世纪 70 年代提出以来,已经得到了广泛认可和应用。
发展至今,电子安全领域的各方面已经形成了较为完备的国际规范。RSA 作为最重要的
公开密钥算法,在各领域的应用数不胜数。RSA 在硬件方面,以技术成熟的 IC 应用于
各种消费类电子产品。
RSA 在软件方面的应用,主要集中在 Internet 上。加密连接、数字签名和数字证书
的核心算法广泛使用 RSA。日常应用中,有比较著名的工具包 Open SSL(SSL,Security
Socket Layer,是一个安全传输协议,在 Internet 上进行数据保护和身份确认。Open SSL
是一个开放源代码的实现了 SSL 及相关加密技术的软件包,由加拿大的 Eric Yang 等发
起编写的。相关详细介绍见 http://www.openssl.org/about/ )。Open SSL 应用 RSA 实现签
名和密钥交换,已经在各种操作系统得到非常广泛的应用。另外,家喻户晓的 IE 浏览器,
自然也实现了 SSL 协议,集成了使用 RSA 技术的加密功能,结合 MD5 和 SHA1,主要
用于数字证书和数字签名,对于习惯于使用网上购物和网上银行的用户来说,几乎天天
都在使用 RSA 技术。
RSA 更出现在要求高度安全稳定的企业级商务应用中。在当今的企业级商务应用
中,不得不提及使用最广泛的平台 j2ee。事实上,在 j2se 的标准库中,就为安全和加密
服务提供了两组 API:JCA 和 JCE。 JCA (Java Cryptography Architecture)提供基本的加
密框架,如证书、数字签名、报文摘要和密钥对产生器; JCA 由几个实现了基本的加
密技术功能的类和接口组成,其中最主要的是 java.security 包,此软件包包含的是一组
4
青岛大学本科生毕业论文(设计)
核心的类和接口,Java 中数字签名的方法就集中在此软件包中。JCE(Java Cryptography
Extension) 在 JCA 的基础上作了扩展,JCE 也是由几个软件包组成,其中最主要的是
javax.crypto 包,此软件包提供了 JCE 加密技术操作 API。javax.crypto 中的 Cipher 类用
于具体的加密和解密。在上述软件包的实现中,集成了应用 RSA 算法的各种数据加密规
范(RSA 算法应用规范介绍参见: http://www.rsasecurity.com/rsalabs/node.asp?id=2146 ,
这些 API 内部支持的算法不仅仅只有 RSA,但是 RSA 是数字签名和证书中最常用的),
用户程序可以直接使用 java 标准库中提供的 API 进行数字签名和证书的各种操作。
单机应用程序使用 RSA 加密尚比较少见,例如使用 RSA 加密任意一个文件。
1.2 RSA 应用于文件加密的分析
1.2.1 文件加密使用 RSA 的可行性
通过 1.1 节的论述,不难看出 RSA 当今的应用多在于数字签名和证书等方面。之所
以只应用于这些短小数据的加密解密,是因为 RSA 算法加密极慢,速度是 DES 对称密
钥加密速度的千分之一左右。正是因为这样,把 RSA 应用于普通文件加密的想法一直被
忽略。通常文件被想象成大数据块,但是实际上在日常应用中,有些极其重要的文本资
料是并不太大的,比如因担心遗忘而用普通文本记录的银行帐号和密码、不应被陌生人
知道的重要电话号码、几千字节大的重要小图片等。
虽然 RSA 加密运算的速度十分慢,但是在 PC 性能越来越好的今天,对于几千字节
的数据进行一次几百位密钥的 RSA 加密,所消耗的时间应该是可以接受的。下面结合大
数运算程序的调试,从理论上简单的分析消耗时间。在一台普通配置的 PC 机上对一个
整数进行幂模运算,因为公开密钥的e 通常取的较小,所以指数取一个小整数,比如C353,
模一个 70 字节长的整数(140 位十六进制,大数单元以线性组方式实现,对应到 RSA 算
法中,这相当于约 560bit 的 n),调试一个函数测试,按初等数论中的知识对程序进行算
法优化,最终在一台配置为 AMD Athron2800+,外频 333MHZ,物理内存 512MB 的 PC
上测试需要约 45 毫秒时间。如果按这种速度,逐字节对 1KB 的数据进行同样的运算,
所消耗的时间理论上为 45 毫秒的 1024 倍即约 45 秒。这个时间并不是非常长。
其实从一个简单的角度来说,既然 RSA 用于数字签名可行,那就完全可以用于同样
大小的普通文件。对于较大的文件,如果分成与数字签名同样大小的段(这里假设数字签
名较短,不分段一次计算加密完成),分开的各段逐一进行加密运算,那所需要的时间也
只是按文件大小线性的增长。通常数字签名为几十字节,加密运算并不需要很长的等待,
这就说明对于几百字节或一两 K 字节大小的文件来说,如果进行 RSA 加密,并不会是
非常漫长的工作。当然,如果文件更大,加密就显得十分漫长了。比如按前面叙述的 45
毫秒大数运算程序推理,加密 1M 字节大小的文件需要约 1 天的时间。所以,要在普通
PC 用几百位以上的长密钥 RSA 加密文件,文件不能过大,一般可以接受的上限是几 KB。
5
如果要在较短时间内加密大文件,需要缩短密钥长度以减小运算量,这将带来安全性隐
青岛大学本科生毕业论文(设计)
患。
本文的第 3 章将根据实际调试好的软件,测试给出具体的时间消耗数据。例如,在
一台配置为 AMD Athron2800+,外频 333MHZ,物理内存 512MB 的 PC 上测试实现的软
件,以 560bit 的 n 逐字节加密一个 1KB 大小的文件需要 55 秒。通常记录如银行帐号密
码等重要数据的文本文件大小不足百字节,加密只需要数秒钟。所以对于小型文件,进
行较长密钥的 RSA 加密是完全可行的。
1.2.2 文件加密使用 RSA 的意义
如 1.2.1 节所述,小型文件加密可以使用 RSA。比如,因担心遗忘而用普通文本记
录的银行帐号和密码、不应被陌生人知道的重要电话号码、几千字节大的重要小图片等。
可行的方法未必是必要的,本小节讨论何种文件适合用非对称密钥加密,即 RSA 加密文
件的意义所在。
对于前面叙述的带有重要信息的小型文本和二进制数据的维护,①如果不加密,将
无法放心的保存在计算机上,尤其是连网的或机房里的公共计算机。②如果借助功能强
大的大型多用户数据保护程序维护几个小型文件,显得十分烦琐,好比杀鸡用牛刀。③
如果采用对称密钥加密,即加密解密的密钥相同,只适合部分情况。在某些情况下,使
用对称密钥加密文件,交流使用不够方便。比如,张三由于某种原因,需要将自己的某
个文件在公共计算机上留给李四,而不希望别人看到内容。如果采用对称密钥加密,张
三和李四提前约好一个密码就可以。但是如果张三想要在同一台公共计算机上再留一个
秘密文件给王五,而不希望别人看到,就要和王五另外约定一个密码。如果需要在这台
公共计算机上留十个文件给不同的人,自己就要记和十个人约定好的密码,这样以来交
流起来不够方便,因为对于张三,要自己维护太多的密钥。非对称密钥(公开密钥方式)
恰好解决这样的问题。只要大家都在这台计算机或这台计算机可以访问到的地方,留下
自己的公开密钥,一切就变的容易解决了。张三要留给李四的文件,就用李四的公开密
钥加密,要留给王五的文件,就用王五的公开密钥加密。李四和王五只要把留给自己的
文件用自己的私有密钥解密,就可以得到留给自己的文件了。显然,非对称密钥体制更
适合多用户交流,而将这种加密方式直接应用于文件加密,使我们在公开场合的交流更
加灵活方便。
一种更实际的情况是,我们想通过 Internet 上的公众论坛或邮件发送重要保密信息
给某人。例如发送一个银行帐号和密码给某人。这种情况要保证安全,在当今互联网络
上是比较棘手的。①如果用公众论坛直接留言给指定用户,论坛管理员和服务器管理员
通常有方法看到数据。②如果发送邮件,虽然传送过程是加密的,但是密码毕竟是由邮
件服务器维护,所以系统管理员通常也有办法看到内容。问题的关键在于我们所有的数
据包括密钥保存在服务器之上。在这种情况下,我们需要使用公开密钥方式,并自己维
护私有密钥。RSA 文件加密可以灵活的解决这些问题。例如,我们可以将任意一个文件
6
青岛大学本科生毕业论文(设计)
用某人的公开密钥加密变换成一段可以复制粘贴的文本,然后粘贴在公众互联网上,对
方只需把需要解密的文本复制保存成一个文本文件,在本地机用自己的私有密钥解密即
可。我们可以将自己的私有密钥通过 DES 加密后保存在自己的移动磁盘上,使用的时候
只要将其解密读取即可,用完后立即从当前操作环境清除。这样,我们自己维护自己的
私有密钥,利用简单并且公开的方式,可以安全传送任意小型数据,包括一切二进制文
件。
所以,对于使用小型文件进行数据交换的情况,更好的方案是通过一个小型应用程
序对这些文件进行非对称密钥加密。为了适合前面叙述的在公共 BBS 与特定的某人交流
重要保密信息的情况,加密生成的数据应该是文本,这样可以方便复制粘贴。
综上所述,使用前面叙述的方式加密文件有两点重要意义:①应用非对称密钥加密
任意文件,使非对称密钥的应用不仅仅局限于互联网络。②非对称加密后的数据变换成
文本,使得我们可以通过几乎任何方式安全传递任意文件,比如在只有 http 的环境使用
xml 方式。
第 2 章 RSA 文件加密软件的设计与实现
2.1 需求分析与总体设计
2.1.1 功能分析
经过 1.2.2 节的论述,我们可以将对软件的要求总结如下:
① 可以按要求的位数生成非对称密钥。
② 可以保存密钥和装载密钥,密钥保存为纯文本。
③ 可以用指定密钥以 RSA 算法加密任意一个文件,加密生成的数据为纯文本。
④ 可以装载加密过的文件,并用指定的密钥解密还原出原文件。
⑤ 提示信息完整、操作舒适、图形界面雅观
按上述描述,给出 Use Case 和 Statechart 如图 2-1。
7