ImageVerifierCode 换一换
格式:DOCX , 页数:28 ,大小:673.04KB ,
资源ID:2027322      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-2027322.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(rar压缩文件加密过程及破解可行性分析v2.docx)为本站会员(b****1)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

rar压缩文件加密过程及破解可行性分析v2.docx

1、rar压缩文件加密过程及破解可行性分析v2Rar压缩文件加密过程及破解可行性分析1.rar压缩文件简介Rar是一种目前广泛使用的文件压缩格式,它能够实现对文件的压缩、加密和分块等功能。Rar格式的压缩文件以.rar后缀结束,其他常见的文件压缩格式还有zip格式。与ZIP格式压缩文件相比,同样是无损数据压缩,RAR文件通常压缩比要高,但是压缩速度较慢。因为RAR文件头也要占据一定空间,在数据压缩余地不大时,压缩过的文件可能比原文件要大。RAR的一个主要优点是可以把文件压缩目标分割到多个文件,并且很容易从这样的分割的压缩文件解压出源文件。另外,RAR也支持紧缩格式,把所有文件压缩到同一个数据区以加

2、大压缩比,代价是解压一个单独的文件时必须解压其前面的所有文件。RAR中也可以加入冗余的修复信息,在文件损坏但是修复信息足够完好时可以对压缩包进行修复。很多工具软件都可以用来产生Rar格式的压缩文件,但目前最常用的是Winrar,软件截图如下图1所示。图1 Winrar工具截图目前Rar压缩格式的最新版本是5.30,并且不同版本产生的压缩文件的格式会有所不同。在上图1“压缩文件格式”选项中选择“RAR”表示产生的压缩文件采用Rar 4.0版本压缩文件格式,而“RAR5”表示采用Rar 5.0版本压缩文件格式。考虑到这两种压缩格式目前都在广泛使用,在后面的介绍中我们会对这两种压缩文件的加密过程分别

3、进行介绍,但重点以Rar5.0压缩格式为主。2.Rar压缩文件格式Rar 5.0版本的压缩文件格式如下图2所示。一个压缩文件由许多不同的块(头)组成,浅绿色部分表示可选块,紫色部分是必选块。下面分别对主要块的功能进行简要介绍。图2 Rar 5.0压缩文件格式Self-extracting module :可选块,表示压缩文件是否可以自行解压缩。当在使用Winrar对文件进行压缩时,如果选择了“创建自解压格式压缩文件”选项,生成的压缩文件则是一个可执行文件,不需要专门的压缩工具来进行解压缩操作,执行该文件则会对压缩的文件进行解压缩,还原出被压缩的文件。RAR 5.0 signature :签名块

4、,该块的作用是区分压缩文件的版本。对于RAR 5.0版本,该块共有8个字节,内容为0x52 0x61 0x72 0x21 0x1A 0x07 0x01 0x00。如果是4.0版本,则该块长度是7个字节:0x52 0x61 0x72 0x21 0x1A 0x07 0x00。Archive encryption header :加密头,该头保存解密压缩文件所需要信息,包括对用户输入密码的验证、对加密数据解密等方面的信息。下面对该头的各个字段进行具体说明。字段名称类型介绍Header CRC32uint32整个加密头的CRC校验值Header sizevint整个加密头的长度,以字节为单位Heade

5、r typevint用来区分不同的头部类型,该头类型为4Header flagsvintFlags common for all headers: 0x0001 Extra area is present in the end of header. 0x0002 Data area is present in the end of header. 0x0004 Blocks with unknown type and this flag must be skipped when updating an archive. 0x0008 Data area is continuing from p

6、revious volume. 0x0010 Data area is continuing in next volume. 0x0020 Block depends on preceding file block. 0x0040 Preserve a child block if host block is modified.Encryption versionvint加密算法版本。目前只支持AES-256Encryption flagsvint0x0001 Password check data is present.KDF count1字节PBKDF2函数的迭代次数,和版本有关Salt1

