《密码学原理》课程设计报告_第1页
《密码学原理》课程设计报告_第2页
《密码学原理》课程设计报告_第3页
《密码学原理》课程设计报告_第4页
《密码学原理》课程设计报告_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

23/23大学《密码学原理》课程设计报告题目:word解密算法分析学院:信息工程学院班级:信息安全班姓名:班级序号:01号学号:指导教师:时间:2014.12.30—2015.1.9目录一、背景介绍 31、背景及意义 32、研究现状 32.1Office漏洞及破解 32.2RSA算法介绍 53、课程设计研究内容 6二、预备知识 71、加密与解密的基本技术 7三、OFFICE文档格式及Word加密机制分析 101、OFFICE文档格式分析 102、Word加密机制分析 11四、word解密算法(JAVA实现) 13一、背景介绍1、背景及意义文档的安全是每个用户都非常关心的话题,尤其是在公共办公场所,如何更加有效地保护文档更是一个刻不容缓的问题。Word提供了多种方法限制访问用户文档,通过加密被编辑文档的内容,使未经授权者无法查看和更改,给用户的数据提供了必要的安全保障。但在信息化的今天,随着密码应用范围的扩大,遗忘密码的情况也在与日俱增,一旦忘记密码,用户将无法打开或访问该文档,给用户造成很大的损失。在忘记密码之后如何破解这些密码,尽可能地减少损失就成为用户所关心的一个话题。Word文档破解研究有着非常重要而现实的意义。对于国家安全部门而言,将破解研究成果与执法工作相结合,可以极大地丰富安全部门的网络执法手段,提高安全部门的执法效率,降低执法成本;对于公司个人而言,Word文档破解可以在遗失密码时解开文档,恢复重要信息,避免造成各项损失。2、研究现状2.1Office漏洞及破解随着MicrosoftOffice系列文档在桌面系统中的广泛应用,其相关应用软件的安全问题也引起了国内外信息安全界和攻击者的广泛关注,从最初的宏病毒到现在的利用文档格式解析的漏洞,各种攻击层出不穷。Office系列中的Excel,Word,Powerpoint软件都采用基于OLE2的复合文档结构,这种结构可以包含多种格式的数据。同时,它也导致了Office文档面临的安全威胁主要集中在以下三个方面:基于宏病毒的攻击,文档被非法拷贝或者正常交流时,涉密信息和隐藏信息泄漏的威胁,以及基于应用程序漏洞的攻击。微软的Word文档自带有密码保护措施,用户可以用它来防止其他人对文档进行编辑。网上流行的破解Office系列文档密码的软件,如AccentOfficePasswordRecovery、AdvancedOfficePasswordRecovery等,均采用穷举法对所有可能的口令字进行测试,这种传统的破解方法对于短口令有效,但对于长而复杂的口令,因其搜索的密钥空间大,破解很费时,很难在有效的时间内恢复口令。而当前Word97(包括Word97)以后的各个版本为了保持向下兼容性,默认情况下都使用Office97/2000兼容的加密算法。但是这种默认的加密算法在实现时存在一些缺陷,加密强度在最好的情况下也仅相当于40位密钥的加密强度。因此,寻找一种绕开猜测用户口令字的传统破解模式,分析和研究Word文档加密算法细节,利用加密机制中存在的缺陷设计一种与加密口令长度无关的破解方案是非常有意义的。2.2RSA算法介绍2.2.1RSA算法简介公钥密码算法最主要的特点是加密和解密使用不同的密钥,且加密密钥能公开,而仅需保守解密密钥的机密的密码算法。在这种加密算法中,从公开的加密密钥无法推导出保密的解密密钥,也无法从加密密钥和密文恢复出相应的明文。最有影响力的算法是RSA,它能抵抗到目前为止己知的所有密码攻击。RSA算法是第一个既能用于数据加密也能用于数字签名的算法,算法的名字以发明者的名字命名。RSA算法的安全性依赖于大数分解问题的难解性#算法中使用的公钥和私钥都是两个大素数(大于100个十进制位)的函数。据猜测,从一个密钥和密文推断出明文的难度等同于分解两个大素数的积2.2.2RSA算法原理

假设我们需要将信息从机器A传到机器B,首先由机器B随机确定一个Key,我们称之为密匙private_key,将这个可KEY始终保存在机器B中而不发出来;然后,由这个private_key计算出另一个Key,我们称之为公匙Public_key。这个Public_key的特性是几乎不可能通过该Key计算生成它的private_key。接下来通过网络把这个Public_key传给机器A,机器A受到Public_key后,利用该key,将信息加密,并把加密后的信息通过网络发送到机器B,最后机器B利用已知的private_key,就可以解开加密信息。2.2.3步骤

