數(shù)字圖像加密算法之空域LSB

為了彌補(bǔ)傳統(tǒng)密碼技術(shù)的不足,我們依據(jù)新型的版權(quán)保護(hù)技術(shù)——數(shù)字水印,設(shè)計實(shí)現(xiàn)了一種基于空域的圖像水印算法,提出了一種基于空域LSB算法的數(shù)字圖像加密算法,該加密算法對不同的值對應(yīng)的圖像點(diǎn)像素進(jìn)行不同的加密,然后根據(jù)給定的隨機(jī)整數(shù)尋找加密結(jié)果的存放位置。

一、數(shù)字水印的基本理論

1、數(shù)字水印技術(shù)的定義和基本框架

數(shù)字水?。―igital Watermark)技術(shù)是將與多媒體內(nèi)容相關(guān)或不相關(guān)的一些標(biāo)示信息直接嵌入多媒體內(nèi)容當(dāng)中,但不影響原內(nèi)容的使用價值,并不容易被人的知覺系統(tǒng)覺察或注意到。通過這些隱藏在多媒體內(nèi)容中的信息,可以達(dá)到確認(rèn)內(nèi)容創(chuàng)建者、購買者,或者是否真實(shí)完整。數(shù)字水印是信息隱藏技術(shù)的一個重要研究方向。

圖l展示了水印的嵌入過程,該系統(tǒng)的輸入是水印信息W、原始載體數(shù)據(jù)I和一個可選的私鑰/公鑰K。其中水印信息可以是任何形式的數(shù)據(jù),如隨機(jī)序列或偽隨機(jī)序列;字符或柵格;二值圖像、灰度圖像或彩色圖像;3D圖像等等。水印生成算法G應(yīng)保證水印的唯一性、有效性、不可逆性等屬性。

2、數(shù)字水印的分類

隨著數(shù)字水印技術(shù)的發(fā)展,水印算法的分類方法繁多。

1)按水印發(fā)展來看,可分為第1代水印和第2代水??;

2)按嵌入的水印信號形式來分,可以分為一維水印和多維水印;

3)按嵌入方法可以分為可逆水印和不可逆水?。?/p>

4)按水印檢測方法,可以分為盲水印和非盲水印;

5)按魯棒性來分,可分為易脆水印、半易脆水印和魯棒水??;

6)從外觀上分類,可分為可見水印和不可見水??;

7)按載體分類,可分為圖像水印、視頻水印、音頻水印和文檔水??;

8)從水印的嵌入域來分,可分為空間域水印和變換域水印。

3、水印的攻擊方法和對策

從數(shù)字水印的應(yīng)用中可以看出,數(shù)字水印在認(rèn)證、防盜版方面有重要的應(yīng)用。然而,水印技術(shù)與密碼術(shù)一樣,是在不停的“攻”與“防”中不斷發(fā)展的,因此,研究數(shù)字水印的攻擊方法對于數(shù)字水印的發(fā)展有著重要的作用。按照攻擊原理可以將攻擊分為4類:簡單攻擊、同步攻擊、削去攻擊和混淆攻擊。

二、水印嵌入算法

數(shù)字水印技術(shù)的學(xué)科特點(diǎn)在于它橫跨圖像處理、多媒體技術(shù)、模式識別、密碼學(xué)、數(shù)字通信等多學(xué)科領(lǐng)域,以這些領(lǐng)域的算法、思想和概念為基礎(chǔ)。一個數(shù)字水印方案一般總是綜合利用這些領(lǐng)域的最新進(jìn)展,各學(xué)科的學(xué)者們也提出了不盡相同的算法。針對靜態(tài)圖像壓縮標(biāo)準(zhǔn)JPEG,在離散余弦變換基礎(chǔ)上植入數(shù)字水印的研究成為熱點(diǎn);針對目前流行的視頻壓縮標(biāo)準(zhǔn)MPEG、H.263,Dittmann等提出了2種適用于空域和頻域的算法例;1995年,Cox等在傳統(tǒng)通信系統(tǒng)的基礎(chǔ)上,提出了擴(kuò)頻水印的概念。這種方法較好地利用了人類視覺系統(tǒng)的特性,水印信息經(jīng)過一定的調(diào)制過程隱藏于數(shù)字圖像感知比較重要的頻譜部分,從而可以抵抗有損壓縮和其它數(shù)字圖像處理操作;Xia,Zeng等做了基于離散小波變換的數(shù)字水印技術(shù)研究;Zhu等在DWT技術(shù)上,從編碼角度做了一些研究;Pitas等在統(tǒng)計學(xué)和混沌的基礎(chǔ)上,提出了一種新穎的算法;Wolfgang,schyndel等在其定義的m-序列基礎(chǔ)上,提出了可以有效抵抗線性和非線性濾波以及JPEG有損壓縮的數(shù)字水印植入算法;QU等以圖形著色問題為基礎(chǔ),提出了2種有趣的數(shù)字水印技術(shù);Kankanhalli等研究了基于圖像內(nèi)容的數(shù)字水印技術(shù)H1,這與計算機(jī)視覺的發(fā)展是密不可分的;在計算機(jī)圖形學(xué)研究領(lǐng)域,1999年的SIGGRAPH大會上,Praun等提出了在造型的三維網(wǎng)格上植人數(shù)字水印的方法,Ohbuchi也做了類似的工作;Maes等提出了基于幾何變形的方法;Paute等從分形壓縮的角度提出了方法。此外,很多學(xué)者還提出了一些對數(shù)字水印進(jìn)行攻擊的方法,非常有助于魯棒性要求很高的數(shù)字水印技術(shù)的研究。