7、6字节PBKDF2函数的盐Check Value12字节用来验证密码的有效性。Main archive header :主头,包含整个压缩文件的一些基本属性信息,各个字段的含义如下表所示。字段名称类型介绍Header CRC32uint32整个加密头的CRC校验值Header sizevint整个加密头的长度,以字节为单位Header typevint用来区分不同的头部类型,该头类型为1Header flagsvint和加密头该字段含义一样Extra area sizevintExtra area大小。当0x0001 header flag设置时该字段存在。Archive flagsvint0

8、x0001 Volume. Archive is a part of multivolume set.0x0002 Volume number field is present. This flag is present in all volumes except first.0x0004 Solid archive.0x0008 Recovery record is present.0x0010 Locked archive.Volume numbervintOptional field, present only if 0x0002 archive flag is setExtra are

9、aOptional area containing additional header fields, present only if 0x0001 header flag is set.File header:文件头,用来具体描述被压缩的文件各方面的信息,每个被压缩的文件对应一个文件头,各字段含义如下表所示。字段名称类型介绍Header CRC32uint32整个加密头的CRC校验值Header sizevint整个加密头的长度,以字节为单位Header typevint用来区分不同的头部类型,该头类型为2Header flagsvint和加密头该字段含义一样Extra area sizev

10、intExtra area大小。当0x0001 header flag设置时该字段存在。Data sizevint数据区域的大小File flagsvint0x0001 Directory file system object (file header only).0x0002 Time field in Unix format is present.0x0004 CRC32 field is present.0x0008 Unpacked size is unknown.Unpacked sizevint解压文件大小Attributesvint操作系统特定的文件属性mtimeuint32Fi

11、le modification time in Unix time format. Optional, present if 0x0002 file flag is set.Data CRC32uint32可选项,文件的CRC校验值。Compression informationvint压缩算法、参数等。Host OSvint0x0000 Windows.0x0001 Unix.Name lengthvint文件名长度Name?字节文件名Extra area可选,用来记录文件相关的额外信息Data area压缩的文件数据文件头中的Data area保存的就是压缩的文件数据。如果选择了对文件内容

12、加密,那么Data area中保存的就是经过压缩、加密后的数据,并且文件头中的Extra area区域就会包含一个加密记录块,用来保存该加密文件对应的加密相关元数据信息,加密记录块的结构和前面介绍的加密头结构类似,其结构如下表所示。字段名称类型介绍Sizevint整个加密记录块的长度,以字节为单位Typevint用来区分Extra area中不同类型的记录块,值为0x01Versionvint加密算法版本。目前只支持AES-256,值为0Flagsvint0x0001 Password check data is present.0x0002 Use tweaked checksums ins

13、tead of plain checksums.该字段值默认为0x0003KDF count1字节PBKDF2函数的迭代次数,和版本有关Salt16字节PBKDF2函数的盐IV16字节AES-256初始化向量Check Value12字节用来验证密码的有效性。End of archive marker:结尾标记头,该头是压缩文件的结束标记。解压过程中解压工具不会读取和处理结尾标记头后面的任何信。该块的各个字段如下表所示。Header CRC32uint32结尾标记头的CRC校验值Header sizevint整个结尾标记头的长度,以字节为单位Header typevint用来区分不同的头部类型

14、,该头类型为5Header flagsvint和加密头该字段含义一样End of archive flagsvint0x0001 压缩文件是卷但不是所有卷中的最后一个上面我们仅仅对压缩文件格式中一些主要的块(头)进行了描述和解释,其他的可选块由于和文件的加密过程无关因此这里不做介绍,如果读者感兴趣可以自行参考RAR 5.0 archive format。3.Rar压缩文件加密过程在采用Winrar对文件进行压缩和加密时,根据选择使用RAR“压缩文件格式”的不同以及是否选中“加密文件名”选项(如图3所示),文件的加密过程会有所不同,加密后生成的文件格式也会存在差别。在不考虑ZIP压缩格式和其他与