RSA算法的安全性依赖于大数因数分解的困难性。公匙和私匙都是两个大素数的函数。

(1)首先选择两个大素数p、q,计算n=p*q;

m=(p-1)*(q-1);

(2)而后随机选择加密密匙Public_key,要求和m互质,比如Public_key=m-1;

(3)利用欧几里德算法计算解密密匙private_key,使private_key满足:Public_key*private_key三1(mod

m)

其中Public_key,n是公匙,private_key是密匙。3、课程设计研究内容本文主要围绕Word加密文档的破解方案展开研究,实现了Word加密文档的快速破解。首先利用Word加密机制中存在的缺陷,实现了一种与加密口令长度无关的常量时间破解方案,并通过深入分析RSA的原理和实现机制,将RSA算法和Word文档破解有机结合。二、预备知识本章对文中涉及的密码学知识进行了描述,首先概述了密码技术,介绍了加密解密技术及破解密码的常用方法。1、加密与解密的基本技术密码学是研究信息系统安全和保密的科学,它包含密码编码学以及密码分析学。密码编码学是对信息进行编码以实现信息隐蔽,保证其安全性;而密码分析学研究分析破译密码,它包括密码攻击、发现漏洞和系统安全性证明。两者相互对立,而又互相促进地向前发展。加密就是把数据和信息(称为明文)转换为不可辨认形式(称为密文)的过程,使不应了解数据和信息的人不能够知道和识别。已知密文的内容,再将其转变为明文,这就是解密过程。加密和解密过程组成为加密系统。任何一种加密系统无论形式多复杂,都可以描述为一个5元组(P,C,K,Ek,Dk),其中:(1)P:需要采用某种方法来掩盖其要传送的信息或字符串,即明文;(2)C:经加密过程将明文变成的信息或字符串,即密文;(3)K:代表密钥空间,由所有可能的密钥组成的有限集;(4)Ek:采用某种方法将明文变为另一种不能被非授权者所理解的信息或字符串的过程,即加密变换;(5)Dk:将密文还原为明文的过程,即解密变换;加密是在不安全的信息渠道中实现信息安全传输的重要方法。例如,发送方向接收方发送一条信息,发送方需要用加密密钥把信息加密后发送给接收方;接收方收到密文后,用解密密钥把密文恢复为明文。如果信息传输过程中有第三者试图窃密,他只能得到一些密文信息,无法理解其意义,如图2.1所示。窃听窃听/监听密文明文加密密文加密明文密文明文加密密文加密明文不安全媒介不安全媒介图2.1信息加密系统示意图破解密码的方法很多,常见的可以分为3类。(1)密钥的穷举搜索这是破译密码最简单也是最常用的方法,尝试所有可能的密钥组合。但用这种方法进行破译所用的时间非常长。(2)密码分析密码分析是指在密钥未知的情况下,利用数学方法破译密文或找到密钥的方法。密码分析有两个基本目标:利用密文发现明文和利用密文发现密钥。常见的密码分析方法有:①已知明文的破译方法:密码分析者不仅知道一些密文,还知道这些密文相对应的明文,目的是发现加密的密钥。②选定明文的破译方法:密码分析者设法让对手加密一段分析者选定的明文,并获得加密后的结果,目的是确定加密的密钥。③差别比较分析法:这种方法是选定明文的破译法的一种,密码分析者设法让对手加密一组相似却差别细微的明文,然后比较它们加密后的结果,从而获得加密的密钥。不同的加密算法,对以上这些攻击方法的抵抗力是不同的。(3)其他密码破译方法除了对密钥的穷举搜索和进行密码分析外,在实际生活中,对手更可能针对人机系统的弱点进行攻击,而不是攻击加密算法本身,以达到其目的。例如可以欺骗用户,套出密钥;在用户输入密钥时,应用各种技术手段,“窥视”或“偷窃”密钥内容;利用加密系统实现中的缺陷或漏洞;对用户使用的加密系统偷梁换柱;从用户工作生活环境的其他来源获得未加密的保密信息,比如进行“垃圾分析”等等。三、OFFICE文档格式及Word加密机制分析微软的Office系列软件是目前使用最广泛的文字处理软件,Office的文档结构采用了基于OLE2的复合文档结构(MicrosoftWord97的二进制格式及其更高版本的基础结构都是.doc文件,即复合文档,格式相当复杂。复合文档不仅可以包含文本,而且可以包含图形、电子表格数据、声音、视频图像以及其它信息。本章首先分析了复合文档的基本格式,在此基础上分析了Word文档的加密机制及其存在的攻击漏洞,随后介绍了两种破解Word文档的攻击方案,并对这两种攻击方案进行了比较。1、OFFICE文档格式分析Office系列软件所产生的文档是MicrosoftCompoundDocument(微软复合文档)的一种,其文档格式与微软复合文档的文档格式一致。微软复合文档是一种结构化的储存文件,这种文件由微软的OLEStructuredStorageAPI来创建和管理。Office文件是一种典型的复合文档,基于对象连接和嵌入(ObjectLinkingandEmbedding简称OLE)存储格式,也即“文件里包含文件”,跟操作系统的存储格式类似。OLE文档无缝地集成了各种类型的数据或组件,实现了一个文件,是一个文件系统的概念。Office文档的格式非常复杂,其中可以包含多种不同格式的元数据,如图象,音频,视频,甚至Excel表格,PPT演示文档等其他复合文档。通过对OpenOffice,WvWare,AbiWord等开源软件的代码进行解析和测试,本文得出一些关于复合文档的格式信息。并对Word文档格式作出了一定程度的解析。2、Word加密机制分析Office系列软件所产生的文档均采用基于OLE2的微软复合文档结构,它由若干个stream和storage组成。Word文档包含Datastream,1Tablestream,WordDocumentstream,SummaryInformationstream,DocumentSummaryInformationstream等。其中Datastream中是图片数据,WordDocu-mentstream中是文本数据,SummaryInformationstream和DocumentSummaryInformationstream中是摘要信息,等等。当Word文档被加密时,文档中只有1Table,WordDocument等带有文本、图片等数据的stream被加密。1Tablestream中存放验证口令是否正确的信息,它由3个16字节的域组成,其中第一个域中存放的是一个新鲜数Salt,用户输入的口令在hash计算过程中加入Salt值生成40位数,该40位数为决定RC4初始化向量的值,通过该40位数可以生成RC4加/解密的密钥,计算过程如图1所示。第二个域中存放的是系统随机产生的一个128位的新鲜数B被RC4加密后的结果。扩展新鲜数B为一个64字节的字节串,然后对所得的64位字节串计算MD5hash,计算出来的hash值被RC4加密后存放在第三个域中。测试用户输入的口令正确与否,主要依据1Table第二个域和第三个域中存放的数据。用户输入口令打开一个被加密的Word文档时,口令加上第一个域中的Salt值经过hash计算等生成RC4加/解密的密钥流。Word程序读取1Table中第二个域和第三个域的值,经RC4解密得到值b和c。如果c为b的MD5Hash值,那么口令正确,否则口令错误。过程如图2所示。四、word解密算法(JAVA实现)Word解密代码:packageedu.wx.test;importjava.io.FileInputStream;importjava.io.FileNotFoundException;importjava.io.FileOutputStream;importjava.io.IOException;importjava.io.ObjectInputStream;importjava.io.ObjectOutputStream;importjava.security.Key;importjava.security.KeyPair;importjava.security.KeyPairGenerator;importjava.security.NoSuchAlgorithmException;importerfaces.RSAPrivateKey;importerfaces.RSAPublicKey;importjavax.crypto.Cipher;importjavax.crypto.NoSuchPaddingException;publicclassRSATool{ publicstaticvoidmakekeyfile(Stringpubkeyfile,Stringprivatekeyfile) throwsNoSuchAlgorithmException,FileNotFoundException,IOException{ //KeyPairGenerator类用于生成公钥和私钥对,基于RSA算法生成对象 KeyPairGeneratorkeyPairGen=KeyPairGenerator.getInstance("RSA"); //初始化密钥对生成器,密钥大小为1024位 keyPairGen.initialize(1024); //生成一个密钥对,保存在keyPair中 KeyPairkeyPair=keyPairGen.generateKeyPair(); //得到私钥 RSAPrivateKeyprivateKey=(RSAPrivateKey)keyPair.getPrivate(); //得到公钥 RSAPublicKeypublicKey=(RSAPublicKey)keyPair.getPublic(); //生成私钥 ObjectOutputStreamoos=newObjectOutputStream(newFileOutputStream( privatekeyfile)); oos.writeObject(privateKey); oos.flush(); oos.close(); oos=newObjectOutputStream(newFileOutputStream(pubkeyfile)); oos.writeObject(publicKey); oos.flush(); oos.close(); System.out.println("makefileok!"); } /** * *@paramk *@paramdata *@paramencrypt *1加密0解密 *@return *@throwsNoSuchPaddingException *@throwsException */ publicstaticbyte[]handleData(Keyk,byte[]data,intencrypt) throwsException{ if(k!=null){ Ciphercipher=Cipher.getInstance("RSA"); if(encrypt==1){ cipher.init(Cipher.ENCRYPT_MODE,k); byte[]resultBytes=cipher.doFinal(data); returnresultBytes; }elseif(encrypt==0){ cipher.init(Cipher.DECRYPT_MODE,k); byte[]resultBytes=cipher.doFinal(data); returnresultBytes; }else{ System.out.println("参数必须为:1加密0解密"); } } returnnull; } /** *公钥加密 * *@paramdata *@parampublicKey *@return *@throwsException */ publicstaticStringencryptByPublicKey(Stringdata,RSAPublicKeypublicKey) throwsException{ Ciphercipher=Cipher.getInstance("RSA"); cipher.init(Cipher.ENCRYPT_MODE,publicKey); //模长 intkey_len=publicKey.getModulus().bitLength()/8; //加密数据长度<=模长-11 String[]datas=splitString(data,key_len-11); Stringmi=""; //如果明文长度大于模长-11则要分组加密 for(Strings:datas){ mi+=bcd2Str(cipher.doFinal(s.getBytes())); } returnmi; } /** *私钥解密 * *@paramdata *@paramprivateKey *@return *@throwsException */ publicstaticStringdecryptByPrivateKey(Stringdata,RSAPrivateKeyprivateKey) throwsException{ Ciphercipher=Cipher.getInstance("RSA"); cipher.init(Cipher.DECRYPT_MODE,privateKey); //模长 intkey_len=privateKey.getModulus().bitLength()/8; byte[]bytes=data.getBytes(); byte[]bcd=ASCII_To_BCD(bytes,bytes.length); //System.err.println(bcd.length); //如果密文长度大于模长则要分组解密 Stringming=""; byte[][]arrays=splitArray(bcd,key_len); for(byte[]arr:arrays){ ming+=newString(cipher.doFinal(arr)); } returnming; } /** *ASCII码转BCD码 * */ publicstaticbyte[]ASCII_To_BCD(byte[]ascii,intasc_len){ byte[]bcd=newbyte[asc_len/2]; intj=0; for(inti=0;i<(asc_len+1)/2;i++){ bcd[i]=asc_to_bcd(ascii[j++]); bcd[i]=(byte)(((j>=asc_len)?0x00:asc_to_bcd(ascii[j++]))+(bcd[i]<<4)); } returnbcd; } publicstaticbyteasc_to_bcd(byteasc){ bytebcd; if((asc>='0')&&(asc<='9')) bcd=(byte)(asc-'0'); elseif((asc>='A')&&(asc<='F')) bcd=(byte)(asc-'A'+10); elseif((asc>='a')&&(asc<='f')) bcd=(byte)(asc-'a'+10); else bcd=(byte)(asc-48); returnbcd; } /** *BCD转字符串 */ publicstaticStringbcd2Str(byte[]bytes){ chartemp[]=newchar[bytes.length*2],val; for(inti=0;i<bytes.length;i++){ val=(char)(((bytes[i]&0xf0)>>4)&0x0f); temp[i*2]=(char)(val>9?val+'A'-10:val+'0'); val=(char)(bytes[i]&0x0f); temp[i*2+1]=(char)(val>9?val+'A'-10:val+'0'); } returnnewString(temp); } /** *拆分字符串 */ publicstaticString[]splitString(Stringstring,intlen){ intx=string.length()/len; inty=string.length()%len; intz=0; if(y!=0){ z=1; } String[]strings=newString[x+z]; Stringstr=""; for(inti=0;i<x+z;i++){ if(i==x+z-1&&y!=0){ str=string.substring(i*len,i*len+y); }else{ str=string.substring(i*len,i*len+len); } strings[i]=str; } returnstrings; } /** *拆分数组 */ publicstaticbyte[][]splitArray(byte[]data,intlen){ intx=data.length/len; inty=data.length%len; intz=0; if(y!=0){ z=1; } byte[][]arrays=newbyte[x+z][]; byte[]arr; for(inti=0;i<x+z;i++){ arr=newbyte[len]; if(i==x+z-1&&y!=0){ System.arraycopy(data,i*len,arr,0,y); }else{ System.arraycopy(data,i*len,arr,0,len); } arrays[i]=arr; } returnarrays; } publicstaticvoidmain(String[]args)throwsException{ Stringpubfile="d:/temp/pub.key"; Stringprifile="d

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论