孫穎穎,陳震海,張瀚勻
(1.廣西師范大學計算機科學與信息工程學院,桂林541004;2.廣西師范大學圖書館,桂林541006)
隨著計算機網絡的快速發(fā)展,信息隱藏技術已經成為信息安全領域的一個重要分支。該技術類似于生物學中的保護色,通過將秘密信息加密隱藏至外部載體中,以達到保護秘密信息的效果。一般來說,載體圖像會因為秘密信息的嵌入發(fā)生一定程度的失真,在例如醫(yī)學、軍事、藝術品保護等領域,載體圖像的失真可能造成用戶的誤讀和錯判,從而帶來巨大的損失。新興的無損圖像信息隱藏技術[1-3]恰好解決了這一問題。這一技術實現(xiàn)了在不破壞載體圖像的前提下完成信息的傳遞,這種獨特的優(yōu)勢吸引著越來越多的研究人員將目光集中在無損圖像信息隱藏技術上。目前常見的可逆信息隱藏算法[4]主要有以下5 大類:①基于無損壓縮的可逆信息隱藏算法[5],該類算法通過壓縮數(shù)據的冗余信息騰出空間來嵌入秘密信息。②基于差值擴展的可逆信息隱藏算法[6],該類算法通過擴展兩個像素之間的差異來嵌入秘密信息。③基于直方圖平移的可逆信息隱藏算法[7],該類算法通過修改圖像的最值信息獲取冗余空間來嵌入秘密信息。④基于預測誤差擴展的可逆信息隱藏算法[8],該類算法使用預測誤差擴展來嵌入數(shù)據。⑤基于整數(shù)變換的可逆信息隱藏算法[9],該類算法使用可逆對比映射的整數(shù)變換技術來構建。
因為現(xiàn)有實現(xiàn)信息隱藏技術的工具較少,故本文使用直方圖平移技術設計并實現(xiàn)了基于直方圖平移的無損圖像信息隱藏軟件。該軟件不僅可以實現(xiàn)秘密信息在載體圖像上的嵌入與提取,同時可以保證在信息提取之后,可以無差別地將載體圖像恢復至秘密信息嵌入之前的狀態(tài)。實驗結果表明,該軟件可以有效實現(xiàn)秘密信息的嵌入和提取,并且能無損恢復載體圖像。接下來將介紹該軟件核心算法、設計與實現(xiàn)、軟件測試這三部分。
本文利用Ni 等人在文獻[7]提出的基于直方圖平移的可逆信息隱藏算法實現(xiàn),基本原理是計算出載體圖像的像素直方圖,修改直方圖中的最值使圖像產生冗余空間,并向冗余空間中嵌入秘密信息。下面將詳細介紹信息嵌入、信息提取和圖像恢復的具體方法。
嵌入秘密信息需先平移直方圖產生冗余空間,再將秘密信息嵌入該空間。通過計算找到相應直方圖的最大值P 和最小值Z。之后對圖像進行整體掃描,使圖像在P 到Z 的開區(qū)間內的像素值進行加一或者減一操作。設Mij表示載體圖像像素,M'ij表示直方圖平移后的圖像像素,則產生冗余空間的公式可定義為:
隨后將秘密信息嵌入到圖像中。本軟件使用OpenCV 圖像處理庫中Mat 類的at()函數(shù),讀取圖像像素值,當載體圖像中像素值等于最大值P 時,如果對應的嵌入信息為“1”,那么該像素值進行加一操作,反之該像素值不變。設Sl表示秘密信息,M''ij表示嵌入秘密信息后的圖像像素,可以通過如下公式表示該嵌入過程。
實際就是信息嵌入模塊的逆向操作。為保證軟件的安全性,首先要進行安全檢驗,使用提取出的密鑰與用戶所輸入的密鑰進行對比,兩者相同即可進行以下信息提取操作。對該載體圖像進行整體掃描,若遇到像素值為P+1,則對應提取信息為“1”。反之,若遇到像素值為最大值P,那么對應提取信息為“0”。將提取出的二進制序列與密鑰進行異或操作即可得到解密后的秘密信息。設b 為提取的信息,則可用以下公式表示信息提取過程。
顯然這部分是將載體圖像的像素值進行還原,以實現(xiàn)載體圖像無失真的恢復。具體操作為:先將在最大值P 和最小值Z 的開區(qū)域間的像素值進行加一(或減一)操作即進行直方圖平移操作,再將提取出的開銷信息整合到載體圖像中。設Aij表示移位后的新像素,則可用以下公式表示圖像恢復模塊的直方圖平移過程。
設Aij表示無損恢復后的像素,(m,n)表示零值點的位置信息,可以通過如下公式將開銷信息整合到載體圖像以實現(xiàn)圖像的無損恢復。
該軟件將文本信息或數(shù)據文件嵌入到BMP 格式的載體圖像中[10],并且可以將該信息提取出來,最后完全恢復圖像。接下來對該軟件設計以及實現(xiàn)部分進行介紹。
根據上述功能需求,該軟件的功能結構如圖1 所示,其功能模塊介紹如下。①文本信息嵌入模塊:選擇載體圖像,手動輸入信息和密鑰,將文本信息嵌入載體圖像中。②數(shù)據文件嵌入模塊:選擇載體圖像和數(shù)據文件,輸入密鑰,將數(shù)據文件嵌入載體圖像中。③文本信息提取模塊:選擇載體圖像,輸入提取密鑰,獲取并顯示秘密信息。④數(shù)據文件提取模塊:選擇載體圖像,輸入提取密鑰,將數(shù)據文件提取出來并顯示其路徑。⑤查看恢復圖像模塊:選擇載體圖像,輸入恢復密鑰,密鑰正確會顯示該圖像路徑,通過路徑可查看恢復后的圖像。
圖1 軟件功能結構圖
軟件信息嵌入過程(a)和提取過程(b)如圖2 所示。用戶A 選取一張載體圖像和需要嵌入的秘密信息,并且輸入密鑰,該軟件將秘密信息預處理后,通過嵌入算法將其嵌入載體圖像中,生成載密圖像。用戶B 得到載密圖像,使用該軟件,通過提取密鑰從載密圖像中獲得秘密信息和無損的原圖像。
為保證秘密信息的安全性,需要對它進行預處理。該軟件采用MD5 加密技術將密鑰轉為32 位隨機字符串,再將其轉為比特流,通過與秘密信息進行異或運算,達到對秘密信息的加密處理。設表示密鑰,表示秘密信息,表示加密后的秘密信息,加密公式(異或運算)可定義為:
圖2 軟件信息嵌入和提取過程圖
因信息提取過程需要借助最值信息,故需將其構造為附加信息嵌入圖像。先把第一對最值信息寫入圖像的前兩個像素,并將這兩個像素、最值對數(shù)和剩余最值信息一起轉為比特序列構成附加信息。另外,附加信息的長度是由所需字節(jié)+信息長度(比特序列)組成,其中使用兩位比特數(shù)表示其所需字節(jié)。若信息長度為0~255,則需要一個字節(jié)存儲;若為256~65535,則需兩個字節(jié)存儲;若長度大于65535,則需四個字節(jié)存儲。本文設定“00”表示一個字節(jié),“01”表示兩個字節(jié),“10”表示三個字節(jié)。加密后的秘密信息長度組成方式與附加信息相同。
另外,若零值點(頻率最小值點)不為0,則需記錄下這些零值點的位置信息,以便圖像恢復時使用。所以需將其作為開銷信息嵌入圖像中。預處理后秘密信息結構如圖3 所示。
圖3 預處理后秘密信息結構
本文軟件是在Windows 7 系統(tǒng)環(huán)境下,使用C++語言在Microsoft Visual C++2013 平臺進行開發(fā)。其中使用的圖像處理庫為OpenCV3,故在軟件開發(fā)前期,需對該平臺進行OpenCV 環(huán)境配置。軟件界面利用MFC進行設計,功能界面設計較為簡潔。界面整體設計采用菜單與子菜單的形式,實現(xiàn)用戶運行軟件后出現(xiàn)含有“信息嵌入”與“信息提取”兩個菜單項的主界面,點擊菜單項可以選擇子菜單。每個子菜單項分別對應一個功能模塊,其中每個模塊的界面都有菜單、按鈕、編輯框、復選框等控件。
軟件使用面向對象和模塊化的思想,將每個功能模塊作為一個類進行代碼實現(xiàn)。其中設計TextHide 類實現(xiàn)文本信息嵌入模塊、FileHide 類實現(xiàn)數(shù)據文件嵌入模塊、TextExtract 類實現(xiàn)文本信息提取模塊、FileExtract類實現(xiàn)數(shù)據文件提取模塊、PicExtract 類實現(xiàn)圖像恢復模塊。因為本軟件處理的是BMP 格式,所以在讀取和保存圖像文件時,使用Windows.h 頭文件中的BIT?MAPEFILE 和BITMAPINFOHEADER 來讀取或者構造BMP 文件。在圖像信息處理部分,軟件通過OpenCV圖像處理庫中calcHist()函數(shù)計算圖像直方圖,Mat 類的at()函數(shù)讀取圖像像素值。軟件設計了char_array_2_binary_str()函數(shù)實現(xiàn)信息嵌入之前秘密信息從字符流轉為字節(jié)流以及信息提取之后將秘密信息從字節(jié)流轉換成字符流。設計HistShift()函數(shù)實現(xiàn)信息嵌入功能,InfoExtr()函數(shù)實現(xiàn)信息提取功能,RecoverPic()函數(shù)實現(xiàn)圖像恢復功能。
為測試該軟件的功能,選取如圖4 所示彩色圖(a)以及灰度圖(b)作為測試圖像用例,使用“在我塵世歲月的狹窄河流上……”為文本測試用例,“G://newOut?put.txt”為數(shù)據文件測試用例。
圖4 載體圖像測試用例
在軟件界面中選擇“信息隱藏”菜單中的“文本信息隱藏”或者“數(shù)據文件隱藏”子菜單,隨后選取圖像并輸入秘密信息和密鑰,點擊“隱藏”按鈕,如圖5 所示。
圖5 文本信息隱藏與數(shù)據文件隱藏功能測試界面圖
在“信息提取”菜單中選擇“文本信息提取”、“數(shù)據文件提取”或者“查看恢復圖像”子菜單,隨后選取圖像并輸入密鑰,點擊“提取”或者“恢復”按鈕,如圖6 所示。經測試,該軟件達到無損圖像的信息隱藏效果。
本文利用直方圖平移技術設計并實現(xiàn)了一個圖像無損信息隱藏軟件。它包含文本信息隱藏、文本信息提取、數(shù)據文件隱藏、數(shù)據文件提取和查看恢復圖像五大功能。軟件界面簡潔大方,易于操作。經測試,它能有效實現(xiàn)秘密信息的嵌入和提取,并且能無損恢復載體圖像。
圖6 數(shù)據文件提取以及查看恢復圖像功能測試界面圖