15、加密过程无关的选项的情况下,使用Winrar对文件进行压缩时一共有4种不同选择:RAR压缩格式,不加密文件名;RAR5压缩格式,不加密文件名;RAR压缩格式,加密文件名;RAR5压缩格式,加密文件名。这里主要以选择“RAR5压缩格式,不加密文件名”情况为例,详细介绍其加密和解密过程,然后对其他不同选择下的加解密过程进行说明。图3 与winrar加密相关的选项3.1 RAR5压缩格式,不加密文件名选择“RAR5压缩格式,不加密文件名”情况下文件的加密过程如下图4所示。如果将Winrar软件看成一个功能黑盒,它接受的输入是用户提供的密码和需要加密的原文件,然后输出加密后的压缩文件。在Winrar软

16、件内部,具体的加密过程按如下步骤进行。1)初始化操作。随机产生16字节长度的盐salt、16字节长度的初始化向量IV,设置count=32768, KeyLength=256。2)进行PBKDF2运算。以用户输入密码password和步骤1)中的salt、count、KeyLength作为PBKDF2函数的输入参数进行运算,产生32字节的AES加密密钥Key。即Key = PBKDF2(salt, password, count, KeyLength)。请自行查阅PBKDF2算法相关介绍。图4 Rar5压缩格式下文件内容的加密过程3)产生HashKey。在步骤2)中的PBKDF2算法计算结果的

17、基础上,额外增加16次迭代计算,产生32字节长度的HashKey,该密钥用于在后期产生文件内容的校验值。4)产生PSWcheck。在步骤3)HashKey的基础上,额外增加16次迭代计算,产生32字节长度的PswCheckValue,对PswCheckValue进行类似异或操作1后赋值给8字节长度的PSWcheck,该值随加密文件一起保存,作用是在解密时实现对用户密码的验证。注1:【PSWchecki = PswCheckValuei PswCheckValuei+8】5)计算文件校验值。对文件进行CRC计算,得到4字节长度的CRC校验值value。将value作为HMAC-SHA256函数的

18、“消息”参数,HashKey作为HMAC-SHA256函数的“密钥”参数,产生32字节长度的消息摘要digest,即digest = HMAC-SHA256(HashKey,value)。然后对digest进行类似异或操作2,得到4字节长度的Data CRC32校验值。Data CRC32校验值随加密文件一起保存,既能实现对用户密码的验证,也能实现对文件内容的校验。文件内容校验也可以采用其他校验方式,但默认情况下是CRC32校验。注2:【for (int I=0;I32;I+) CRC32=digestI (I & 3) * 8)】6)对文件内容进行压缩。7)压缩后内容加密。以IV为AES-2

19、56初始化向量、Key为加密密钥,对步骤6)中压缩后的文件内容进行AES-256加密,得到加密后的内容。8)按照1)7)相同的步骤对所有文件进行压缩和加密,并按照图2所示文件格式进行保存从而得到压缩后的文件。在经过压缩和加密过程后生成的压缩文件中,需要保存salt、count、IV、PSWcheck和Data CRC32值。其中Data CRC32保存在文件头,salt、count、IV、PSWcheck保存在文件头extra data中的文件加密记录中,在解密阶段需要读取这些域对密码进行验证。解密过程基本上是文件加密过程的逆过程,对加密压缩文件的解密过程如下。1)读取加密压缩文件的标记和主头

20、部分,确定RAR版本。2)读取文件头。读取第一个文件对应的文件头,获取Salt、Count、PSWcheck、IV和Data CRC32值。3)进行PBKDF2计算。以Salt、Count、用户密码password和KeyLength为参数进行PBKDF2计算,得到文件解密密钥Key、PSWcheck和HashKey。该步骤和加密过程中2)、3)、4)步骤相同,详见加密过程。4)用户密码验证。将步骤3)中产生的PSWcheck值和步骤1)中从文件读取的PSWcheck值进行比较,如果相同,则说明验证通过,继续5);不同则表明用户输入密码错误,用户重新输入密码转3),否则结束。5)文件解密。根据

