基于位運(yùn)算的圖像加密算法在BMP圖像中的運(yùn)用

近些年來,隨著信息化和寬帶網(wǎng)絡(luò)在我們?nèi)粘I钪械难杆侔l(fā)展,圖像數(shù)據(jù)開始在因特網(wǎng)上日益流行。由于某些圖像數(shù)據(jù)具有非常特殊的安全保密性。即發(fā)送方與接收方都不希望在網(wǎng)絡(luò)上傳輸?shù)膱D像數(shù)據(jù)被未經(jīng)授權(quán)者所瀏覽或處理,因此圖像數(shù)據(jù)的安全性顯得極為重要。

目前,基于位運(yùn)算的圖像加密技術(shù)的加密算法主要有流密碼加密和分組密碼加密兩種。我們將對(duì)這兩種加密體制進(jìn)行分析與比較,并將其應(yīng)用于加密BMP格式的彩色圖像,最后的出結(jié)論只有正確選擇密碼的多樣性和長(zhǎng)度,才能取得良好的圖像加密效果。

一、利用位運(yùn)算加密圖像文件的基本思想

位運(yùn)算加密圖像文件的思想就是利用某種方法得到一系列的隨機(jī)或偽隨機(jī)的以字節(jié)為單位的數(shù)據(jù),然后把他們和一幅圖像的數(shù)據(jù)逐字節(jié)進(jìn)行特定的位運(yùn)算,以改變?cè)袌D像的數(shù)據(jù)信息。這樣處理后的圖像顯示出來的效果將是“面目全非”,掩蓋了原來的圖像信息,達(dá)到圖像文件加密的目地。此外,加密的圖像文件應(yīng)該在一定的條件下可以恢復(fù)出原來的圖像,所以設(shè)計(jì)的加密算法中用于加密的隨機(jī)或偽隨機(jī)的以字節(jié)為單位的數(shù)據(jù)應(yīng)具有可再生性,加密的位運(yùn)算應(yīng)具有可逆性。這時(shí),若發(fā)送端與接收端采用同樣的隨機(jī)序列發(fā)生器,那么序列的取值只取決于種子,因此發(fā)送端只需傳遞種子,在接收端用同樣的種子產(chǎn)生的序列對(duì)加密周像進(jìn)行與發(fā)送端加密同樣的異或運(yùn)算,就能得到解密后的圖像。

二、利用位運(yùn)算加密圖像文件的方法

基于位運(yùn)算的加密算法主要有2種方法,一種是采用流密碼加密,即生成與圖像數(shù)據(jù)相同大小的偽隨機(jī)序列進(jìn)行加密;這種方法由于偽隨機(jī)序列的隨機(jī)性大并且無規(guī)律,因而加密效果均
勻、理想。但由于參與運(yùn)算的數(shù)據(jù)量大,因此加密速度受到限制,實(shí)時(shí)性差;另一種是采用分組密碼加密,下面將分別介紹這兩種加密方法。

密碼學(xué)以研究秘密通信為目的,以防止第三者對(duì)信息的截取。在密碼學(xué)中,需要變換的原消息稱為明文消息,明文經(jīng)過變換成為另一種隱蔽的形式,稱為密文消息,完成交換的過程稱作加密,其逆過程(即由密文恢復(fù)出明文的過程)稱作解密。對(duì)明文進(jìn)行加密時(shí)所采用的一組規(guī)則稱作加密算法。對(duì)密文進(jìn)行解密時(shí)所采用的一組規(guī)則稱作解密算法。加密和解密操作通常在密鑰的控制下進(jìn)行,并有加密密鑰和解密密鑰之分。因?yàn)閿?shù)據(jù)以密文的形式存儲(chǔ)在計(jì)算機(jī)文件中,或在數(shù)據(jù)通信網(wǎng)絡(luò)中傳輸,因此即使數(shù)據(jù)被末授權(quán)者非法竊取,或因系統(tǒng)故障和操作人員誤操作而造成數(shù)據(jù)泄露,未授權(quán)者也不能理解它的真正含義,從而達(dá)到數(shù)據(jù)保密的目的。同樣,未授權(quán)者也不能偽造合理的密文,因而不能篡改數(shù)據(jù),從而達(dá)到確保數(shù)據(jù)真實(shí)性的目的。