1、空域算法

該類算法中典型的水印算法是將信息嵌入到隨機(jī)選擇的圖像點(diǎn)中最不重要的像素(LSB:least significantbits)上,這可保證嵌入的水印是不可見的,但是由于使用了圖像不重要的像素位,算法的魯棒性差,水印信息很容易為濾波、圖像量化、幾何變形的操作破壞.另外一個常用方法是利用像素的統(tǒng)計特征將信息嵌人像素的亮度值中。

2、變換域算法

基于變換域的數(shù)字水印技術(shù)往往采用類似于擴(kuò)頻圖像的技術(shù)來隱藏水印信息。這類技術(shù)一般基于常用的圖像變換(基于局部或是全局的變換),這些變換包括離散余弦變換(DCT)、離散小波變換(DWT)、傅氏變換(DFT或FFT)、傅立葉一梅林(Fourie-Mellin)變換以及哈達(dá)馬變換(Hadamard transform)等等。

三、數(shù)字圖像加密算法之空域LSB

1、LSB算法介紹

采用直接改變圖像中像素的最后4位bit值來嵌入秘密文件。由秘密文件的傳輸過程,可相應(yīng)地分為3個階段:嵌入過程、傳播過程、抽取過程,就整體設(shè)計方案而言,可以用模型來概括。

待檢測的載體信號( Signal)提取出的秘密信息提取秘密信息,秘密信息指要傳送的要隱藏的信息,像、聲音、文字等。

這是一種典型的空間域數(shù)據(jù)隱藏方法,L.F.Tumer與R.G.Van Schyndel等先后利用此方法將特定的標(biāo)記隱藏于數(shù)字音頻和數(shù)字圖像內(nèi)。以圖像數(shù)據(jù)而言,一幅圖像的每個像素是以多比特的方式構(gòu)成的,在灰度圖像中,每個像素通常為8位;在真彩色圖像(RGB方式)中,每個像素為24比特,其中RGB三色各為8位,每一位的取值為0或1。在數(shù)字圖像中,每個像素的各個位對圖像的貢獻(xiàn)是不同的。對于8位的灰度圖像,每個像素的數(shù)字g可用公式表示為:

其中:i代表像素的第幾位;幺表示第f位的取值,bi∈{o,l}。

這樣,把整個圖像分解為8個位平面,從LSB(最低有效位O)到MSB(最高有效位7)。從位平面的分布來看,隨著位平面從低位到高位(即從位平面0到位平面7),位平面圖像的特征逐漸變得復(fù)雜,細(xì)節(jié)不斷增加。到了比較低的位平面時,單純從一幅位平面上已經(jīng)逐漸不能看出測試圖像的信息了。由于低位所代表的能量很少,改變低位對圖像的質(zhì)量沒有太大的影響。LSB方法正是利用這一點(diǎn)在圖像低位隱藏入水印信息。

2、加密算法的實(shí)現(xiàn)

(1)利用MATLAB語言實(shí)現(xiàn)了在一個400x 533大小的灰度圖“grayl.bmp”中隱藏了一個文本文件“gray2.bmp”,事實(shí)上,在該大小的位圖中最大可隱藏的字符數(shù)為256x 256/8=8 192個,約漢字4000多個。由此可見,隱藏信息的容量非常大。加密算法具體如下:

1)嵌入秘密信息

第1步:讀人載體文件,并顯示它。

original_carrier-1 mread(’grayl.bmp‘);

carner=original_carrier;

subplot(2,3,1),imshow(carrier),title(’原始的載體圖像’)

第2步:決定載體的LSB及嵌入的位數(shù),采用嵌入圖像中所有像素的最后4位;對載體圖像做預(yù)處理,置其低4位相位為O;

carrierl=bitand(carner,254);

subplot(2,3,2),imshow(carrierl),title(‘載體圖像低1位是0‘,見圖4)

carrier2=bitand(carner,252);