21、初始化向量IV和3)中产生的解密密钥Key,对文件1加密后的内容进行解密,得到压缩后的文件内容。6)文件解压。对5)中得到的文件内容进行解压缩,得到文件1原始内容,即原文件。7)对原文件进行CRC计算,将计算得到的校验值作为HMAC-SHA256的输入消息,HashKey作为密钥,产生消息摘要。然后对消息摘要进行类似异或运算,得到文件的校验值CRC32。详见加密过程步骤5)。8)将7)中计算得到的CRC32值和步骤2)中读取的Data CRC32进行比较,相同则说明用户密码正确并且文件没有损坏,转9);否则说明文件损坏,退出。9)依次对所有文件重复进行2)8),直到所有文件均被解压。以上步骤中

22、对压缩文件中各个域的读取参考第2节中对文件格式的介绍。3.2 RAR5压缩格式,加密文件名图5 压缩文件在不加密文件名下的解压缩操作在压缩过程中,如果不选择“加密文件名”选项,这样产生的压缩文件用户即使不知道压缩文件的密码,也可以查看压缩文件中的包含的文件名称、文件大小、修改时间等信息,如图5所示。显然,有时候我们对文件的保密要求比较高,并不想让非授权用户获得这些信息,因此就需要对这些文件元数据进行加密。由于这些信息保存在压缩文件的主头、文件头等元数据块中,因此要加密文件名等相关信息,就需要对这些部分元数据信息进行加密。事实上,对这些信息的加密是通过在压缩文件格式中实现一个加密头,然后再利用加

23、密头加密这部分元数据信息达到的。前面介绍过加密头是可选的,加密头的作用正在于此,用来实现对文件名等信息的加密。因此,对于“加密文件名”情况下,对文件的加密过程分为两个阶段,第一阶段是利用文件头中的加密记录实现对文件内容的加密,然后利用加密头实现对主头、文件头等元数据块的加密,下图6简要显示了这两阶段加密过程。图6 文件的两阶段加密过程对于利用文件头中的加密记录去加密数据部分,该过程和前面的介绍不加密文件名选择下的过程是一样的,这里不再赘述,这里主要对加密头加密元数据块的过程进行介绍。图7显示了加密头对主头、文件头等元数据块的加密过程。图7 Rar5压缩格式下元数据块加密过程从上图7可以看出,利

24、用加密头对主头、文件头等部分的加密和前面介绍的对数据部分的加密过程类似,但又有相应的简化。首先通过PBKDF2运算得到加密密钥,利用该加密密钥去加密主头、文件头等元数据块,然后将Salt、Count、PSWcheck、IV保存在加密头中用于解压缩时对用户密码进行验证。事实上,IV并不是保存在加密头中,而是保存在元数据块之前,每一个元数据块对应一个IV。这里需要特别指出的是,对元数据块和数据部分加密都用到了PBKDF2算法,需要用户提供用户密码,但它们实际上采用的是同一个密码,因此在采用压缩工具对文件进行压缩过程中,只需要提供一个用户密码即可。并且,默认情况下加密头和加密记录中保存的Salt、C

25、ount值都一样。因此在解压缩时,只在解密元数据块时进行PBKDF2计算对用户密码进行验证,在解密文件数据部分时不需要再进行PBKDF2计算来验证密码,并且直接使用解密元数据块过程中PBKDF2算法产生的密钥来解密文件的文件内容,但要注意的是初始化向量IV发生了改变。3.3 RAR压缩格式,不加密文件名在采用RAR压缩格式,不加密文件名的选择下,文件的压缩加密过程如下图8所示。图8 “RAR压缩格式+不加密文件名”模式下文件的压缩加密过程在对文件进行压缩加密的过程中,首先将Salt和用户密码拼接,然后对拼接后的结果进行262144次循环的SHA-1计算(实际上在262144次年循环中,每次循环

26、包含两个SHA-1计算),产生加密密钥Key和初始化向量IV。最后对压缩后的文件内容进行AES-128加密,得到加密后内容。同时,为了便于解压缩阶段能够对用户密码进行验证,还需要对原文件内容进行CRC计算,并将CRC校验值Data CRC32保存在文件头中。在解压缩阶段,以同样的方式得到加密密钥Key和初始化向量IV后,对加密的文件内容进行AES-128解密操作,然后对解密的文件内容解压缩,还原出原文件内容。最后对原文件内容进行CRC计算,如果计算得到的校验值和文件头中保存的Data CRC32校验值相同,则表明用户提供的密码正确,否则表明用户密码错误或者文件内容损坏。从上面的过程可以看出,R

