郭 聰,馬 強(qiáng),張子劍
(國家氣象信息中心,北京 100081)
隨著技術(shù)的不斷進(jìn)步,信息媒體的數(shù)字化為信息的提取和存儲帶來了極大便利。數(shù)據(jù)的交換和傳輸簡單給共享數(shù)據(jù)的信息安全防護(hù)、知識產(chǎn)權(quán)保護(hù)和數(shù)據(jù)認(rèn)證取證帶來困難,亟需采取有效措施予以解決。氣象數(shù)據(jù)蘊(yùn)含豐富的應(yīng)用和研究價(jià)值,同時氣象服務(wù)需求不斷增加。氣象部門響應(yīng)政府號召,采用多種方式對外提供氣象資源和數(shù)據(jù)服務(wù),但筆者發(fā)現(xiàn),當(dāng)數(shù)據(jù)共享給授權(quán)者后,無法及時采取有效的技術(shù)手段阻止非授權(quán)用戶的非法數(shù)據(jù)濫用、泄露等問題。這些給數(shù)據(jù)的管理和安全防護(hù)帶來極大挑戰(zhàn)。
信息安全隨著技術(shù)的不斷發(fā)展,受到越來越多研究者的青睞,數(shù)字水印已成為近年來信息安全領(lǐng)域關(guān)注的熱點(diǎn)[1-6]。數(shù)字水印中的隱寫技術(shù)是一種可以將秘密信息在不損壞載體質(zhì)量的情況下,以用戶不知情的形式嵌入到數(shù)字媒介,從而為數(shù)據(jù)提供安全標(biāo)記來保護(hù)數(shù)據(jù)安全的技術(shù)。由于其隱蔽不易被發(fā)現(xiàn),信息可以在開放的環(huán)境中安全傳輸而不易被影響。目前,隱寫技術(shù)的經(jīng)典算法——空域算法[7],應(yīng)用十分廣泛。它通過將必要信息嵌入到隨機(jī)選擇的圖像點(diǎn)中最不重要的像素位(least significant bits,LSB)上,來保證嵌入的數(shù)字標(biāo)記的不可見,但研究者通過分析發(fā)現(xiàn),該方案技術(shù)魯棒性不高。經(jīng)典變換域算法應(yīng)用也十分廣泛,主要通過擴(kuò)展頻譜通信技術(shù)Patchwork算法,對像素亮度進(jìn)行調(diào)整從而加入必要用戶信息,從而保護(hù)數(shù)據(jù)安全。這兩類算法雖然較易實(shí)現(xiàn),但能夠添加的信息十分有限,且沒有將圖像格式和文本格式同時考慮保護(hù)的嘗試。根據(jù)筆者前期調(diào)研分析,氣象數(shù)據(jù)的數(shù)據(jù)存量大,數(shù)據(jù)種類繁多,文本類數(shù)據(jù)和圖片類數(shù)據(jù)又尤其重要,因此需要一種相應(yīng)的數(shù)據(jù)隱寫保護(hù)技術(shù),以保護(hù)氣象數(shù)據(jù)的安全。
基于上述考慮,提出了一種針對不同類型氣象數(shù)據(jù)的有效信息隱寫技術(shù)添加方案——INVIEN。該方案可針對不同氣象數(shù)據(jù)的特點(diǎn),在數(shù)據(jù)的不同位置添加隱形的數(shù)據(jù)授權(quán)使用信息。當(dāng)數(shù)據(jù)共享服務(wù)后,可通過對數(shù)據(jù)中數(shù)字水印[8]的鑒定和分析來核實(shí)數(shù)據(jù)所有者信息,從而為氣象數(shù)據(jù)的版權(quán)保護(hù)和鑒別提供依據(jù),有利于保護(hù)氣象數(shù)據(jù)的數(shù)據(jù)安全。
文中主要貢獻(xiàn)如下:提出了一種新穎的隱寫方案,該方案復(fù)用性強(qiáng),適用于大數(shù)據(jù)量數(shù)據(jù)的使用;基于密碼學(xué)的數(shù)字簽名技術(shù),能夠?qū)η度胄畔⑻峁┻M(jìn)一步的數(shù)據(jù)完整性保護(hù);增加了對嵌入信息完整性的自定義校驗(yàn)CRC技術(shù)[9-10],能夠有效保護(hù)數(shù)據(jù)傳輸過程中的數(shù)據(jù)安全。
據(jù)筆者了解,該方案是第一個針對批量氣象數(shù)據(jù)進(jìn)行數(shù)字標(biāo)記添加的行業(yè)用戶。通過對批量數(shù)據(jù)的集中多維度系統(tǒng)測試,結(jié)果表明該方案能夠?qū)Σ煌愋偷臄?shù)據(jù)進(jìn)行有效隱寫水印添加,并能協(xié)助鑒別已共享數(shù)據(jù)的數(shù)據(jù)所有者權(quán)益。
本節(jié)主要介紹系統(tǒng)模型,該系統(tǒng)模型基于數(shù)據(jù)隱寫數(shù)字水印不可見加密方法,構(gòu)建并設(shè)計(jì)了文中方案。
文中設(shè)計(jì)的系統(tǒng)模型INVIEN包含兩個主體:用戶和服務(wù)器。該模型主要針對氣象數(shù)據(jù)中最常見的兩種數(shù)據(jù)格式PNG及TXT進(jìn)行保護(hù)。用戶需要將加密的數(shù)據(jù)提供給服務(wù)器,服務(wù)器可以批量完成對不同格式的用戶信息的隱寫添加。
加密方案可表示為:
π=(QueryEn,QueryDe)
Data←QueryEn:提交加密查詢請求算法,服務(wù)器返回加密后的數(shù)據(jù)結(jié)果Data。
K←QueryDe:提交解密查詢請求算法,服務(wù)器返回插入數(shù)據(jù)中的水印信息K。
系統(tǒng)模型如圖1所示。
圖1 系統(tǒng)模型
1.1.1 用 戶
用戶,即數(shù)據(jù)屬主,負(fù)責(zé)向系統(tǒng)提出請求并提供需要加密的數(shù)據(jù)或請求對已加密數(shù)據(jù)進(jìn)行解密,并接收從系統(tǒng)返回的結(jié)果。
1.1.2 服務(wù)器
接受用戶的加密請求或解密請求。對用戶提交的批量文件,根據(jù)不同類型采用不同模塊接收請求。對加密請求返回加密后的數(shù)據(jù),解密請求返回加密水印中的信息。
INVIEN系統(tǒng)由兩大部分構(gòu)成:對PNG格式的加密;對TXT格式的加密。其中用到了多項(xiàng)技術(shù),下面對系統(tǒng)中使用到的技術(shù)進(jìn)行簡單介紹。
chunk的構(gòu)建描述如下:
這部分是關(guān)鍵,這里單獨(dú)著重介紹。
針對插入的信息,設(shè)計(jì)了一個簡單的加密消息結(jié)構(gòu)chunk,約定消息長度40 Byte,加密內(nèi)容在28 Byte以內(nèi)。28 Byte能滿足一般需求,如果需要擴(kuò)大,可以后續(xù)修改。值得注意的是,還在結(jié)構(gòu)中加入了CRC校驗(yàn)[9]防止錯誤出現(xiàn)。
在此基礎(chǔ)上,在chunk里基于MD5和RSA的簽名結(jié)構(gòu)對消息進(jìn)行保護(hù)。加密過程如下:
首先生成公鑰、私鑰并保存,長度均為512位。
(PK,SK)
用戶信息定義為userinfo,使用MD5對userinfo摘要,摘要信息定義為md5_data。
md5_data=md5(uerinfo)
簽名用RSA對md5_data加密,得到簽名sign_ta。
sign_data=RSA(md5_data)
最后將userinfo和sign_data進(jìn)行拼接,得到chunk_data,最后包裝為chunk寫入文件。
chunk=length+chunkname+CRC32(chunk_ data(userinfo+sign_data)+chunkname)+(chunk_data(userinfo+sign_data)+chunkname)加密消息結(jié)構(gòu)如圖2所示。
圖2 加密消息結(jié)構(gòu)
解密過程相對,將加密過程倒序執(zhí)行即可。先拆解chunk_data得到userinfo,再用md5得到摘要,然后用RSA對sign_data進(jìn)行解密,并與前面摘要比對,相同則驗(yàn)證通過,獲得用戶信息。
設(shè)計(jì)目標(biāo)是實(shí)現(xiàn)一個加密系統(tǒng),能夠?qū)NG及TXT格式的批量數(shù)據(jù)進(jìn)行加密。加密內(nèi)容可以自定義,并且對加密數(shù)據(jù)進(jìn)行簽名,能夠進(jìn)一步保護(hù)數(shù)據(jù)的安全。如果發(fā)生數(shù)據(jù)泄露等問題,可以通過鑒別數(shù)據(jù)的信息進(jìn)行追蹤溯源。
通過對PNG文件進(jìn)行解析,增加包含加密信息的文件塊程序模塊。這里提出了兩種加密思路,其一是文件頭加密技術(shù)[11-12],另一種是像素點(diǎn)加工加密。
根據(jù)已知的PNG文件格式,可知PNG文件頭位置總是由位固定的字節(jié)來描述的。其中第一個字節(jié)為了避免某些軟件將PNG文件誤認(rèn)為文本文件來處理,值0x89超出了ASCII字符的范圍用來標(biāo)識。文件中剩余的部分由3個以上的PNG的數(shù)據(jù)塊(chunk)按照特定的順序組成,因此,一個標(biāo)準(zhǔn)的PNG文件結(jié)構(gòu)由文件標(biāo)識及眾多chunk構(gòu)成。
PNG定義了兩種類型的數(shù)據(jù)塊,一種稱為關(guān)鍵數(shù)據(jù)塊(critical chunk),這是標(biāo)準(zhǔn)的數(shù)據(jù)塊,另一種叫做輔助數(shù)據(jù)塊(ancillary chunks),這是可選的數(shù)據(jù)塊。關(guān)鍵數(shù)據(jù)塊定義了4個標(biāo)準(zhǔn)數(shù)據(jù)塊,每個PNG文件都必須包含它們,PNG讀寫軟件也都必須要支持這些數(shù)據(jù)塊。雖然PNG文件規(guī)范沒有要求PNG編譯碼器對可選數(shù)據(jù)塊進(jìn)行編碼和譯碼,但規(guī)范提倡支持可選數(shù)據(jù)塊。
文中提出的第一種加密思路—文件頭加密,就是對PNG圖片的文件頭進(jìn)行隱寫,通過加入自己構(gòu)建的信息塊[13-15](chunk),達(dá)到加密效果。將加密信息封裝成PNG結(jié)構(gòu)的信息塊,加入該chunk后對PNG文件對的數(shù)據(jù)塊重新排序?qū)懭胛募?/p>
用算法1總結(jié)這個過程。
算法1:PNG文件頭加密請求QueryEn。
輸入:PNG格式文件,自定義加密信息;
輸出:加入加密信息后的PNG文件。
(1)將待加密信息封裝成固定格式的數(shù)據(jù)塊;
(2)判斷文件的可加密容量是否夠用,不夠則拋出異常;
(3)按字節(jié)讀入圖片,將圖片劃分為獨(dú)立的數(shù)據(jù)塊(PngChunk);
(4)將現(xiàn)有的數(shù)據(jù)塊(含加密信息塊),按照特定的順序重新寫入文件,并返回加密成功文件ΔData。
第二種加密思路是像素點(diǎn)加工加密[16-17],用java語言中的image類對PNG圖片的像素點(diǎn)rgb值進(jìn)行讀寫,將加密信息每3 Byte組成一個像素點(diǎn),寫入到圖片中,實(shí)現(xiàn)嵌入有意義的信息,同時不影響PNG的使用,保護(hù)了文件的完整性,用對圖片最小的破壞,換取最大的加密效果。
算法2:像素點(diǎn)加密請求QueryEn[18-20]。
輸入:PNG格式文件,自定義加密信息;
輸出:加入加密信息后的PNG文件。
(1)將待加密信息封裝成固定格式的數(shù)據(jù)塊;
(2)判斷文件的可加密容量是否夠用,不夠則拋出異常;
(3)按像素讀入圖片,按特定的間隔取出對應(yīng)的像素;
(4)將加密數(shù)據(jù)塊按3 Byte每組進(jìn)行劃分,對每一組字節(jié),前面添加0xff,然后轉(zhuǎn)換成32 bit的int;
(5)將int值寫入前面取出的像素值中,然后將像素重新寫回文件,并返回加密成功文件ΔData。
文本文件是基于字符編碼的文件,常見的編碼有ASCII、UNICODE等等。首先,讀取文件上的二進(jìn)制比特流,然后按照所選擇的解碼方式來解碼,最后顯示結(jié)果。一般來說,選取ASCII碼作為解碼形式。
根據(jù)文本文件的特點(diǎn),構(gòu)建了兩種加密思路。第一種,在TXT文件的每行的行尾加密[21-22],追加一定位數(shù)的不可見字符串(如0x00和0x20),該字符串由加密信息的二進(jìn)制編碼而來。第二種,在文本的末尾追加[23-24]一定行數(shù)的不可見字符串,該字符串由加密信息的二進(jìn)制編碼而來。
算法3:行尾加密算法QueryEn。
輸入:TXT格式文件及加密信息K;
輸出:加密后的TXT文件。
(1)按字節(jié)讀入圖片,并分割為獨(dú)立的數(shù)據(jù)塊;
(2)匹配數(shù)據(jù)塊的塊名,匹配成功則取出這個數(shù)據(jù)塊;
(3)將封裝好的加密信息轉(zhuǎn)換成對應(yīng)的2進(jìn)制字符串,并用特定字符(0x00和0x20)進(jìn)行編碼;
(4)按行讀入文本文件,在行尾追加一定數(shù)量的加密字符后寫回文件中。
算法4:文本末尾加密算法QueryEn。
輸入:TXT格式文件及加密信息K;
輸出:加密后的TXT文件。
(1)按字節(jié)讀入圖片,并分割為獨(dú)立的數(shù)據(jù)塊;
(2)匹配數(shù)據(jù)塊的塊名,匹配成功則取出這個數(shù)據(jù)塊;
(3)將封裝好的加密信息轉(zhuǎn)換成對應(yīng)的2進(jìn)制字符串,并用特定字符(0x00和0x20)進(jìn)行編碼;
(4)在文本文件末尾追加一定行數(shù)的加密字符后寫回文件。
采用對文本每行行尾加密的方法時,對文本的行數(shù)有一定的要求。目前定的標(biāo)準(zhǔn)是,每行行尾追加5 Byte長的二進(jìn)制化的消息,用的是0x00和0x20編碼,顯示為空格,也就是說,行數(shù)要在8行以上。采用對文本最后追加消息加密的方法時,對每行的加密位數(shù)限制為100 bits。上述信息長度標(biāo)準(zhǔn)都可以在程序中直接修改,不會對加密系統(tǒng)整體造成影響。
對TXT文件,同樣構(gòu)建了解密算法,方便對泄露文件追蹤泄密源。
算法5:解密TXT文件算法QueryDe。
輸入:加密過的TXT文件ΔData;
輸出:加密信息K。
行尾解密:
(1)按行讀入文本文件,從末尾開始,取出指定數(shù)目的字符;
(2)將取得的字符進(jìn)行拼接,轉(zhuǎn)換成二進(jìn)制字符,再轉(zhuǎn)換成特定格式的數(shù)據(jù)塊;
(3)對數(shù)據(jù)塊內(nèi)容進(jìn)行校驗(yàn),每異常就取出加密信息。
文件末尾解密:
(1)直接讀取文件末尾的加密信息,以空換行為分割符;
(2)將取得的加密信息進(jìn)行拼接,轉(zhuǎn)換成二進(jìn)制字符,再轉(zhuǎn)換成特定格式的數(shù)據(jù)塊;
(3)對數(shù)據(jù)塊內(nèi)容進(jìn)行校驗(yàn),每異常就取出加密信息。
根據(jù)上述INVIEN系統(tǒng)的構(gòu)造描述,對該方案成功地進(jìn)行了實(shí)現(xiàn)。該方案主要包括初始化,輸入,加密和解密四個過程。
在PngOperation模塊中,采用了文件頭加密和像素點(diǎn)加密兩種實(shí)現(xiàn)方法。
在文件頭加密方法和像素點(diǎn)加密方法中,按照等比數(shù)列分布,分別取了1 M,2 M,4 M,8 M,16 M,32 M,64 M,128 M,256 M數(shù)據(jù)量大小的PNG圖片文件進(jìn)行測試。
顯然,像素點(diǎn)加密和文件頭加密都是針對PNG格式的圖片進(jìn)行處理的,但在處理的速度和性能上,還是存在一定差距的。故在多次計(jì)算,取其平均值后,可以看到該方案針對批量文件的去尾平均時間如圖3所示。
圖3 PngOperation模塊兩種不同隱寫方式的加密解密時間曲線
圖3中,pic_only_encrypt(Pixel)曲線表示的是像素點(diǎn)加密方法,pic_only_encrypt(Head)曲線表示的是文件頭加密方法,pic_only_decrypt(Head)曲線表示的是文件頭解密,pic_only_decrypt(Pixel)曲線表示的是像素點(diǎn)解密。顯而易見,pic_only_encrypt(Pixel)與其他三條曲線差異最大,且接近參考的指數(shù)曲線。換句話說,像素點(diǎn)加密方法的時間是隨著圖片文件的增加呈指數(shù)增長的,而文件頭加密和兩者所對應(yīng)的解密方法所需的時間都是緩慢增長的。
在TXTOperation模塊中,采用了行尾加密和文本末尾追加加密兩種實(shí)現(xiàn)方法。
在行尾加密方法和文本末尾追加加密方法中,考慮到TXT文本文件小的可以只有幾k,而文件大的有幾百M(fèi)。因此,對小文件和大文件分別討論,并按照等比數(shù)列分布,分別取了由1個,2個,4個,8個,16個,32個,64個,128個加密的氣象文本數(shù)據(jù)樣本構(gòu)成的文件進(jìn)行測試。在多次計(jì)算取其平均值后,可以看到該方案針對批量文件的去尾平均時間如圖4和圖5所示。
圖4 TXTOperation模塊在小文本文件下的兩種不同隱寫方式的加密解密時間曲線
圖5 TXTOperation模塊在大文本文件下的兩種不同隱寫方式的加密解密時間曲線
在圖4和圖5中,text_only_encrypt(End)曲線表示的是文本末尾追加加密方法,text_only_encrypt(Line)曲線表示的是行尾加密方法,text_only_decrypt(Line)曲線表示的是行尾解密,text_only_decrypt(End)曲線表示的是文本末尾追加解密。
由圖4可知,針對小文本文件,無論是行尾加密方法,還是文本末尾追加加密方法,其加密時間都是隨著文本數(shù)量的增加呈指數(shù)增長的,其對應(yīng)的解密時間也同樣呈指數(shù)增長。但總體說來,行尾加密的時間大于文本末尾追加加密的時間,那么相反的,行尾解密的時間小于文本末尾追加解密的時間。
由圖5可知,針對大文本文件,曲線比較像PngOperation模塊中,圖3對應(yīng)的兩種方法加解密的時間走勢。具體分析,text_only_encrypt(End)與其他三條曲線差異最大,且接近參考的指數(shù)曲線。換句話說,文本末尾追加加密方法的時間是隨著文本文件個數(shù)的增加呈指數(shù)增長的,而行尾加密和兩者所對應(yīng)的解密方法所需的時間都是緩慢增長的。
3.3.1 PngOperation模塊
可以看到,兩種方案的解密速度都是很快的,但是加密時間卻差異很大。隨著圖片文件數(shù)據(jù)量的不斷增大,像素點(diǎn)加密的時間開始急劇增加,而文件頭加密所需之間仍只是接近線性增長。
總的說來,針對PNG的圖片文件而言,文件頭加密是相對較快的,尤其是對于圖片文件較大的時候。但是,也不得不考慮整個隱寫算法的安全性,從這點(diǎn)出發(fā),文件頭加密的魯棒性能就較差了,加密的用戶信息很容易被去除。而像素點(diǎn)加密的算法,雖然可能會造成對原始數(shù)據(jù)的輕微改動,但是隱寫的用戶信息很難察覺,并且也并不容易去除。
3.3.2 TXTOperation模塊
可以看到,兩種方案的解密速度相較于對應(yīng)的加密速度更快,并且兩種方案的加密時間也相差無幾。
在PngOperation模塊性能與測試中,已經(jīng)看到了像素點(diǎn)加密和文件頭加密在一定情況下,是有顯著區(qū)別的。那么針對TXT文本文件的兩種方法,一個是在行尾加密,一個是在文本末尾追加加密,為什么加密的時間也相差無幾,其實(shí)就是因?yàn)檫@兩種方法本質(zhì)加密的原理是一樣的,只是隱寫嵌入加密的用戶信息時,嵌入位置不一樣而已。
所以,總的說來,針對TXT的文本文件而言,兩種方法的效率是差不多的。文中方法是將加密的用戶信息轉(zhuǎn)成二進(jìn)制使用winhex工具查看,并追加使用0x00和0x20構(gòu)成的一定位數(shù)的不可見字符串構(gòu)成,因此行尾追加的方法會比文本末尾追加的方法的魯棒性和安全性更好,所以優(yōu)先考慮行尾追加方法。但由于文本文件沒有固定的格式,若原始的文本文件內(nèi)容很少,行數(shù)也只有幾行,那么行尾追加的方法是不能將所有經(jīng)過加密的用戶信息成功嵌入的。因此,這時直接在文本末尾追加完整的經(jīng)過加密的用戶信息,就不用受行數(shù)約束。
該課題主要基于隱寫技術(shù)進(jìn)行研究,通過搭建氣象數(shù)據(jù)源版權(quán)保護(hù)系統(tǒng)平臺,可以對氣象數(shù)據(jù)添加隱寫用戶信息。當(dāng)數(shù)據(jù)在開放的網(wǎng)絡(luò)環(huán)境下共享后,如發(fā)現(xiàn)違規(guī)操作和數(shù)據(jù)泄露情況時,通過該系統(tǒng)可以對氣象數(shù)據(jù)對外共享后的數(shù)據(jù)鑒別提供支撐依據(jù),從而實(shí)現(xiàn)對氣象數(shù)據(jù)的版權(quán)保護(hù)。