subplot(2,3,3),imshow(carner/),title(’載體圖像低2位是O‘,見圖5)

camer3=bitand(carner,248);

subplot(2,3,4),imshow(carrier3),title(’載體圖像低3位是O’,見圖6)

carrier4=bitand(carrier, 240);

subplot(2,3,5),imshow(carrier4),title(‘載體圖像低4位是0‘,見圖7)

第3步:將秘密圖像讀人,并存儲;并對秘密圖像做預(yù)處理。

original_secret=imread(‘gray2.bmp‘);

secret =original_sec ret ;

subplot(2,3,3),imshow(secret),title(’原始的秘密圖像’,見圖8)

secret=bitand(secret, 240);

subplot(2,3,4),imshow(sec ret),title(’低4位為O的秘密圖像‘,見圖9)

secret=bitshift(secret,-4);

第4步:將處理后的秘密圖像嵌入到載體中,并且顯示隱藏后的最終結(jié)果。

carrier=bitor(carrier, secret) ;

subplot (2,3,5),imshow (carrier),title(’隱藏后的載體圖像’)

imwrite (carrier, 'd: \l_imagehide.bmp') 。

(2)讀取秘密信息

第1步:讀人含有秘密文件的圖像;

carner=imread(’d:\l_imagehide.bmp’);

第2步:輸出隱藏后的文件,并提取秘密圖像;將秘密圖像像位左移4位,顯示提取后的秘密圖像見圖11。

A=bitand(carner,15);

A=bitshift (A,4);

subplot(2,3,6)!imshow (A),title(’提取的隱藏圖像’)。

2)實(shí)驗(yàn)2利用MATLAB語言實(shí)現(xiàn)了在一個400x 533大小的彩色圖“rgbl.jpg"中隱藏了一個文本文件“gray2.bmp",將秘密信息隱藏到JPG彩色圖像的B層中。并成功提取隱藏的信息,完成信息隱藏。

第1步讀入載體文件,并顯示它。

original_carrier=imread ( 'rgbl.jpg' )

original_secret-imread 'gray2.bmp')

data=original_carrier;

carrier=original_carrier;

subplot (3,3,1),imshow (carrier),title(‘原始的載體圖像’)

secret=originaLsecret;

第2步讀取RGB圖像的B層,顯示B層的載體圖像,置載體圖像低4位是O,并顯示它。

carner=carrier(: , : ,3);

subplot(3,3,2),imshow(carner),title(’B層的載體圖像’)

carrier=bitand(carner,240);

subplot(3,3,3),imshow(carrier),title(’置低4位為O的載體圖像‘)

第3步顯示原始的秘密圖像,置秘密圖像低4位是O,并顯示它,再把秘密圖像高4位右移。

subplot(3,3,4),imshow(secret),title(’原始的秘密圖像’)

secret=bitand (secret, 240);

subplot(3,3,5),imshow(secret),title(‘置低4位為0的秘密圖像‘)

secret=bitshift(secret, -4);

第4步將秘密信息隱藏到載體的B層,并顯示隱藏后的圖片。

carrier=bitor(carrier,secret);

subplot (3,3,6),imshow(carner),title(‘隱藏在B層的載體圖像’)

data(: , : , 3) =carrier;

subplot(3,3,7),imshow(data),title(’隱藏后的載體圖像’)

第5步讀人隱藏后的圖片,并提取秘密信息。

A=imread(’d:\2_imagehide.bmp');

subplot (3,3,8),imshow (A),title(’讀人隱藏后的載體圖像‘)

row, col, rgbl=size (A);

A=A(:,:,3);

A=bitand (A. 15);

secret=bitshift (A, 4);

subplot (3,3,9),imshow(secret),title(’提取之后的隱藏圖像’)

figure, imshow (original_carrier),title(’原始的載體圖像’)

figure, imshow (data),title(’隱藏后的載體圖像‘)

3、評價

LSB算法,就是通常把信息隱藏在圖像像素的最后幾位,這時信息通常是文本。把文本化成二進(jìn)制代碼,然后把它嵌人到圖像像素的最后幾位,這樣做的好處是對圖片的損耗很小,肉眼幾乎無法分辨,該算法實(shí)現(xiàn)起來比較簡單,且不可見性好,而且抵抗剪切和JPEG壓縮的能力較強(qiáng),算法的時間復(fù)雜度較低,加密效果較好,安全性較高;但魯棒性差,輕微的噪音和壓縮就有可能破壞水印,而且算法一旦被發(fā)現(xiàn),敵手就可以輕易改變水印信息。

小知識之LSB加密算法

LSB(LeastSignificant Bits)加密算法:將秘密信息嵌入到載體圖像像素值的最低有效位,也稱最不顯著位,改變這一位置對載體圖像的品質(zhì)影響最小。