27、AR压缩格式下加密过程与RAR5压缩格式下加密过程存在较大的差别。1. 前者采用262144次SHA-1计算作为密钥导出函数,而后者采用PBKDF2函数(count=32768)作为密钥导出函数。2. 前者采用AES-128加密算法对文件内容加密,后者采用AES-256加密算法对文件内容加密。3. 前者只有对文件内容进行解密后通过CRC校验值比对才能判断用户密码是否正确或者文件内容损坏,但不能够对二者进行区分,后者能够在早期通过PBKDF2计算产生的PSWcheck值进行比较来判断,在不相同的情况下能够区分出到底是用户密码错误还是文件内容损坏。3.4 RAR压缩格式,加密文件名在压缩过程中选择

28、RAR压缩格式,加密文件名,相比于不加密文件名,只需要在后者的基础上增加对文件头等元数据块的加密操作。对文件头的加密过程和对前面介绍的文件内容的加密过程一样,如图9所示,这里不做过多的介绍。在解压缩阶段,需要首先解密出文件头等元数据块信息,需要进行262144次SHA-1计算产生解密文件头等需要用到的解密密钥Key和初始化向量IV,然后对元数据块的信息进行AES-128解密操作。如果用户密码正确,则可以通过文件头提供的信息进一步对文件内容进行解密,否则无法正确解析文件头等元数据块,并且文件头部的CRC校验无法通过,解压缩失败。图9 “RAR压缩格式+加密文件名”模式下文件的压缩加密过程4.结论

29、本文首先针对winrar压缩软件使用过程中4中不同的压缩选择,即“RAR5压缩格式,不加密文件名”、“RAR5压缩格式,加密文件名”、“RAR压缩格式,不加密文件名”、“RAR压缩格式,加密文件名”,介绍了RAR压缩加密文件的加解密过程。随后分析了不同选择下密码验证过程的复杂性,发现对于普通计算机采用字典方式去破解RAR压缩文件是不可行的,而是否能够利用FPGA去实施字典破解还需要进一步的研究和分析。Rar3文件格式压缩文件包含多个可变长度的块,块的顺序可以改变,但第一个块和第二个块分别是marker块和压缩文件头块。每个块都以如下域开始:HEAD_CRC: 2B,块的CRC校验码HEAD_T

30、YPE: 1B,块类型HEAD_FLAGS: 2B,块标志位HEAD_SIZE: 2B,块大小ADD_SIZE: 4B,可选域,额外的块大小,仅在(HEAD_FLAGS & 0x8000) != 0时才存在。如果ADD_SIZE不存在,块大小就是HEAD_SIZE,否则,块大小时HEAD_SIZE+ADD_SIZE。每个块的HEAD_FLAGS的如下位含义都一样:0x4000:如果设置,则旧版本RAR会忽略该块,并且当压缩文件更新时删除该块。如果不设置,当压缩文件更新时,该块被复制到新的压缩文件。0x8000:如果设置,ADD_SIZE域存在。块类型包含如下:HEAD_TYPE=0x72 ma

31、rker块HEAD_TYPE=0x73 压缩文件头块HEAD_TYPE=0x74 文件头块HEAD_TYPE=0x75 旧版本注释头块HEAD_TYPE=0x76 旧版本认证信息块HEAD_TYPE=0x77 旧版本子块HEAD_TYPE=0x78 旧版本恢复记录块HEAD_TYPE=0x79 旧版本认证信息块HEAD_TYPE=0x7a 子块注释块不会单独存在,而是在其他块中使用。按照如下流程处理压缩文件:1. 读并校验marker块;2. 读压缩文件头3. 读或者跳过HEAD_SIZE-sizeof(MAIN_HEAD)字节4. 如果到了压缩文件尾,就中止处理,否则,读7字节数据到HEAD_CRC,HEAD_TYPE,HEAD_FLAGS,HEAD_SIZE。5. 分析HEAD_TYPE

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2