RSA加密算法学年论文.docx
《RSA加密算法学年论文.docx》由会员分享,可在线阅读,更多相关《RSA加密算法学年论文.docx(12页珍藏版)》请在冰豆网上搜索。
RSA加密算法学年论文
1 引言
1.1 性质
网络安全概论是网络工程专业的主要专业基础课。
网络安全在信息安全中越来越重要,了解和掌握网络安全知识对于网络工程专业的学生来说至关重要。
本课程使学生掌握网络安全的基本概念、基本原理、网络安全实现方法和实现技术,具有初步分析和配置安全网络的能力,训练分析和解决实际问题能力,为其今后在相关领域开展工作打下坚实的基础。
1.2 教学目的
本科程通过具体设计数字签名算法,应使学生加深对加密和数字签名的工作原理和实现方法的理解,系统科学地受到分析问题和解决问题的训练,提高运用理论知识解决实际问题的能力。
为学生从事科学研究和独立负担计算机及其应用方面的工作打好扎实的基础。
1.3 任务和要求
此系统模拟RSA数字签名算法,主要实现对字符串和文件的加密和签名。
模拟RSA算法主要分四个模块:
RSA算法的参数选择;用MD5算法得到给定电子文档的信息摘要;将信息摘要变换为大整数形式,并在其上使用RSA数字签名体制进行签名,得到电子文档的数字签名;根据给定的电子文档及其数字签名,判断电子文档的完整性和真实性。
1.4 意义
通过本模拟系统的设计,可以加深学生对数字签名算法原理的理解,明白数字签名的过程和算法具体实现,提高学生的动手能力。
1.5 论文结构安排
第2章为系统分析与设计,写出系统要求,分析出包含哪些功能模块、每个模块的计划采用的实现方法和原理。
第3章为系统实现,写出主要模块的实现,包括全局变量说明和主要功能的实现流程。
第4章为结束语,总结课程设计的体会。
2 系统分析与设计
2.1 RSA算法的参数选择
RSA的安全性依赖于大数分解。
公钥和私钥都是两个大素数(大于100个十进制位)的函数。
据猜测,从一个密钥和密文推断出明文的难度等同于分解两个大素数的积。
密钥对的产生。
选择两个大素数,p和q。
计算:
n=p*q
然后随机选择加密密钥e(最常用的e值有3,17和65537,采用3个中的任何一个都不存在安全问题),要求e和(p-1)*(q-1)互质。
最后,利用Euclid算法计算解密密钥d,满足:
e*d=1(mod(p-1)*(q-1))
其中n和d也要互质。
公钥KU=(e,n),私钥KR=(d,n)。
两个素数p和q不再需要,应该丢弃,不要让任何人知道。
加密信息m(二进制表示)时,首先把m分成等长数据块m1,m2,...,mi,块长s,其中2^s<=n,s尽可能的大。
对应的密文是:
ci=mi^e(modn)(a)
解密时作如下计算:
mi=ci^d(modn)(b)
.NET提供常用的加密算法类,支持RSA的类是RSACryptoServiceProvider(命名空间:
System.Security.Cryptography),但只支持公钥加密,私钥解密。
RSACryptoServiceProvider类包括:
Modulus、Exponent、P、Q、DP、DQ、InverseQ、D等8个属性,其中Modulus和Exponent就是公钥,Modulus和D就是私钥,RSACryptoServiceProvider类提供导出公钥的方法,也提供导出私钥的方法,但导出的私钥包含上面8个属性,显然要用RSACryptoServiceProvider实现私钥加密公钥是不可行的。
从RSA的原理来看,公钥加密私钥解密和私钥加密公钥解密应该是等价的,在某些情况下,比如共享软件加密,我们需要用私钥加密注册码或注册文件,发给用户,用户用公钥解密注册码或注册文件进行合法性验证。
2.2 得到信息摘要
用MD5算法等到给定电子文档的信息摘要。
MD5即Message-DigestAlgorithm5(信息-摘要算法5),用于确保信息传输完整一致。
是计算机广泛使用的杂凑算法之一(又译摘要算法、哈希算法),主流编程语言普遍已有MD5实现。
MD5算法将数据(如汉字)运算为另一固定长度值,是杂凑算法的基础原理,MD5的前身有MD2、MD3和MD4。
MD5的作用是让大容量信息在用数字签名软件签署私人密钥前被"压缩"成一种保密的格式(就是把一个任意长度的字节串变换成一定长的十六进制数字串)。
本设计利用.Net自带的MD5算法,获得电子文档的信息摘要,以备下一步使用。
2.3 进行数字签名
将信息摘要变换为大整数形式,并在其上使用RSA数字签名体制进行签名,得到电子文档的数字签名。
首先,将得到的信息摘要变换为大整数形式。
具体为对摘要的每一位进行转换。
然后,用加密函数进行加密。
2.4 完整性验证
根据给定的电子文档及其数字签名,判断电子文档的完整性和真实性。
首先,对电子文档进行解密,得到其摘要值,与给定的摘要值进行比较,若一致则文档完整,否则文档被破坏。
3 系统实现
3.1 全局变量
系统代码中定义了一些全局变量:
stringmystring;//需加密的字符串
ArrayListmyArray=newArrayList();//生成的素数数组
ArrayListarrayMD5=newArrayList();//存放信息摘要的数字信息
ArrayListarrayCoded=newArrayList();//存放密文
intindex_1,index_2;
intp,q;//两个素数
intE,D,N;//公钥为E,私钥为D
publicstringfileMD5="";//打开文件的MD5算法产生的序列
publicstringpath="";//打开文件的路径
3.2 RSA算法的参数选择
根据RSA算法原理,设计参数选择函数,实现参数p,q,e,d的选择,最终得到公钥和私钥。
该函数中用到了函数privateintf(intm,intn)来判断两个整数是否互质。
具体函数设计如下:
privatevoidvarSelect()//参数选择
{
intnumber=0;
inti=0;
myArray.Add
(2);
for(number=3;number<=47;number+=2)
{
for(i=2;i{
if(number%i==0)break;
}
if(i==number)
{
myArray.Add(number);
}
}
do{
Randomrandom=newRandom();
index_1=random.Next(myArray.Count);
index_2=random.Next(myArray.Count);
}while(Math.Abs((int)myArray[index_1]-(int)myArray[index_2])<40);
p=(int)myArray[index_1];
q=(int)myArray[index_2];//生成两个素数
N=p*q;
Randomr=newRandom();
do
{
E=r.Next(2,(p-1)*(q-1));
}while(E==1||E>10||f(E,(p-1)*(q-1))!
=1);//生成公钥
do
{
D=r.Next(100);
}while((E*D)%((p-1)*(q-1))!
=1);//生成私钥
}
3.3 MD5摘要和大整数转化
该功能由一个函数实现,该函数引用了.Net中的MD5类,用来求得字符串的信息摘要。
求得信息摘要后,对每一位进行转化,得到大整数。
具体的函数如下:
publicvoidGetMd5Str(stringmyString)//MD5算法实现摘要和大整数转化
{
RichTextBox_bigInt.Text="";
MD5md5=newMD5CryptoServiceProvider();
byte[]fromData=System.Text.Encoding.Unicode.GetBytes(myString);
byte[]toData=md5.ComputeHash(fromData);
stringbyteStr=null;
for(inti=0;i{
byteStr+=toData[i].ToString("x");
}
RichTextBox_MD5.Text=byteStr;
stringw;
intn=0;
for(inti=0;i{
w=byteStr.Substring(i,1);
n=Convert.ToInt32(w,16);
arrayMD5.Add(n);
RichTextBox_bigInt.Text+=n.ToString();
RichTextBox_bigInt.Text+=",";
}
}
3.4 加密函数和解密函数
根据RSA算法原理,
对应的密文:
ci=mi^e(modn)(a)
解密时作如下计算:
mi=ci^d(modn)(b)
设计加密函数和解密函数。
由于两个函数大体过程类似,在此只列出加密函数的代码:
privatevoidencode()//加密函数
{
intm,n;
for(inti=0;i{
m=(int)arrayMD5[i];
n=1;
for(intj=0;j{
n=n*m;
n=n%N;
}
arrayCoded.Add(n);
RichTextBox_codedData.Text+=n.ToString();
RichTextBox_codedData.Text+=",";
}
}
3.5 验证文档的完整性
本部分主要由两个函数构成,函数publicvoidMD5_1(stringmyString)求得解密后电子文档的MD5值,函数privatevoidcompare()比较解密后的MD5值与给定的MD5值是否一致,从而判定文档是否被修改过。
两个函数具体实现如下:
publicvoidMD5_1(stringmyString)//验证阶段MD5
{
MD5md5=newMD5CryptoServiceProvider();
byte[]fromData=System.Text.Encoding.Unicode.GetBytes(myString);
byte[]toData=md5.ComputeHash(fromData);
stringbyteStr=null;
for(inti=0;i{
byteStr+=toData[i].ToString("x");
}
RichTextBox_crmMD5.Text=byteStr;
}
privatevoidcompare()
{
if(RichTextBox_MD5.Text==RichTextBox_crmMD5.Text)
textBox1.Text="信息完整性良好。
";
else
textBox1.Text="信息已被破坏!
";
}
3.6 RSA算法模拟程序演示
由于加密字符串为同组其他同学所做,在此不再演示,只选取加密文件部分进行演示。
首先,单击“生成密钥”按钮,生成密钥。
然后,单击“加密文件”按钮,出现选择文件对话框,选择一个文件进行加密。
如图3-1所示:
图3-1 加密文件之选择文件
选择文件后,显示出文件的信息摘要、转化为的大整数及对应的密文。
如图3-2所示:
图3-2 文件加密结果
单击“文件的解密并进行验证”按钮,对文件进行解密验证。
若文件未被修改过,显示“信息完整性良好”;若文件被修改过,显示“信息已被破坏!
”。
如图3-3及3-4所示:
图3-3 文件未被修改过
图3-4 文件已被破坏
4 结束语
通过本次课程设计,对RSA数字签名算法的原理和实现方法有了更加清楚的了解,对于书本上概念、方法的说明也有了深层次的体会。
在做设计的过程中,也遇到了不少问题,通过对这些问题的解决,巩固了自己的理论知识,同时也增强了自己分析解决问题的能力。
参考文献
[1] 刘建伟.毛剑.胡荣磊.网络安全概论.北京:
电子工业出版社,2009.7第一次印刷
[2] KCS#1RSACryptographyStandard:
-2-rsa-cryptography-standard.pdf
[3] TheMD5Message-DigestAlgorithm:
http:
//www.ietf.org/rfc/rfc1321.txt.