rar压缩文件加密过程及破解可行性分析v2
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Rar压缩文件加密过程及破解可行性分析
1.rar压缩文件简介
Rar是一种目前广泛使用的文件压缩格式,它能够实现对文件的压缩、加密和分块等功能。
Rar格式的压缩文件以.rar后缀结束,其他常见的文件压缩格式还有zip格式。与ZIP 格式压缩文件相比,同样是无损数据压缩,RAR文件通常压缩比要高,但是压缩速度较慢。因为RAR文件头也要占据一定空间,在数据压缩余地不大时,压缩过的文件可能比原文件要大。RAR的一个主要优点是可以把文件压缩目标分割到多个文件,并且很容易从这样的分割的压缩文件解压出源文件。另外,RAR也支持紧缩格式,把所有文件压缩到同一个数据区以加大压缩比,代价是解压一个单独的文件时必须解压其前面的所有文件。RAR中也可以加入冗余的修复信息,在文件损坏但是修复信息足够完好时可以对压缩包进行修复。
很多工具软件都可以用来产生Rar格式的压缩文件,但目前最常用的是Winrar,软件截图如下图1所示。
图1 Winrar工具截图
目前Rar压缩格式的最新版本是5.30,并且不同版本产生的压缩文件的格式会有所不同。在上图1“压缩文件格式”选项中选择“RAR”表示产生的压缩文件采用Rar 4.0版本压缩文件格式,而“RAR5”表示采用Rar 5.0版本压缩文件格式。考虑到这两种压缩格式目前都在广泛使用,在后面的介绍中我们会对这两种压缩文件的加密过程分别进行介绍,但重点以
Rar5.0压缩格式为主。
2.Rar压缩文件格式
Rar 5.0版本的压缩文件格式如下图2所示。一个压缩文件由许多不同的块(头)组成,浅绿色部分表示可选块,紫色部分是必选块。下面分别对主要块的功能进行简要介绍。
图2 Rar 5.0压缩文件格式
Self-extracting module :可选块,表示压缩文件是否可以自行解压缩。当在使用Winrar 对文件进行压缩时,如果选择了“创建自解压格式压缩文件”选项,生成的压缩文件则是一个可执行文件,不需要专门的压缩工具来进行解压缩操作,执行该文件则会对压缩的文件进行解压缩,还原出被压缩的文件。
RAR 5.0 signature:签名块,该块的作用是区分压缩文件的版本。对于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:加密头,该头保存解密压缩文件所需要信息,包括对用户输入密码的验证、对加密数据解密等方面的信息。下面对该头的各个字段进行具体说明。
Main archive header:主头,包含整个压缩文件的一些基本属性信息,各个字段的含义如下表所示。
File header:文件头,用来具体描述被压缩的文件各方面的信息,每个被压缩的文件对应一个文件头,各字段含义如下表所示。
文件头中的Data area保存的就是压缩的文件数据。如果选择了对文件内容加密,那么Data area中保存的就是经过压缩、加密后的数据,并且文件头中的Extra area区域就会包含一个加密记录块,用来保存该加密文件对应的加密相关元数据信息,加密记录块的结构和
End of archive marker:结尾标记头,该头是压缩文件的结束标记。解压过程中解压工具不会读取和处理结尾标记头后面的任何信。该块的各个字段如下表所示。
上面我们仅仅对压缩文件格式中一些主要的块(头)进行了描述和解释,其他的可选块由于和文件的加密过程无关因此这里不做介绍,如果读者感兴趣可以自行参考RAR 5.0 archive format。
3.Rar压缩文件加密过程
在采用Winrar对文件进行压缩和加密时,根据选择使用RAR“压缩文件格式”的不同以及是否选中“加密文件名”选项(如图3所示),文件的加密过程会有所不同,加密后生成的文件格式也会存在差别。在不考虑ZIP压缩格式和其他与加密过程无关的选项的情况下,使用Winrar对文件进行压缩时一共有4种不同选择:RAR压缩格式,不加密文件名;RAR5压缩格式,不加密文件名;RAR压缩格式,加密文件名;RAR5压缩格式,加密文件名。这里主要以选择“RAR5压缩格式,不加密文件名”情况为例,详细介绍其加密和解密过程,然后对其他不同选择下的加解密过程进行说明。
图3 与winrar加密相关的选项
3.1 RAR5压缩格式,不加密文件名
选择“RAR5压缩格式,不加密文件名”情况下文件的加密过程如下图4所示。如果将Winrar软件看成一个功能黑盒,它接受的输入是用户提供的密码和需要加密的原文件,然后输出加密后的压缩文件。在Winrar软件内部,具体的加密过程按如下步骤进行。
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算法相关介绍。
CRC32
图4 Rar5压缩格式下文件内容的加密过程
3)产生HashKey。在步骤2)中的PBKDF2算法计算结果的基础上,额外增加16次迭代计算,产生32字节长度的HashKey,该密钥用于在后期产生文件内容的校验值。
4)产生PSWcheck。在步骤3)HashKey的基础上,额外增加16次迭代计算,产生32字节长度的PswCheckValue,对PswCheckValue进行类似异或操作1后赋值给8字节长度的PSWcheck,该值随加密文件一起保存,作用是在解密时实现对用户密码的验证。
注1:【PSWcheck[i] = PswCheckValue[i]^ PswCheckV alue[i+8]^……】
5)计算文件校验值。对文件进行CRC计算,得到4字节长度的CRC校验值value。将value 作为HMAC-SHA256函数的“消息”参数,HashKey作为HMAC-SHA256函数的“密钥”参数,产生32字节长度的消息摘要digest,即digest = HMAC-SHA256(HashKey,value)。然后对digest进行类似异或操作2,得到4字节长度的Data CRC32校验值。Data CRC32校验值随加密文件一起保存,既能实现对用户密码的验证,也能实现对文件内容的校验。文件内容校验也可以采用其他校验方式,但默认情况下是CRC32校验。
注2:【for (int I=0;I<32;I++) CRC32^=digest[I] << ((I & 3) * 8)】
6)对文件内容进行压缩。
7)压缩后内容加密。以IV为AES-256初始化向量、Key为加密密钥,对步骤6)中压缩后的文件内容进行AES-256加密,得到加密后的内容。
8)按照1)—7)相同的步骤对所有文件进行压缩和加密,并按照图2所示文件格式进行保存从而得到压缩后的文件。
在经过压缩和加密过程后生成的压缩文件中,需要保存salt、count、IV、PSWcheck和Data CRC32值。其中Data CRC32保存在文件头,salt、count、IV、PSWcheck保存在文件头extra data中的文件加密记录中,在解密阶段需要读取这些域对密码进行验证。
解密过程基本上是文件加密过程的逆过程,对加密压缩文件的解密过程如下。
1)读取加密压缩文件的标记和主头部分,确定RAR版本。
2)读取文件头。读取第一个文件对应的文件头,获取Salt、Count、PSWcheck、IV和Data