基于密鑰的加密算法通常有兩類:對(duì)稱加密算法和公開密鑰加密算法。

對(duì)稱加密算法有時(shí)又叫傳統(tǒng)加密算法,就是加密密鑰能夠從解密密鑰中推算出來,反過來也成立。在大多數(shù)對(duì)稱加密算法中,加密和解密密鑰是相同的。這些加密算法也叫秘密密鑰算法或單密鑰算法,它要求發(fā)送者和接收者在安全通信之前,商定一個(gè)密鑰。對(duì)稱加密算法的安全性依賴于密鑰,泄漏密鑰就意味著任何人都能對(duì)消息進(jìn)行加密和解密。只要通信需要保密,密鑰就必須保密。

然而,對(duì)稱加密算法又可分為兩類。一類加密算法只對(duì)明文中的單個(gè)比特(有時(shí)對(duì)字節(jié))運(yùn)算的算法稱為序列算法或序列密碼(流密碼)。另一類加密算法算法是對(duì)明文的一組比特亞行運(yùn)算,這些比特組稱為分組,相應(yīng)的算法稱為分組算法或分組密碼。現(xiàn)代計(jì)算機(jī)密碼算法的典型分組長(zhǎng)度為64比特,這個(gè)長(zhǎng)度大到足以防止分析破譯,但又小到足以方便使用(在計(jì)算機(jī)出現(xiàn)前,算法普遍地每次只對(duì)明文的一個(gè)字符運(yùn)算,可認(rèn)為是序列密碼對(duì)字符序列的運(yùn)算)。

(1)流密碼

流密碼是密碼學(xué)中最重要的加密方式之一。流密碼的優(yōu)點(diǎn)是錯(cuò)誤擴(kuò)展小,速度快,利于同步,安全程度高。流密碼的保密性完全取決于密鑰的隨機(jī)性。如果密鑰是真正的隨機(jī)數(shù),則這種體制在理論上就是不可破譯的。但這種方式所需的密鑰量大得驚人,在實(shí)際中是不可行的。因此,目前一般采用偽隨機(jī)序列來代替隨機(jī)序列作為密鑰序列,也就是序列存在著一定的循環(huán)周期。這樣序列周期的長(zhǎng)短就成為保密性的關(guān)鍵。如果周期足夠長(zhǎng),就會(huì)有比較好的保密性。現(xiàn)在周期小于1010的序列很少被采用,周期長(zhǎng)達(dá)1050的序列也并不少見。

(2)分組密碼

分組密碼即對(duì)固定長(zhǎng)度的一組明文進(jìn)行加密的算法。它將明文按一定的位長(zhǎng)分組。明文組和密鑰組的全部經(jīng)過加密運(yùn)算得到密文組。解密時(shí)密文組和密鑰組經(jīng)過解密運(yùn)算(加密運(yùn)算的逆運(yùn)算),還原成明文組。

分組密碼的特點(diǎn)是:密鑰可以在一定時(shí)間內(nèi)固定,不必每次變換,因此給密鑰配發(fā)帶來了方便。但是,由于分組密碼存在著密文傳輸錯(cuò)誤在明文中擴(kuò)散的問題,因此在信道質(zhì)量較差的情況下無法使用。

分組密碼其中最著名的兩個(gè)分組密碼即DES(Data EneryptionStandanl)數(shù)據(jù)加密標(biāo)準(zhǔn)和IDEA(lntemational Data Encryption Algorithm)國(guó)際數(shù)據(jù)加密算法。

