劉枳岑,徐 明
(揚(yáng)州大學(xué)信息工程學(xué)院,江蘇 揚(yáng)州 225127)
隨著科學(xué)技術(shù)的飛速發(fā)展,計(jì)算機(jī)在人們生活中的應(yīng)用越來越普遍,各單位頒布工作文件的方式也漸漸由傳統(tǒng)的紙質(zhì)文件印刷及分發(fā),轉(zhuǎn)變?yōu)殡娮游募魉托问絒1]。文件發(fā)布方式的革新意味著科技的進(jìn)步,但問題也隨之而來。一方面,文件在內(nèi)部流轉(zhuǎn)的過程中由多人經(jīng)手查閱,文件內(nèi)容容易被泄密,而泄露之后對于文件泄密過程的追蹤和相關(guān)人員的定責(zé)往往含糊不清、真?zhèn)坞y辨[2];另一方面,網(wǎng)絡(luò)技術(shù)的進(jìn)步也導(dǎo)致文件造假事件頻頻發(fā)生,網(wǎng)民隨意偽造相關(guān)單位文件,并發(fā)布到網(wǎng)絡(luò)上,最終引起軒然大波的案例屢見不鮮?;诋?dāng)今文件發(fā)布的現(xiàn)狀和對已發(fā)布文件確保真實(shí)性的識別要求,采用數(shù)字水印方式對文件加密以及實(shí)現(xiàn)對文件的動(dòng)態(tài)跟蹤和溯源,已經(jīng)成為文件安全發(fā)布和文件可靠傳遞的一種必備的重要手段。
數(shù)字水印技術(shù)是由信息隱藏技術(shù)發(fā)展而來的,它憑借不可感知性和魯棒性,被廣泛應(yīng)用于防偽溯源、版權(quán)保護(hù)、隱藏標(biāo)識、認(rèn)證和安全隱蔽通信領(lǐng)域[3]。利用數(shù)字水印隱蔽性強(qiáng)、不易被察覺的特點(diǎn),在文件發(fā)布或傳遞過程中,為每位用戶設(shè)計(jì)生成獨(dú)特的水印圖片,將多張水印圖片嵌入到發(fā)布的圖片文件中,最終形成一個(gè)具有預(yù)防圖片文件泄密、能追蹤管理文件流轉(zhuǎn)過程、具備文件防偽認(rèn)證功能的多重用戶數(shù)字水印系統(tǒng)。
數(shù)字水印技術(shù)最早出現(xiàn)在1993 年TIRKEL 等撰寫的《Electronic Watermark》文章中[3]。該思路一經(jīng)提出,因它在信息安全和經(jīng)濟(jì)上不可估量的地位,在學(xué)術(shù)論壇上風(fēng)靡一時(shí),從而引起了許多專業(yè)領(lǐng)域杰出人才的興趣,最終推動(dòng)相關(guān)技術(shù)的研究并取得了優(yōu)異的成果[4]。為了促進(jìn)國際學(xué)術(shù)界的交流,1996 年,在英國劍橋召開了第一屆國際信息隱藏學(xué)術(shù)研討會(huì)(International Information Hiding Workshop,IHW),標(biāo)志著信息隱藏學(xué)的誕生,直至2009 年,該研討會(huì)共舉辦了十一屆[4]。1999 年,國內(nèi)關(guān)于數(shù)字水印技術(shù)的研究開始發(fā)展起來,同年舉辦了全國信息隱藏學(xué)詩研討會(huì),作為信息安全領(lǐng)域的學(xué)術(shù)交流活動(dòng),一定意義上促進(jìn)了中國數(shù)字水印技術(shù)的研究與發(fā)展。
當(dāng)今數(shù)字水印處理方式主要采用單重顯式數(shù)字水印處理技術(shù),即只能對圖片文件實(shí)施一次水印處理,水印內(nèi)容清晰易讀。但在實(shí)際文件發(fā)布及傳閱過程中,多用戶閱讀文件更具普遍性和一般性。如何對圖片文件實(shí)施多重水印處理,最終能夠?qū)Χ嘀厮D片準(zhǔn)確單獨(dú)分離、逆向提取出每個(gè)用戶的個(gè)人信息;為了確保發(fā)布內(nèi)容安全可靠、發(fā)布單位的權(quán)威和可信度,文件的水印標(biāo)識手段應(yīng)更具隱蔽性和不可閱讀性等,這些正是目前水印處理面臨的技術(shù)難點(diǎn),也是本文解決問題的關(guān)鍵所在。
本文提出了一個(gè)基于多重用戶的數(shù)字水印系統(tǒng),經(jīng)過本系統(tǒng)處理后的文件具有以下特性:在文件內(nèi)容發(fā)生泄露時(shí),能夠識別出每個(gè)用戶的閱讀痕跡,從而對文件實(shí)施準(zhǔn)確追蹤并定責(zé);在文件實(shí)施水印處理后,可以通過對水印標(biāo)識的隱式處理和逆還原,辨別文件真?zhèn)巍S纱丝芍?,對文件進(jìn)行不露痕跡的跟蹤標(biāo)記是數(shù)字水印的核心,而多重?cái)?shù)字水印技術(shù)又是實(shí)現(xiàn)多重用戶系統(tǒng)的重中之重[3]。
本系統(tǒng)利用MATLAB 和Visual Studio 共同開發(fā),利用MATLAB 對圖像強(qiáng)大的處理功能設(shè)計(jì)水印模塊處理函數(shù),生成dll 動(dòng)態(tài)鏈接庫,嵌入ASP.NET 中供C#調(diào)用。通過Visual Studio 搭建系統(tǒng)網(wǎng)頁基本框架,在網(wǎng)頁運(yùn)行中,調(diào)用水印處理模塊的dll 動(dòng)態(tài)鏈接庫,從而形成基于多重用戶的數(shù)字水印系統(tǒng)。
本系統(tǒng)生成水印圖片時(shí)首先要求用戶輸入姓名,連接數(shù)據(jù)庫并獲取用戶信息,最終生成包含該用戶信息的水印圖片,然后將水印圖片嵌入文件中。圖片文件要求后綴名是jpg、png、bmp 的格式(單通道、三通道圖均可)。如需嵌入多位用戶水印,重復(fù)上述操作即可。
本系統(tǒng)提取用戶水印,要求輸入同樣是后綴名為jpg、png、bmp 的圖片文件(單通道圖),將圖片分塊提取水印,并將提取出的水印可視化。若提取出的水印與本系統(tǒng)設(shè)計(jì)的水印相同,則此圖片文件表示已發(fā)布文件,且圖片內(nèi)含有相應(yīng)的用戶信息,可記錄圖片分塊編號。
本系統(tǒng)水印信息提取時(shí),要求用戶輸入被嵌入圖片的分塊編號,系統(tǒng)自動(dòng)提取水印中被嵌入的用戶數(shù)字信息。系統(tǒng)功能設(shè)計(jì)流程如圖1 所示。
圖1 水印系統(tǒng)功能設(shè)計(jì)流程圖
1.2.1 水印圖片生成模塊
水印圖片中嵌入的信息包含用戶ID 和username(用戶中文姓名),連接SQL Server 數(shù)據(jù)庫獲取,用戶ID 為十進(jìn)制數(shù)字。這里規(guī)定用戶姓名為二/三/四個(gè)漢字(考慮復(fù)姓)。系統(tǒng)在生成水印時(shí),將ID 和username 轉(zhuǎn)化為80 位二進(jìn)制字符串生成水印圖片。
具體步驟為:①將十進(jìn)制數(shù)字ID 直接轉(zhuǎn)化為16位二進(jìn)制字符串(即用戶數(shù)容量為256×256);②username 在轉(zhuǎn)換為二進(jìn)制過程中,統(tǒng)一按照4 個(gè)漢字?jǐn)?shù)設(shè)置,若username 不足4 個(gè)漢字,用‘UU’(對應(yīng)的二進(jìn)制字符串為‘0101010101010101’)作為1個(gè)漢字?jǐn)?shù)補(bǔ)充,直至username 補(bǔ)齊至4 個(gè)漢字長度;③將統(tǒng)一長度的username 轉(zhuǎn)化為對應(yīng)ASCII 碼,再將ASCII 碼(4×2=8)轉(zhuǎn)化為對應(yīng)的64 位(8×8=64)二進(jìn)制字符串;④將得到的80 位二進(jìn)制字符串保存到對應(yīng)的二維數(shù)組中,利用二維離散余弦變換原理生成水印圖片,像素為(640,640)。
水印圖片生成代碼如下:
shading_img1=double(255*ones(640,640)); %水印分塊,用戶嵌入一個(gè)用戶信息
id_1=allinall; %用戶ID 和username 生成的二進(jìn)制字符串
for ii=1:80
ms=str2double(id_1(ii)); %判斷讀取的那個(gè)bit
for jj=1:80
blocktemp=255*ones(8,8); %每8*8 像素嵌入一個(gè)bit,這里直接每個(gè)bit 水印信息嵌入80 遍
bldct=dct2(blocktemp);
if ms==1
bldct(2,3)=50;
else
bldct(3,2)=50;
end
blockmark=idct2(bldct);
shading_img1(ii*8-7:ii*8,jj*8-7:jj*8)=blockmark;
end
end
shading_img1=uint8(shading_img1); %嵌入結(jié)果
水印樣例如圖2 所示。采用嵌入16 次、每8×8像素嵌入1 bit 的水印圖片樣例,效果圖與系統(tǒng)中嵌入80 次的水印效果圖類似;對應(yīng)嵌入二進(jìn)制字符串為0101010101010101。
圖2 水印樣例圖
1.2.2 多重?cái)?shù)字水印嵌入模塊
本系統(tǒng)中采用圖片切割分塊,每個(gè)分塊對應(yīng)用戶ID 編號,根據(jù)二維離散余弦變換原理在圖片分塊中分別嵌入單重?cái)?shù)字水印,從而實(shí)現(xiàn)多重水印嵌入。
具體步驟為:①用戶上傳載體圖片,系統(tǒng)自動(dòng)將水印圖片進(jìn)行二值化處理、載體圖片灰度化處理;②載體圖片像素設(shè)置標(biāo)準(zhǔn)為640×4×3,若載體圖片為RGB 圖片,則先轉(zhuǎn)化為灰度圖片再設(shè)置像素大小;③將載體圖片分割為3×3 個(gè)像素為(640×4、640×4)子塊(原則上可以分為N×N(N≤256))個(gè)子塊,這里為了程序運(yùn)行方便快捷,將N設(shè)置為3,即可嵌入用戶為9 位),給9 個(gè)子塊圖片編號(1-9);④獲取SQL Server 數(shù)據(jù)庫中要嵌入用戶ID(1-9),讀取用戶ID 對應(yīng)編號的子塊圖片,根據(jù)二維離散余弦變換原理嵌入水印,將嵌入水印的子塊塊圖片替代原子塊圖片;⑤將所有子塊圖片無損合并,生成嵌入多重?cái)?shù)字水印后的圖片。
載體圖片分塊代碼如下:
block1=1;
for i=0:(highsplit-1) %控制行
for j=0:(widesplit-1) %控制列
R1=imcrop(I,[i*wide+1 j*high+1 wide-1 high-1]); %( i*wide+1, j*high+1)為切割起點(diǎn),(wide-1,high-1)為切割范圍
imwrite(R1,['E:分塊嵌入 ' num2str(block1)'.jpg']); %按編號保存載體圖片分塊
block1=block1+1;
%disp(block1);
end
end
嵌入數(shù)字水印的代碼,代碼略。
1.2.3 多重?cái)?shù)字水印提取模塊
多重水印提取時(shí),將圖片文件再次切割分塊,檢測每一個(gè)分塊能否提取出用戶水印圖片,若含有嵌入水印的分塊,則提取文件為系統(tǒng)使用單位發(fā)布且根據(jù)提取出的水印信息能夠?qū)嵤┪募鬓D(zhuǎn)路徑反向追蹤。
具體步驟為:①用戶上傳嵌入多重?cái)?shù)字水印的圖片,系統(tǒng)讀取圖片;②在確保提取圖片像素(640×4×3、640×4×3)不變的情況下,再次將圖片分割為3×3 的子塊(640×4,640×4);③分別對每一個(gè)子塊提取水印,按編號保存提取出的水印圖像,若各子塊提取出的水印圖片有與本系統(tǒng)生成的水印圖片樣式一致的,則水印圖片提取成功且文件認(rèn)證成功;④記錄嵌入用戶水印的分塊編號,方便水印信息的提取。
1.2.4 水印信息提取模塊
水印信息提取時(shí),輸入已知的含有水印信息的圖片子塊編號,系統(tǒng)自動(dòng)讀取水印中含有的多個(gè)用戶信息。具體步驟如下:①用戶輸入含有水波紋水印的圖片編號;②系統(tǒng)按次序提取各水印圖片含有的信息,每張水印圖片可提取出80 位二進(jìn)制字符串;③取80位二進(jìn)制字符串的前16 位逆轉(zhuǎn)化為十進(jìn)制用戶ID,后64 位判斷含有漢字個(gè)數(shù)轉(zhuǎn)化為用戶姓名,從而得到完整的用戶信息。
本文的不可感知性評價(jià)主要是從用戶的主觀感受進(jìn)行評價(jià)的,主觀評價(jià)指的是參與觀察評價(jià)的人根據(jù)自身視覺感官等對嵌入水印后的圖片文件進(jìn)行評價(jià)。ITU-R BT.500 建議中對測試環(huán)境、測試素材、測試條件的范圍和錨定、觀察者的選擇等電視圖像提供了明確的評價(jià)過程和標(biāo)準(zhǔn)。其中有一個(gè)分級量表,采用的是5 級損傷量表,即:5(不可察覺的質(zhì)量損傷)、4(可察覺的質(zhì)量損傷,但不令人討厭)、3(稍微令人討厭的質(zhì)量損傷)、2(令人討厭的質(zhì)量損傷)和1(很令人討厭的質(zhì)量損傷)[5]。由于觀察者本身視力水平等身體素質(zhì)的差異,如果要得到一個(gè)客觀公正的評價(jià),就需要進(jìn)行大量的實(shí)驗(yàn)研究。
經(jīng)多個(gè)用戶使用評價(jià),本系統(tǒng)水印的不可感知性評價(jià)為4。
基于多重用戶數(shù)字水印系統(tǒng)在開發(fā)研究中,經(jīng)過長時(shí)間的背景調(diào)研、需求分析、系統(tǒng)設(shè)計(jì)、代碼編寫和系統(tǒng)測試,已經(jīng)取得了一定的進(jìn)展。目前,系統(tǒng)已實(shí)現(xiàn)水印圖片生成、不可感知多重水印的嵌入、圖片文件中多重?cái)?shù)字水印提取和水印圖片信息讀取4 個(gè)模塊功能,能夠通過嵌入數(shù)字水印對發(fā)布文件的用戶經(jīng)手過程進(jìn)行跟蹤管理及認(rèn)證,基本滿足使用單位的需求。