焦紅平,陳小惠,姬雷
(南京郵電大,南京 210003)
在信息時(shí)代,我們經(jīng)常需要一種措施來保護(hù)我們的數(shù)據(jù),防止被一些懷有不良用心的人所看到或者破壞。在嵌入式系統(tǒng)中,我們也同樣需要對(duì)一些機(jī)密數(shù)據(jù)進(jìn)行加密,以防止數(shù)據(jù)在通信過程中被竊取。而嵌入式系統(tǒng)的處理速度相對(duì)與PC慢得多,因此,在客觀上就需要一種簡便而快捷的安全措施來保護(hù)機(jī)密數(shù)據(jù)不被竊取。本文實(shí)現(xiàn)了一種高效而簡便的混沌加密算法,能對(duì)嵌入式中的數(shù)據(jù)進(jìn)行有效加密。
所謂數(shù)據(jù)加密(Data Encryption)技術(shù)是指將一個(gè)信息(或稱明文,plain text)經(jīng)過加密鑰匙(Encryption key)及加密函數(shù)轉(zhuǎn)換,變成無意義的密文(cipher text),而接收方則將此密文經(jīng)過解密函數(shù) 解密鑰匙(Decryption key)還原成明文。加密技術(shù)是網(wǎng)絡(luò)安全技術(shù)的基石。
加密算法主要分為對(duì)稱和非對(duì)稱算法。對(duì)稱算法采用相同的密鑰進(jìn)行加密和解密。常用的對(duì)稱加密算法有AES、IDEA、RC2/RC4、Skpjack、DES等,其最大的困難是密鑰分發(fā)問題,必須當(dāng)面或在公共傳送系統(tǒng)(電話系統(tǒng)、郵政服務(wù))中無人偷聽偷看的情況下交換密鑰。非對(duì)稱算法,采用公鑰進(jìn)行加密而利用私鑰進(jìn)行解密。
公鑰是可以公開的,任何人都可以獲得,發(fā)信人用公鑰將數(shù)據(jù)加密后再傳給收信人,收信人用自己的私鑰解密。但非對(duì)稱加密的加密速度慢,對(duì)于大量數(shù)據(jù)的加密傳輸是不適合的。非對(duì)稱加密算法包括RSA、DH、EC、DSS等。
1972年12月29日,美國麻省理工學(xué)院教授、混沌學(xué)開創(chuàng)人之一E.N.洛倫茲發(fā)表了著名的論文《蝴蝶效應(yīng)》,開啟了混沌理論的大門。時(shí)至今日,伴隨計(jì)算機(jī)等技術(shù)的飛速進(jìn)步,混沌學(xué)已發(fā)展成為一門影響深遠(yuǎn)、發(fā)展迅速的前沿科學(xué)?;煦鐏碜杂诜蔷€性動(dòng)力系統(tǒng),而動(dòng)力系統(tǒng)又描述的是任意隨時(shí)間發(fā)展變化的過程,并且這樣的系統(tǒng)產(chǎn)生于生活的各個(gè)方面。
舉個(gè)例子,生態(tài)學(xué)家對(duì)某物種的長期性態(tài)感興趣,給定一些觀察到的或?qū)嶒?yàn)得到的變量(如捕食者個(gè)數(shù)、氣候的惡劣性、食物的可獲性等等),建立數(shù)學(xué)模型來描述群體的增減。如果用Pn表示n代后該物種極限數(shù)目的百分比,則著名的“Logistic映射”:
Pn+1=kP(1-Pn)(其中k是依賴于生態(tài)條件的常數(shù),“n+1”是腳標(biāo))
可以用于在給定Po,k條件下,預(yù)報(bào)群體數(shù)的長期性態(tài)。如果將常數(shù)k處理成可變的參數(shù)k,則當(dāng)k值增大到一定值后,“Logistic映射”所構(gòu)成的動(dòng)力系統(tǒng)就進(jìn)入混沌狀態(tài)。
在一般情況下,Pn+1=kP(1-Pn)可以換成適當(dāng)?shù)姆蔷€性函數(shù),以改進(jìn)混沌的值域、遍歷行、偽隨機(jī)性等。
混沌方法具有初值敏感,參數(shù)可控性和偽隨機(jī)性,這些特性正好吻合數(shù)據(jù)加密的兩條原則:擴(kuò)散和混亂,故混沌算法很適合用來進(jìn)行數(shù)據(jù)加密。
BMP是bitmap的縮寫形式,bitmap顧名思義,就是位圖也即Windows位圖。它一般由4部分組成:文件頭信息塊、圖像描述信息塊、顏色表(在真彩色模式無顏色表)和圖像數(shù)據(jù)區(qū)組成。
0002-0005:文件大小。
0006-0009:保留,每字節(jié)以“00”填寫。
000A-000D:記錄圖像數(shù)據(jù)區(qū)的起始位置。各字節(jié)的信息依次含義為:文件頭信息塊大小,圖像描述信息塊的大小,圖像顏色表的大小,保留(為01)。
000E-0011:圖像描述信息塊的大小,常為28H。
0012-0015:圖像寬度。0016-0019:圖像高度。
001A-001B:圖像的plane總數(shù)(恒為1)。
001C-001D:記錄像素的位數(shù),很重要的數(shù)值,圖像的顏色數(shù)由該值決定。
001E-0021:數(shù)據(jù)壓縮方式(數(shù)值位0:不壓縮;1:8位壓縮;2:4位壓縮)。
0022-0025:圖像區(qū)數(shù)據(jù)的大小。
0026-0029:水平每米有多少像素。002A-002D:垂直每米有多少像素。
002E-0031:此圖像所用的顏色數(shù),如值為0,表示所有顏色一樣重要。
本文采用了一種有效而簡便的加密算法對(duì)文件進(jìn)行加密。加密算法如圖1所示。
圖1 加密算法框圖
該算法將前面的密文和后面的明文一起進(jìn)行加密,通過對(duì)密文進(jìn)行非線性運(yùn)算,而達(dá)到混沌的效果。當(dāng)然,對(duì)于文件的開始,需要設(shè)置初始密文,即加密密碼。該算法的核心是選取合適的非線性函數(shù),使得算法復(fù)雜度小,且加密效果高效。下面以二次方函數(shù)為例,對(duì)lena圖進(jìn)行數(shù)字加密:
所采用非線性函數(shù):Y=X^2
則加密算法為:Yn+1=[Yn^2-p]%256;(Yn+1為加密后數(shù)據(jù),Yn為上一次的加密數(shù)據(jù),p為原始數(shù)據(jù)。)
加密效果如圖2所示。
圖2 加密前后對(duì)比
由圖2可以看出,經(jīng)過相對(duì)簡單的二次方函數(shù)加密圖像已被混沌掩蓋,但還有一些輪廓顯現(xiàn),可以通過改進(jìn)加密函數(shù),提高圖像加密效果。
改 進(jìn) 后 的 算 法 為 :Yn+1=[Yn*(Yn%pwe)-p]%256;(Yn+1為加密后數(shù)據(jù),Yn為上一次的加密數(shù)據(jù),p為原始數(shù)據(jù),pwe為加密密碼。)
加密效果如圖3所示。
圖3 改進(jìn)后的加密效果
如圖中可以看出,圖像的加密效果得到大大改進(jìn)。圖像已完全被混沌掩蓋。
對(duì)圖像進(jìn)行灰度分析,如圖4所示。
圖4 灰度分析
由色彩分布直方圖分析,可以看出圖像灰度均衡,加密效果明顯。
通過以上分析,可以得出結(jié)論:此算法簡單高效,加密性高。將此算法應(yīng)用于文件,可對(duì)一些數(shù)據(jù)文件進(jìn)行簡單加密,適合嵌入式系統(tǒng)以及Windows系統(tǒng)的PC實(shí)現(xiàn)簡易加密。在Windows下的MFC實(shí)現(xiàn)界面如圖5所示。
圖5 MFC界面
界面中,左邊為加密,郵編為解密。加密時(shí),打開文件,輸入0-256之間的密碼,加密或解密后文件以“e_”或“d_”開頭。
核心程序源代碼如下:
int encode()
{
int filesize,flag;
int i,x,y,p;
FILE*fp,*fp2;
//*******************讀取源文件大小
if ((fp=fopen(pathName1,"rb"))==NULL) /*打開原始文件是否正確*/
{
//MessageBox("打開文件失??!","提示");
return 0;
}
fseek(fp,0L,SEEK_END);
filesize=ftell(fp);
if ((fp2=fopen(saveName1,"wb"))==NULL) /*新建加密文件是否正確*/
{
//MessageBox("打開文件失?。?,"提示");
return 0;
}
rewind(fp);
rewind(fp2);
///****************文件加密************
x=pwe;
for(i=0;i<filesize;i++)
{
flag=i;
fseek(fp,flag,SEEK_SET);
p=fgetc(fp);
y=unsigned char((x*x+(i%pwe)*(i%pwe)+3*x)-p);//
fseek(fp2,flag,SEEK_SET);
fputc(y,fp2);
x=y;
}
fclose(fp);
fclose(fp2);
return 1;
}
(1)可以考慮根據(jù)硬件條件使用更復(fù)雜的加密函數(shù),已達(dá)到更假的加密效果
(2)可以先對(duì)數(shù)據(jù)順序進(jìn)行打亂重排,在進(jìn)行加密。
(3)可以考慮使用相同的方法進(jìn)行多次加密。
(4)可以考慮將數(shù)據(jù)進(jìn)行多級(jí)級(jí)聯(lián),算法中關(guān)聯(lián)到前2個(gè)或兩個(gè)以上數(shù)據(jù),提高加密性能。
[1] Chen G, Mao Y, Chui C K. A Symmetric Image Encryption Scheme Based on 3D Chaotic Cat Maps[J]. Chaos, Solitons &Fractals,2004,21(03):749-761.
[2] 張勇,陳濱.Logistic映射的有限字長研究[J].電子科技大學(xué)學(xué)報(bào),2006,35(03):292-316.
[3] Shujun Li, Xuan Zheng. Cryptanalysis of a Chaotic Image Encryption Method[C]. USA:[s.n.],2002:708-711.
[4] Gonzalo Alvarez1, Li Shujun. Some Basic Cryptographic Requirements for Chaos-Based Cryptosystems[J]. International Journal of Bifurcation and Chaos,2006,16(08):2129-2151.
[5] 羅啟斌,張?。环N新的混沌偽隨機(jī)序列生成方式[J].電子與信息學(xué)報(bào),2006,28(7):1262-1264.
[6] Hai-Yan Zhang. A New Image Scrambling Algorithm Based on Queue Transformation[C]. Hong Kong:[s.n.],2007:1526-1530.
[7] 張文麗.?dāng)?shù)據(jù)加密技術(shù)芻議[J].proiect and security應(yīng)用與安全,2008(2):27.
[8] 呂后坤,雷燕. 數(shù)據(jù)據(jù)加密技術(shù)方法與應(yīng)用[J]. 福建電腦, 2008(7):59.