設(shè)計(jì)分組密碼算法的核心技術(shù)是:在相信復(fù)雜函數(shù)可以通過簡(jiǎn)單函數(shù)迭代若干圈得到的原則下,利用簡(jiǎn)單圈函數(shù)及對(duì)合等運(yùn)算,充分利用非線性運(yùn)算。DES加密算法采用美國(guó)國(guó)家安全局精心設(shè)計(jì)的8個(gè)S-Box和P-置換,經(jīng)過16圈迭代,最終產(chǎn)生64比特密文,每圈迭代使用的48比特子密鑰是南原始的56比特產(chǎn)生的。

DES加密算法輸入的是64比特的明文,在64比特密鑰的控制下產(chǎn)生64比特的密文;反之輸入64比特的密文,輸出64比特的明文。64比特的密鑰中含有8個(gè)比特的奇偶校驗(yàn)位,所以實(shí)際
有效密鑰長(zhǎng)度為56比特。

DES加密算法加密時(shí)把明文以64bit為單位分成塊,而后用密鑰把每一塊明文轉(zhuǎn)化成同樣64bit的密文塊。DES提供72,000,000,000.000,000個(gè)密鑰。用每微秒可進(jìn)行一次DES加密的機(jī)器來破譯密碼需兩千年。

(3)流密碼與分組密碼的區(qū)別

流密碼:將明文M分割成字符串和比特串:M=m0,m1,…,mj,…,并逐字符或逐位進(jìn)行加密:Ek(M)=EkO(m0),Ek1(m1),....,Ekj(mj),...,其中:密鑰流是K=k0,k1,...,kj,…。

分組密碼:將明文消息編碼表示后的數(shù)字(通常是0與1)序列x1,x2,…劃分成長(zhǎng)為m的組x=(x1,x2,…,xm)。各組(長(zhǎng)為m的向量)分別在密鑰k=(k1,k2,...,kt)的控制下變換成等長(zhǎng)的輸出數(shù)字序列y=(y1,y2,…,yn)(長(zhǎng)為n的向量)。

分組密碼是現(xiàn)代密碼學(xué)中的一個(gè)重要研究分支,其誕生和發(fā)展有著廣泛的實(shí)用背景和重要的理論價(jià)值。分組密碼有其自身的優(yōu)點(diǎn)。首先,分組密碼容易被標(biāo)準(zhǔn)化,因?yàn)樵诮裉斓臄?shù)據(jù)網(wǎng)絡(luò)通倍中,信息通常是被成塊地處理和傳輸?shù)?。其次,使用分組密碼容易實(shí)現(xiàn)同步,因?yàn)橐粋€(gè)密文組的傳輸錯(cuò)誤不會(huì)影響其他組,丟失一個(gè)明密文組不會(huì)對(duì)其隨后的組的解密的正確性產(chǎn)生影響。分組密碼的主要缺陷表現(xiàn)在兩個(gè)方面,一是分組加密不能隱蔽數(shù)據(jù)模式,即相同的密文組蘊(yùn)含著相同的明文組;二是分組加密不能抵抗組的重放、嵌入和刪除等攻擊。但分組密碼的上述缺陷可以通過在加密處理中引入少量的記憶來克服。例如可以通過密碼分組鏈接(CBC)模型來克服這些缺陷。

a、有時(shí)分組密碼和序列密碼的界限并不是十分清楚,例如:一次對(duì)一個(gè)字符進(jìn)行明文交換的密碼系統(tǒng),即可以視作對(duì)字符流進(jìn)行操作的流密碼,也可以視為一次對(duì)8位長(zhǎng)的位組進(jìn)行明文交換的分組密碼。通常.我們將短周期的流密碼視為分組密碼,而把長(zhǎng)周期的流密碼仍然視為流密碼。

b、從另外一種觀點(diǎn)來看,他們之間又有明顯的區(qū)別。流密碼確定一個(gè)內(nèi)部記憶裝置,即用一個(gè)依賴于種子密鑰I以及流密碼在時(shí)刻j的內(nèi)部狀態(tài)Oj的函數(shù)f生成密鑰流,即f(I,Oj)=Kj,然后將明文序列的第i個(gè)字符mj轉(zhuǎn)換為密文序列的第i個(gè)字符Cj:Cj=Ekj(mj)與此相反,分組密碼確定一個(gè)無記憶裝置,他在密鑰K的參與下,將成組明文信息M=(m0,…,mL-1)轉(zhuǎn)換為成組密文信息C=(C0,…,CN-1)。

