如何用X-IDEA加密算法來實(shí)現(xiàn)手機(jī)通信中的圖文加密

隨著國內(nèi)3G推廣,手機(jī)應(yīng)用的領(lǐng)域進(jìn)一步擴(kuò)大,即時通信和圖文傳輸?shù)雀臃奖?。傳輸?shù)據(jù)進(jìn)行加密處理以保證通信數(shù)據(jù)的安全性變得尤為重要,特別在于手機(jī)用戶通信的過程中進(jìn)行圖文傳輸,既要考慮傳輸質(zhì)量,更要考慮傳輸安全,因此必須采取必要的加密操作。但受限于手機(jī)設(shè)備的有限性能,其運(yùn)算能力還無法與計算機(jī)相提并論,因此其加密技術(shù)更加值得大家去努力突破。

一、手機(jī)加密解密

1973年IBM公司設(shè)計了DES加密算法,多年來DES加密算法一直作為非常安全的加密算法被用于各種數(shù)據(jù)的保護(hù),但隨著科技的進(jìn)步,DES加密算法也因密鑰長度短(56位)、密碼空間小,現(xiàn)有的計算機(jī)的采用窮舉法進(jìn)行破解來獲取正確密鑰己趨于可行。同樣,傳統(tǒng)64位GSM手機(jī)網(wǎng)絡(luò)加密技術(shù)于2009年被28歲的德國電腦工程師Karsten Noh公開破解,任何人都可以利用破解出來的密碼本破譯截獲的手機(jī)信息。

而IDEA(Intemation Data En cryption Algorithm)數(shù)據(jù)加密算法是由我國的來學(xué)嘉博士和著名的密碼專家James L.Massey子1990年聯(lián)合提出的,該加密算法用硬件和軟件賣現(xiàn)都很容易,而且比DES在實(shí)現(xiàn)上快的多。

IDEA也被認(rèn)為是目前世界上最好最安全的分組加密算法,且對計算功能要求不高,所以可以方便地使用在手機(jī)中。IDEA的密鑰長度是128位,在窮舉攻擊的情況下,IDEA需要經(jīng)過2128次加密才能恢復(fù)出密鑰,假設(shè)芯片每秒能檢測100億個密鑰,需要10年,故其安全性很高。

二、IDEA數(shù)據(jù)加密算法

IDEA數(shù)據(jù)加密算法是對64bit大小的數(shù)據(jù)塊加密的分組加密算法,它是基于“相異代數(shù)群上的混合運(yùn)算”的設(shè)計思想,該加密算法既可用于加密,又可用于解密。

1、子密鑰的生成

IDEA加密算法加密和解密都各自需要52個子密鑰,每一個子密鑰16位,由128位密鑰生成。加密子密鑰的生成過程是:對128位密鑰進(jìn)行分組處理,分成8組,每組16位,從而可以得到8個加密子密鑰,將前面生成的8個加密子密鑰128位循環(huán)左移25位,又做一次16位分組,從而又可以得到8個加密子密鑰,如此循環(huán),將這個過程循環(huán)7次,在第7次的循環(huán)中,只需取前面的4個加密子密鑰,至此便產(chǎn)生了全部的52個加密子密鑰。

解密子密鑰的生成過程是:首先根據(jù)密鑰生成加密子密鑰,然后對加密子密鑰進(jìn)行換位操作,最后對換位操作后的加密子密鑰進(jìn)行部分子密鑰的模216的加密逆運(yùn)算和剩余部分子密鑰的模(216+1)的乘法逆運(yùn)算。

2、加密解密過程

IDEA加密算法中,明文長度為64位。加密過程是:對明文進(jìn)行分組處理,分為4組:X1、X2、X3、X4,每組16位。X1、X2、X3、X4作為第一輪的輸入,在每一輪中,4個輸入分組與6個16位加密子密鑰分別做模216的加法、模(216+1)的乘法和異或操作,得到四個輸出結(jié)果,將其又作為下一輪的輸入。如此循環(huán)進(jìn)行八輪操作。將最后得到的結(jié)果再與4個加密子密鑰作輸出變化,從而得到最后的加密密文。

解密過程是加密過程的逆,在解密的過程中只需把加密子密鑰替換為解密子密鑰就可以實(shí)現(xiàn)對加密的密文文件進(jìn)行解密。

三、X-IDEA加密算法如何給手機(jī)圖文加密和解密

