趙 健
四川大學計算機學院,四川 成都 610064
信息隱藏技術是20世紀90年代中期從國外興起的,集多學科理論與技術于一身的新興技術。它利用人類感覺器官的不敏感,以及多媒體數(shù)字信號本身存在的冗余,將秘密信息隱藏在一個宿主信號中,不被人的感知系統(tǒng)察覺或不被注意到,而且不影響宿主信號的感覺效果和使用價值[1]。與密碼術相比,信息隱藏不僅隱藏了信息的內(nèi)容,而且隱藏了信息的存在,因而在信息安全領域顯示出更為優(yōu)良的特性。信息隱藏技術主要的性能指標包括隱蔽性、嵌入量和穩(wěn)健性[2]。
信息隱藏的載體多種多樣,但目前人們主要用圖像、音視頻等多媒體文件來作為隱藏載體,目前研究多媒體文件的隱寫分析算法以及研究對其進行隱藏攻擊的算法越來越多,再加上多媒體文件種類眾多且相互之間的轉(zhuǎn)換較為頻繁,在轉(zhuǎn)換過程中很有可能會導致嵌入信息全部或部分的丟失。相對而言,PE格式的EXE文件結(jié)構盡管比較復雜,但格式相對單一,沒有不同文件格式間的相互轉(zhuǎn)化。故將PE格式的文件作為隱藏載體可較好的解決部分信息丟失的問題。目前以PE文件作為信息隱藏的載體的相關研究還較少,更鮮有相關商品化的軟件推出。
PE(Portable Executable)文件格式是Microsoft制定的一種文件標準。它是Win32環(huán)境自身所帶的執(zhí)行體文件格式。它由DOS部首、PE文件頭、節(jié)表、節(jié)數(shù)據(jù)、調(diào)試信息5部分組成。其總體層次分布[3]如圖1所示:

圖1 PE文件結(jié)構
經(jīng)分析,在PE格式文件中,有些成員變量的值不影響程序的正常加載和運行,還有一些未經(jīng)利用的空閑區(qū)域,它們都可以用來嵌入信息。經(jīng)總結(jié),PE文件中的冗余空間大致可有以下幾類:
1)改變其值不影響程序正常運行的一些成員變量;
2)PE文件頭和DOS部首之間的空閑區(qū)域;
3)磁盤偏移最小的節(jié)和PE文件頭之間的空閑區(qū)域;
4)PE文件的每個節(jié)中未被利用的空間;
5)文件末尾最后一個節(jié)除去實際占用的空間所剩下的空閑區(qū)域;
6)資源節(jié)中存在的4種冗余[5]。
AES即Advanced Encryption Standard,高級加密標準。是NIST(National Institute of Standards Technology)于1997年開始向世界范圍內(nèi)征集的加密算法,用于替代DES成為新一代的加密標準。這個加密算法是分組加密算法,信息的內(nèi)容是以128位長度的分組為加密單元,加密密匙長度有128,192和256位3種選擇,分別稱作AES-128、AES-192AES-256。下面提到的AES,如無特別聲明,專指FIPS-197中規(guī)定的AES算法。
AES算法的基本處理單元叫做字節(jié),它由8比特序列組成,被看成一個整體。在AES中,這些字節(jié)以有限域上的多項式來表示:

其中,bi(i≤i≤7)分別代表了一個字節(jié)的8個比特位。
AES的所有操作都是在一個稱作狀態(tài)矩陣的二維字節(jié)數(shù)組上進行的。該結(jié)構具有4個行,每行包括Nb個字節(jié),它的值是由分組長度除以32得到的。在AES算法中,輸入輸出分組和狀態(tài)矩陣的長度都是128比特,則Nb=4。密鑰K的長度為128、192、256比特,用Nk=4、6或者8來表示。加密或者解密函數(shù)需執(zhí)行的輪數(shù)取決于密鑰的長度。輪數(shù)用Nr表示,當Nk=4時,Nr=10;當Nk=6時,Nr=12;Nk=10時,Nr=14。
不管是AES的加密還是解密操作,都要反復用到輪函數(shù)操作。輪函數(shù)由4部分相對獨立的變換組成:
1)字節(jié)代換操作(SubBytes)。實際上是一個簡單的查表操作,AES定義了一個16×16的轉(zhuǎn)換表(S-box),通過查表狀態(tài)矩陣中的元素映射為一個新的字節(jié);
2)行移位操作(ShiftRow)。對狀態(tài)矩陣每行的元素進行不同偏移量的移位。其規(guī)則是:狀態(tài)矩陣第一行保持不變,第二、三、四行分別循環(huán)左移1個、2個、3個字節(jié);
3)列混淆操作(MixColumn)。它把狀態(tài)矩陣中的每一列當成一個在GF(28)上的多項式,然后乘以一個固定的多項式a( x),再對多項式(x4+1)取模。其中a( x)定義如下:

4)輪密鑰加操作(AddRoundKey)。輪密鑰加操作是將狀態(tài)矩陣中的元素同輪密鑰進行的簡單的異或運算。這里的輪密鑰是由用戶輸入的密鑰通過密鑰擴展后生成的,它同樣可以看作一個狀態(tài)矩陣。
開始加密時,首先將輸入按時間順序填入狀態(tài)矩陣,先進行一個初始的輪密鑰加操作,然后根據(jù)密鑰長度執(zhí)行相應的Nr次輪函數(shù)對狀態(tài)矩陣進行變換。其中最后一輪操作稍許不同,沒有列混淆操作。最終得到的狀態(tài)矩陣按順序?qū)⒃厝〕觯褪亲詈蟮拿芪摹U麄€加密過程可用偽代碼表示如下[4]:

AES算法的解密算法是加密算法的逆過程。它也要執(zhí)行輪函數(shù)變換,只不過這個輪函數(shù)的每一個組成變換都是加密過程的逆運算:“字節(jié)代換逆變換操作InvSubBytes()、行移位逆變換操作InvShiftRows()、列混淆逆變換操作InvMixColumns()、和輪密鑰加逆變換操作AddRoundKey()”等四個變換。
目前,流行的信息隱藏的一般模型如圖2所示:

圖2 信息隱藏的一般模型
隱藏過程:為加強整個系統(tǒng)的安全性,首先對消息M做加密或者置亂等預處理,這樣形成消息M1,然后用一個隱藏嵌入算法和密鑰Kl把預處理后的消息M,隱藏到載體C中,從而得到隱蔽載體S。
提取過程:用提取算法和密鑰K2從隱蔽載體S中提取消息M1,,然后使用相應的解密或重置等處理方法由M1恢復出真正的消息M。如果Kl=K2,那么可以說這個隱藏嵌入算法是對稱隱藏算法,否則稱這個算法為非對稱隱藏算法。
載體C可以是文本、聲音、圖像和視頻,隱藏嵌入算法可以是空域方法及變換域方法。
在我們的系統(tǒng)中,載體文件C采用PE文件,預處理中的加密算法采用AES算法。其加密和的流程圖如圖3。
信息的提取過程是嵌入過程的逆過程,采用提取算法將隱藏信息提取出來之后,再對其進行解密。

圖3 加密流程圖
在基于PE文件實現(xiàn)信息隱藏方案的基礎上,本文在VC6.O中進行模擬實現(xiàn)。本方案以Windows XP下的系統(tǒng)文件“freecell.exe”為例進行分析,在下圖4的“PE文件”中通過瀏覽讀取PE文件,程序會自動分析出該文件的結(jié)構信息。

圖4 PE文件分析后的系統(tǒng)界面
本文選用文本文件test.txt作為實驗用的隱藏文件,通過上圖的“導入文件”,程序要先對文本文件text.txt進行加密,然后嵌入到PE文件中,通過“導出文件”,可提出所隱藏的信息并對之進行解密。
運行隱藏信息之后的freecell.exe,可以看到,它可以正常運行,和隱藏信息之前的運行結(jié)果并無區(qū)別。這說明隱藏的信息不影響源文件的正常執(zhí)行。
在本模型中,應用了高級加密標準AES對隱藏的信息進行了預處理。相較DES算法,AES無論在速度還是在保密性方面都具有優(yōu)越性。
PE格式是當今個人電腦上最普及的文件格式之一,本文首先分析了Win32 PE文件的基本結(jié)構,分析結(jié)果表明了PE格式文件具有大量的冗余空間。在此基礎上,根據(jù)信息隱藏的一般模型,本文提出了基于PE文件的信息隱藏模型,模型中采用了AES對嵌入信息進行加密和解密,以進一步提高其安全性。經(jīng)試驗證明該模型可以保證信息的隱藏和提取,且嵌入后的載體文件可以正常運行,具有較好的隱藏效果。
[1]王炳錫,彭天強.信息隱藏技術[M].國防工業(yè)出版社,2007:1-2.
[2]王朔中,張新鵬,張開文.數(shù)字密寫和密寫分析[M].北京:清華大學出版社,2005,10-11.
[3]Microsoft Corporation.Microsoft Portable Exeeutable and Common Objeet File Format Specification,Revision6.0[EB/OL],1999,2.
[4]Ntional Institute of Standards and Technology(NIST).Advanced Encryption Standard(AES).Federal Information Processing Standards(FIPS) Publication 197,2001,11.
[5]徐曉靜,徐向陽,梁海華,黃友榮.PE文件資源節(jié)的信息隱藏研究與方案實現(xiàn)[J].計算機應用,2007,27(3):621-623.