c、記憶性。由于流密碼中密鑰流元素的產(chǎn)生由其內(nèi)部狀態(tài)和密鑰決定,流密碼中明文的重復(fù)部分是用密鑰流的不同部分加密的,而分組密碼中相同的明文組對(duì)應(yīng)相同的密文組,流密碼似乎比分組密碼更安全。

三、基于位運(yùn)算的圖像加密算法在BMP圖像中的運(yùn)用

位圖文件(Bitmap-File.BMP)格式是Windows采用的圖像文件存儲(chǔ)格式,在Wiridow8環(huán)境下運(yùn)行的所有圖像處理軟件都支持這種格式。Windows 3.0以前的BMP位圖文件格式與顯示設(shè)備有關(guān),因此把它稱為設(shè)備相關(guān)位圖(deVice-dependent bitmap,DDB)文件格式。Windows 3.0以后的BMP位圖文件格式與顯示設(shè)備無關(guān),因此把這種BMP位圖文件格式稱為設(shè)備無關(guān)位圖(device-indepen-dent bitmap,DIB)格式,目的是為了讓W(xué)indows能夠在任何類型的顯示設(shè)備上顯示BMP位圖文件。BMP位圖文件默認(rèn)的文件擴(kuò)展名是BMP或bmp。

位圖文件可看成由4個(gè)部分組成:位圖文件頭(bitmap-fileheader)、位圖信息頭(bitmap-information header)、彩色表(colortable)和定義位圖的字節(jié)陣列,它們的名稱和符號(hào)如表1所示。

基于位運(yùn)算的圖像加密算法在BMP圖像中的運(yùn)用

基于位運(yùn)算的加密算法思想在數(shù)字網(wǎng)像文件中存儲(chǔ)的主要是圖像的顏色和灰度信息。常用的BMP格式圖像文件由表頭、調(diào)色板和圖像數(shù)據(jù)3部分組成。表頭長(zhǎng)度固定為54個(gè)字節(jié),其中保
留了有關(guān)圖像的參數(shù)信息,如:使用的顏色、圖像尺寸、文件大小、壓縮標(biāo)志等。調(diào)色板代表BMP圖像的顏色信息,他將圖像象素的數(shù)值映射為相應(yīng)的顏色。圖像數(shù)據(jù)區(qū)存儲(chǔ)著所有象素的數(shù)值,但BMP格式中每個(gè)象素的字節(jié)數(shù)是不同的。比如8位、24位的BMP圖像分別代表每個(gè)象素包含1個(gè)字節(jié)或3個(gè)字節(jié)。

并且,分組密碼長(zhǎng)度和密碼多樣性的選取不同,對(duì)加密BMF彩色圖像的影響程度也不同,在分組密碼長(zhǎng)度與BMP圖像的長(zhǎng)寬尺寸成倍數(shù)關(guān)系的情況下,BMF圖像文件加密效果會(huì)呈現(xiàn)極其不理想的規(guī)律和現(xiàn)象。

小知識(shí)之位運(yùn)算

程序中的所有數(shù)在計(jì)算機(jī)內(nèi)存中都是以二進(jìn)制的形式儲(chǔ)存的。位運(yùn)算說穿了,就是直接對(duì)整數(shù)在內(nèi)存中的二進(jìn)制位進(jìn)行操作。比如,and運(yùn)算本來是一個(gè)邏輯運(yùn)算符,但整數(shù)與整數(shù)之間也可以進(jìn)行and運(yùn)算。舉個(gè)例子,6的二進(jìn)制是110,11的二進(jìn)制是1011,那么6 and 11的結(jié)果就是2,它是二進(jìn)制對(duì)應(yīng)位進(jìn)行邏輯運(yùn)算的結(jié)果(0表示False,1表示True,空位都當(dāng)0處理)。