IDEA加密算法中,明文的長度固定且比較短只有64位,而在手機(jī)通信系統(tǒng)上對于通信的消息中相同的部分會被加密成相同的密文,從而暴露了明文的數(shù)據(jù)格式和某些統(tǒng)計學(xué)特性,降低了明文的保密性。根據(jù)即時通信傳輸?shù)南⒌拈L度不一定性和消息存在相同部分可能性比較大的特點(diǎn),因此本系統(tǒng)提出對IDEA加密算法進(jìn)行改進(jìn),即X-IDEA加密算法,使之更適合運(yùn)用于手機(jī)通信系統(tǒng)中圖文文件的加密、解密處理,同時改進(jìn)的加密算法經(jīng)過測算其被窮舉突破在目前的技術(shù)和普通計算機(jī)的計算能力下當(dāng)前基本無法實(shí)現(xiàn),所以該加密算法對于解決手機(jī)圖文通信的安全是有保障的。

1、X-IDEA加密算法設(shè)計

本系統(tǒng)設(shè)計的X-IDEA加密算法,使之更適合運(yùn)用于手機(jī)即時通信系統(tǒng)中圖文文件加密和解密。它主要從明文的長度、加密過程和解密過程三個部分對傳統(tǒng)的IDEA加密算法做了改進(jìn)。X-IDEA加密算法實(shí)現(xiàn)對手機(jī)圖文傳輸中加密和解密的流程如圖1所示。

如何用X-IDEA加密算法來實(shí)現(xiàn)手機(jī)通信中的圖文加密

(1)明文長度

X-IDEA加密算法中,明文的長度不再做限制,明文的分組長度為64位。因?yàn)槊魑牡拈L度不做限制,因此對明文文件加密,需要對明文進(jìn)行重組判斷,如果明文的長度冪 64的整數(shù)倍,將對明文進(jìn)行重組,在明文末尾加上一些特殊字符,使明文的長度達(dá)到64的整數(shù)倍,如果明文的長度是64的整數(shù)倍,則不做重組處理。

(2)文件加密過程

加密前先根據(jù)文件的大小判斷是否對文件進(jìn)行壓縮,然后獲取文件的屬性,并連同從數(shù)碼鎖中產(chǎn)生的密鑰隨機(jī)索引一同保存于文件的頭信息中,然后創(chuàng)建一個臨時文件,并將文件頭所包含的信息寫入其中。接下來判斷文件長度是否為64的倍數(shù),若是則按照分組加密的方法進(jìn)行加密,否則在文件尾部填充隨機(jī)函數(shù)產(chǎn)生的隨機(jī)數(shù)X,使得文件的長度剛好是64的倍數(shù),之后再進(jìn)行分組加密,并把加密結(jié)果寫入臨時文件,刪除原文件后將臨時文件命名為原文件。這樣的輸入輸出機(jī)制保證了文件的屬性和文件名在加密前后的一致性。

(3)文件解密過程

解密時首先從數(shù)據(jù)塊中讀出文件頭信息,根據(jù)頭信息中的密鑰索引取出加密密鑰得到加密子密鑰,再由解密模塊的對應(yīng)關(guān)系求得解密密鑰,然后分塊解密密文,解密后的數(shù)據(jù)中包括原文件數(shù)據(jù)和填充到原文件尾部的隨機(jī)數(shù),根據(jù)文件頭信息中保存的文件實(shí)際長度,恢復(fù)原文件明文。

X-IDEA加密算法推理如下:

加密過程:

如何用X-IDEA加密算法來實(shí)現(xiàn)手機(jī)通信中的圖文加密

從上述方程可以計算出:

如何用X-IDEA加密算法來實(shí)現(xiàn)手機(jī)通信中的圖文加密

因此,明文經(jīng)過加密,再經(jīng)過解密,產(chǎn)生加密前的明文,說明該加密算法正確。

2、 X-IDEA加密解密實(shí)現(xiàn)

(1)加密過程

加密的過程是對重組后的明文進(jìn)行分組處理,每組64位。由隨機(jī)數(shù)產(chǎn)生器隨機(jī)產(chǎn)生數(shù)據(jù)A,作為加密的初始數(shù)據(jù),A為64位,運(yùn)用IDEA數(shù)據(jù)加密算法對數(shù)據(jù)A和除最后一個明文分組之外的所有明文分組進(jìn)行加密,產(chǎn)生密文Co和密文分組D1,D2,D3,...,Dn-1;對密文C0再次進(jìn)行加密操作,產(chǎn)生的密文CO’與明文P1進(jìn)行異或操作C1=C0'+P1產(chǎn)生密文C1,再將密文D1與明文、P2進(jìn)行異或操作產(chǎn)生密文C2,密文D2與與明文P3進(jìn)行異或操作產(chǎn)生密文C3,依次方式進(jìn)行運(yùn)算產(chǎn)生直到所有的密文C=C1C2C3...Cn。最后將密文C0置于密文C頭部形成總的密文C=C0C1C2...Cn,一起發(fā)送給目標(biāo)用戶。具體的加密算法描述如下:

∥加密算法

輸入:待加密的明文P和密鑰Ek

輸出:加密后的密文C

①X←randomXO; //由隨機(jī)數(shù)生成器生成64位數(shù)據(jù)X

②P←reform Data(P); //對明文進(jìn)行重組處理,如果明文不是64的整數(shù)倍,則在明文字節(jié)數(shù)組后面添加特殊字符,直到滿足64的整數(shù)倍,如果是64的整數(shù)倍,則不做任何處理

③Array←group(P); //重組后的明文進(jìn)行分組處理

④Co←encrypt(Ek,X);//對數(shù)據(jù)X使用IDEA數(shù)據(jù)加add(Co,C]加密

⑤add(Co,C);//將C0添加到結(jié)果集C中

⑥Co’←encrypt(Ek,X);

⑦for each Pi inArray

⑧Ci←CO'+Pi;//異或操作

⑨add(Ci,C); //將Ci添加到結(jié)果集C中

⑩if Pi不是最后一個分組

①Co’ ←_encrypt(Ek,Pi);

②_end for

③_retumC; //返回加密后的密文

④加密算法結(jié)束

(2)解密過程

解密的過程是對密文進(jìn)行分組處理,分為C0,C1,C2,C3,…Cn(n+1)個組,每組也是64位。對密文的第一個分組Co使用IDEA數(shù)據(jù)加密算法進(jìn)行加密,產(chǎn)生密文Co’,并將產(chǎn)生的密文CO’與密文C1進(jìn)行異或操作,產(chǎn)生明文P1,對明文P1進(jìn)行加密操作,將產(chǎn)生的密文與密文C2進(jìn)行異或操作,產(chǎn)生明文P2,對明文P2進(jìn)行加密操作,將產(chǎn)生的密文與C3進(jìn)行異或操作,產(chǎn)生明文P3,依次方式進(jìn)行運(yùn)算,直到產(chǎn)生所有的明文P=P1P2P3...Pn。最后對產(chǎn)生的明文進(jìn)行重組操作,去除在明文加密前重組時加入的特殊字符。具體的加密算法描述如下:

//解密算法

輸入:待解密的密文C和密鑰Ek

輸出:解密后的明文P

①Array←group(C);仍時密文進(jìn)行分組處理

②CO’ ←encrypt(Ek, Co);仿寸密文的第一個分組使用IDEA數(shù)據(jù)加密算法進(jìn)行加密處理

③for each Ci inArray

④Pi←CO'+Ci;//異或操作

⑤add(Pi,P); //將Pi添加到結(jié)果集P中

⑥CO’ ←encrypt(Ek, Pi);

⑦end for

⑧P←reform_data(P); //對解密后的明文進(jìn)行重組,去掉添加的特殊字符

⑨retrunP;

⑩加密算法結(jié)束

3、加密解密的具體實(shí)現(xiàn)

根據(jù)X-IDEA加密算法進(jìn)行的加密程序設(shè)計如圖2所示,C:\tljpg是加密源文件,而tt1.jpg是加密后的源文件,通過圖2的加密后可以發(fā)現(xiàn)tt1.jpg(圖3所示)已經(jīng)被加密而無法查看其原內(nèi)容,而使用該加密解密程序進(jìn)行對應(yīng)的解密程序可以還原tt1.jpg到t1.jpg,由此可以看出該算法的加解密過程是可以實(shí)現(xiàn)的;并且在Android基礎(chǔ)上進(jìn)行了驗(yàn)證,完成了手機(jī)通信中的圖文文件加密解密技術(shù)。

如何用X-IDEA加密算法來實(shí)現(xiàn)手機(jī)通信中的圖文加密

如何用X-IDEA加密算法來實(shí)現(xiàn)手機(jī)通信中的圖文加密

小知識之?dāng)?shù)據(jù)塊

數(shù)據(jù)塊是一組按順序連續(xù)排列在一起的幾組記錄,是主存儲器與輸入、輸出設(shè)備或外存儲器之間進(jìn)行傳輸?shù)囊粋€數(shù)據(jù)單位。是數(shù)據(jù)的物理記錄,與數(shù)據(jù)的邏輯記錄(邏輯上有聯(lián)系,在存儲器上占有一組鄰接單元的數(shù)據(jù)單位)之間的對應(yīng)關(guān)系有3種方式:①一個塊即為一個記錄;②一個塊包含若干個邏輯記錄;③一個邏輯記錄占有幾個塊。數(shù)據(jù)塊的大小可以是固定的或是可變的,塊與塊之間有間隙。設(shè)計數(shù)據(jù)塊大小,受到多方面因素的影響,包括輸入、輸出效率,存儲空間代價以及計算機(jī)應(yīng)用特點(diǎn)等。