随着国内3G推广,手机应用的领域进一步扩大,即时通信和图文传输等更加方便。传输数据进行加密处理以保证通信数据的安全性变得尤为重要,特别在于手机用户通信的过程中进行图文传输,既要考虑传输质量,更要考虑传输安全,因此必须采取必要的加密操作。但受限于手机设备的有限性能,其运算能力还无法与计算机相提并论,因此其加密技术更加值得大家去努力突破。
一、手机加密解密
1973年IBM公司设计了DES加密算法,多年来DES加密算法一直作为非常安全的加密算法被用于各种数据的保护,但随着科技的进步,DES加密算法也因密钥长度短(56位)、密码空间小,现有的计算机的采用穷举法进行破解来获取正确密钥己趋于可行。同样,传统64位GSM手机网络加密技术于2009年被28岁的德国电脑工程师Karsten Noh公开破解,任何人都可以利用破解出来的密码本破译截获的手机信息。
而IDEA(Intemation Data En cryption Algorithm)数据加密算法是由我国的来学嘉博士和著名的密码专家James L.Massey子1990年联合提出的,该加密算法用硬件和软件卖现都很容易,而且比DES在实现上快的多。
IDEA也被认为是目前世界上最好最安全的分组加密算法,且对计算功能要求不高,所以可以方便地使用在手机中。IDEA的密钥长度是128位,在穷举攻击的情况下,IDEA需要经过2128次加密才能恢复出密钥,假设芯片每秒能检测100亿个密钥,需要10年,故其安全性很高。
二、IDEA数据加密算法
IDEA数据加密算法是对64bit大小的数据块加密的分组加密算法,它是基于“相异代数群上的混合运算”的设计思想,该加密算法既可用于加密,又可用于解密。
1、子密钥的生成
IDEA加密算法加密和解密都各自需要52个子密钥,每一个子密钥16位,由128位密钥生成。加密子密钥的生成过程是:对128位密钥进行分组处理,分成8组,每组16位,从而可以得到8个加密子密钥,将前面生成的8个加密子密钥128位循环左移25位,又做一次16位分组,从而又可以得到8个加密子密钥,如此循环,将这个过程循环7次,在第7次的循环中,只需取前面的4个加密子密钥,至此便产生了全部的52个加密子密钥。
解密子密钥的生成过程是:首先根据密钥生成加密子密钥,然后对加密子密钥进行换位操作,最后对换位操作后的加密子密钥进行部分子密钥的模216的加密逆运算和剩余部分子密钥的模(216+1)的乘法逆运算。
2、加密解密过程
IDEA加密算法中,明文长度为64位。加密过程是:对明文进行分组处理,分为4组:X1、X2、X3、X4,每组16位。X1、X2、X3、X4作为第一轮的输入,在每一轮中,4个输入分组与6个16位加密子密钥分别做模216的加法、模(216+1)的乘法和异或操作,得到四个输出结果,将其又作为下一轮的输入。如此循环进行八轮操作。将最后得到的结果再与4个加密子密钥作输出变化,从而得到最后的加密密文。
解密过程是加密过程的逆,在解密的过程中只需把加密子密钥替换为解密子密钥就可以实现对加密的密文文件进行解密。
三、X-IDEA加密算法如何给手机图文加密和解密
IDEA加密算法中,明文的长度固定且比较短只有64位,而在手机通信系统上对于通信的消息中相同的部分会被加密成相同的密文,从而暴露了明文的数据格式和某些统计学特性,降低了明文的保密性。根据即时通信传输的消息的长度不一定性和消息存在相同部分可能性比较大的特点,因此本系统提出对IDEA加密算法进行改进,即X-IDEA加密算法,使之更适合运用于手机通信系统中图文文件的加密、解密处理,同时改进的加密算法经过测算其被穷举突破在目前的技术和普通计算机的计算能力下当前基本无法实现,所以该加密算法对于解决手机图文通信的安全是有保障的。
1、X-IDEA加密算法设计
本系统设计的X-IDEA加密算法,使之更适合运用于手机即时通信系统中图文文件加密和解密。它主要从明文的长度、加密过程和解密过程三个部分对传统的IDEA加密算法做了改进。X-IDEA加密算法实现对手机图文传输中加密和解密的流程如图1所示。
(1)明文长度
X-IDEA加密算法中,明文的长度不再做限制,明文的分组长度为64位。因为明文的长度不做限制,因此对明文文件加密,需要对明文进行重组判断,如果明文的长度幂 64的整数倍,将对明文进行重组,在明文末尾加上一些特殊字符,使明文的长度达到64的整数倍,如果明文的长度是64的整数倍,则不做重组处理。
(2)文件加密过程
加密前先根据文件的大小判断是否对文件进行压缩,然后获取文件的属性,并连同从数码锁中产生的密钥随机索引一同保存于文件的头信息中,然后创建一个临时文件,并将文件头所包含的信息写入其中。接下来判断文件长度是否为64的倍数,若是则按照分组加密的方法进行加密,否则在文件尾部填充随机函数产生的随机数X,使得文件的长度刚好是64的倍数,之后再进行分组加密,并把加密结果写入临时文件,删除原文件后将临时文件命名为原文件。这样的输入输出机制保证了文件的属性和文件名在加密前后的一致性。
(3)文件解密过程
解密时首先从数据块中读出文件头信息,根据头信息中的密钥索引取出加密密钥得到加密子密钥,再由解密模块的对应关系求得解密密钥,然后分块解密密文,解密后的数据中包括原文件数据和填充到原文件尾部的随机数,根据文件头信息中保存的文件实际长度,恢复原文件明文。
X-IDEA加密算法推理如下:
加密过程:
从上述方程可以计算出:
因此,明文经过加密,再经过解密,产生加密前的明文,说明该加密算法正确。
2、 X-IDEA加密解密实现
(1)加密过程
加密的过程是对重组后的明文进行分组处理,每组64位。由随机数产生器随机产生数据A,作为加密的初始数据,A为64位,运用IDEA数据加密算法对数据A和除最后一个明文分组之外的所有明文分组进行加密,产生密文Co和密文分组D1,D2,D3,...,Dn-1;对密文C0再次进行加密操作,产生的密文CO’与明文P1进行异或操作C1=C0'+P1产生密文C1,再将密文D1与明文、P2进行异或操作产生密文C2,密文D2与与明文P3进行异或操作产生密文C3,依次方式进行运算产生直到所有的密文C=C1C2C3...Cn。最后将密文C0置于密文C头部形成总的密文C=C0C1C2...Cn,一起发送给目标用户。具体的加密算法描述如下:
∥加密算法
输入:待加密的明文P和密钥Ek
输出:加密后的密文C
①X←randomXO; //由随机数生成器生成64位数据X
②P←reform Data(P); //对明文进行重组处理,如果明文不是64的整数倍,则在明文字节数组后面添加特殊字符,直到满足64的整数倍,如果是64的整数倍,则不做任何处理
③Array←group(P); //重组后的明文进行分组处理
④Co←encrypt(Ek,X);//对数据X使用IDEA数据加add(Co,C]加密
⑤add(Co,C);//将C0添加到结果集C中
⑥Co’←encrypt(Ek,X);
⑦for each Pi inArray
⑧Ci←CO'+Pi;//异或操作
⑨add(Ci,C); //将Ci添加到结果集C中
⑩if Pi不是最后一个分组
①Co’ ←_encrypt(Ek,Pi);
②_end for
③_retumC; //返回加密后的密文
④加密算法结束
(2)解密过程
解密的过程是对密文进行分组处理,分为C0,C1,C2,C3,…Cn(n+1)个组,每组也是64位。对密文的第一个分组Co使用IDEA数据加密算法进行加密,产生密文Co’,并将产生的密文CO’与密文C1进行异或操作,产生明文P1,对明文P1进行加密操作,将产生的密文与密文C2进行异或操作,产生明文P2,对明文P2进行加密操作,将产生的密文与C3进行异或操作,产生明文P3,依次方式进行运算,直到产生所有的明文P=P1P2P3...Pn。最后对产生的明文进行重组操作,去除在明文加密前重组时加入的特殊字符。具体的加密算法描述如下:
//解密算法
输入:待解密的密文C和密钥Ek
输出:解密后的明文P
①Array←group(C);仍时密文进行分组处理
②CO’ ←encrypt(Ek, Co);仿寸密文的第一个分组使用IDEA数据加密算法进行加密处理
③for each Ci inArray
④Pi←CO'+Ci;//异或操作
⑤add(Pi,P); //将Pi添加到结果集P中
⑥CO’ ←encrypt(Ek, Pi);
⑦end for
⑧P←reform_data(P); //对解密后的明文进行重组,去掉添加的特殊字符
⑨retrunP;
⑩加密算法结束
3、加密解密的具体实现
根据X-IDEA加密算法进行的加密程序设计如图2所示,C:\tljpg是加密源文件,而tt1.jpg是加密后的源文件,通过图2的加密后可以发现tt1.jpg(图3所示)已经被加密而无法查看其原内容,而使用该加密解密程序进行对应的解密程序可以还原tt1.jpg到t1.jpg,由此可以看出该算法的加解密过程是可以实现的;并且在Android基础上进行了验证,完成了手机通信中的图文文件加密解密技术。
小知识之数据块
数据块是一组按顺序连续排列在一起的几组记录,是主存储器与输入、输出设备或外存储器之间进行传输的一个数据单位。是数据的物理记录,与数据的逻辑记录(逻辑上有联系,在存储器上占有一组邻接单元的数据单位)之间的对应关系有3种方式:①一个块即为一个记录;②一个块包含若干个逻辑记录;③一个逻辑记录占有几个块。数据块的大小可以是固定的或是可变的,块与块之间有间隙。设计数据块大小,受到多方面因素的影响,包括输入、输出效率,存储空间代价以及计算机应用特点等。