程旋+何成萬
摘要:PDF是一種可移植文檔,具有許多優(yōu)點(diǎn)。隨著PDF應(yīng)用的普及,PDF中隱私數(shù)據(jù)的保護(hù)也變得非常重要。針對(duì)PDF表單文本字段提出了數(shù)據(jù)加解密方法?;贏crobat工具,結(jié)合Javascript事件,調(diào)用加解密方法,實(shí)現(xiàn)加解密。對(duì)用戶在表單文本字段中的數(shù)據(jù)自動(dòng)加解密,順應(yīng)用戶操作習(xí)慣,在用戶保存時(shí)實(shí)施加密。為了方便用戶修改,在保存后對(duì)加密數(shù)據(jù)解密顯示,保證文件上的字段隱私數(shù)據(jù)明文不會(huì)保存在磁盤文件中。這種加密方式,可以在不改變加密文件格式的情況下有效防止文件被拷貝竊密。
關(guān)鍵詞:PDF;隱藏字段;加解密
中圖分類號(hào):TP309
文獻(xiàn)標(biāo)識(shí)碼:A
文章編號(hào):16727800(2017)004019403
0引言
PDF文檔格式與操作系統(tǒng)無關(guān),是一種可移植文檔,支持超鏈接、交互表單等功能[1]。這些特性使PDF文檔格式成為當(dāng)今的主流格式。PDF應(yīng)用越來越廣,文檔隱私數(shù)據(jù)信息保護(hù)需求也愈發(fā)強(qiáng)烈。 隱私數(shù)據(jù)是數(shù)據(jù)所有者不愿意披露的敏感信息,通常所說的隱私都指敏感數(shù)據(jù),如個(gè)人薪資、病人患病記錄、公司財(cái)務(wù)信息等。不同的數(shù)據(jù)以及數(shù)據(jù)所有者,隱私的定義會(huì)有差別。例如保守的病人會(huì)視疾病信息為隱私, 而開放的病人卻不視之為隱私[2]。對(duì)于隱私數(shù)據(jù)的保護(hù)有很多方法,如數(shù)據(jù)替換、數(shù)據(jù)加密等。 本文對(duì)PDF隱私保護(hù)方法進(jìn)行研究,對(duì)PDF表單文本數(shù)據(jù)字段進(jìn)行加解密,其加密算法不局限于PDF內(nèi)置的加密算法,并且將加密的時(shí)機(jī)選擇在用戶編輯過程中,用戶點(diǎn)擊保存就可實(shí)現(xiàn)表單文本字段數(shù)據(jù)的加密。在隱藏字段實(shí)現(xiàn)加解密,用戶感覺不到變化就可完成整個(gè)加解密過程。
1相關(guān)研究
傳統(tǒng)的信息安全領(lǐng)域研究在于防止外部入侵導(dǎo)致的數(shù)據(jù)破壞和泄密,主要技術(shù)有防火墻、防病毒產(chǎn)品和入侵檢測(cè)技術(shù)。近年來企業(yè)內(nèi)隱私信息泄露主要方式由外部入侵變?yōu)閮?nèi)部泄密。有關(guān)報(bào)告顯示,在隱私信息泄密中內(nèi)部泄密占八成。內(nèi)部泄密主要包括企業(yè)內(nèi)部人員對(duì)信息的泄密和盜竊[3],這種泄密形式隱蔽性、針對(duì)性強(qiáng),給企業(yè)造成了不少損失。隱私信息內(nèi)部泄密問題成為亟待解決的問題。
隱私信息防泄密的基礎(chǔ)工作是做好加密解密。加密通常指對(duì)文件采用文檔級(jí)加密方式,將整個(gè)文件流視為一個(gè)對(duì)象對(duì)其進(jìn)行加密[4-5]。這種加密方式會(huì)因?yàn)槠茐牧薖DF文件結(jié)構(gòu)導(dǎo)致打開異常。改進(jìn)方法是結(jié)構(gòu)級(jí)加密方法,基于PDF組織結(jié)構(gòu)只對(duì)文檔中顯示的內(nèi)容加密,對(duì)應(yīng)于流對(duì)象的關(guān)鍵字“stream”和“endstream”之間的字節(jié)流[6]。這種方法對(duì)顯示內(nèi)容整體進(jìn)行加密,在顯示內(nèi)容較多時(shí)會(huì)耗費(fèi)大量的時(shí)間,并且加密粒度太大,不夠靈活。 為解決上述問題,本文提出了細(xì)粒度加密——對(duì)用戶感興趣區(qū)域的加密方案。這個(gè)方案支持用戶對(duì)某一特定頁面內(nèi)的區(qū)域?qū)ο蠹用?,這個(gè)對(duì)象可能是文字也可能是圖片。通過鼠標(biāo)選定這個(gè)矩形區(qū)域,然后對(duì)矩形區(qū)域內(nèi)的PDF對(duì)象進(jìn)行加解密[7]。此方案縮小了加密粒度,用戶可靈活選擇自己想要保護(hù)的對(duì)象。 文件生成后通過人工特意為之加密稱為“靜態(tài)加密”,這樣的密文解密時(shí)會(huì)在磁盤留下明文文件,拷貝即可竊取。傳統(tǒng)的文檔保密方法有3種:①通過網(wǎng)絡(luò)協(xié)議及外設(shè)對(duì)文件進(jìn)行保護(hù);②手動(dòng)對(duì)文件和文件夾加密;③將需要保護(hù)的文檔轉(zhuǎn)換成另一種文件格式進(jìn)行保護(hù)。操作時(shí)明文文件會(huì)存在于磁盤,從而不可避免地造成內(nèi)部信息泄密,這是手動(dòng)加密和轉(zhuǎn)換格式共有的缺點(diǎn)。 近年來,動(dòng)態(tài)加解密技術(shù)逐步受到人們重視,它通過采取智能化思想和靈活的安全策略,在不改變用戶操作習(xí)慣和文件存儲(chǔ)格式的情況下進(jìn)行加解密。當(dāng)用戶使用時(shí),內(nèi)存中的文件是明文,而在硬盤上則以密文存儲(chǔ)[8]。
本文針對(duì)PDF的表單部分?jǐn)?shù)據(jù)進(jìn)行加解密,而不是將整個(gè)PDF文檔作為對(duì)象,是小粒度的加密。使用Acrobat javascript對(duì)用戶在表單文本字段編輯時(shí)進(jìn)行加密,實(shí)現(xiàn)了動(dòng)態(tài)加解密。在編輯過程中實(shí)現(xiàn)加密,完全符合用戶的操作習(xí)慣。加密之后解密回顯,方便用戶再次修改,整個(gè)過程從用戶角度來看就像沒有發(fā)生一樣,對(duì)用戶完全透明。加密也沒有改變文件格式,只是將對(duì)應(yīng)部分以密文形式存儲(chǔ),實(shí)現(xiàn)了動(dòng)態(tài)加密理念。
2隱私保護(hù)原理
2.1隱藏字段,保存事件
使用Acrobat javascript,通過filed對(duì)象對(duì)PDF表單部分操作對(duì)數(shù)據(jù)加解密。TextField文本字段是7種field對(duì)象之一,類似于html表單中的text控件。隱藏字段就是TextField文本字段display屬性為hidden,即顯示屬性為隱藏的字段,可以起到保存數(shù)據(jù)而不影響原文的作用。本文通過動(dòng)態(tài)生成隱藏字段,將加密生成的密文保存到其中,解密時(shí)從中讀取密文。從視覺上整個(gè)過程幾乎“透明”,感覺不到什么變化。 事件是javascript的核心之一,jacrobat javascript 的保存事件有 “將保存”和“已保存”兩個(gè)。對(duì)于事件觸發(fā)的時(shí)機(jī),“將保存”事件觸發(fā)的時(shí)機(jī)和“已保存”事件觸發(fā)的時(shí)機(jī)相同。保存有3種選項(xiàng):是、否、取消。當(dāng)且僅當(dāng)為“是”選項(xiàng)時(shí),觸發(fā)“將保存”和“已保存”,“將保存”在“已保存”之前,其它情況都不會(huì)觸發(fā)這兩個(gè)事件。 “將保存”事件在保存文件之前執(zhí)行,執(zhí)行的結(jié)果與文件相關(guān)的部分將會(huì)保存在磁盤文件中,而“已保存”事件觸發(fā)在文件保存之后,其結(jié)果不會(huì)保存在磁盤文件中,但會(huì)臨時(shí)保存在計(jì)算機(jī)內(nèi)存中。
2.2流程圖
如圖1所示,在用戶編輯PDF文檔點(diǎn)擊保存時(shí)觸發(fā)事件,將目標(biāo)表單文本字段部分的數(shù)據(jù)進(jìn)行加密,保存至隱藏字段,并且清空字段數(shù)據(jù)。再將密文從隱藏字段中加密出來顯示到目標(biāo)表單文本字段中。
2.3實(shí)現(xiàn)原理
對(duì)用戶輸入表單的文本字段數(shù)據(jù)實(shí)現(xiàn)加密,需要輸入的數(shù)據(jù)不會(huì)以明文的形式保存到文件中,這樣可防止敏感數(shù)據(jù)被拷貝竊取。當(dāng)用戶向表單輸入數(shù)據(jù)時(shí),在未保存之前的數(shù)據(jù)暫存在表單字段,并沒有保存到PDF文件中。當(dāng)用戶選擇保存時(shí),相應(yīng)的數(shù)據(jù)才會(huì)保存到文件中。 在用戶向表單文本字段輸入數(shù)據(jù),按下保存按鈕或鍵盤“Ctrl+S”時(shí),觸發(fā)保存動(dòng)作事件。保存事件分為兩個(gè)動(dòng)作事件:“將保存”事件和“已保存”事件?!皩⒈4妗笔录{(diào)用加密函數(shù)對(duì)表單字段的數(shù)據(jù)(明文)進(jìn)行加密,將加密的密文保存到對(duì)應(yīng)的隱藏字段中。然后將表單字段的value值設(shè)置為‘即空。之后文檔執(zhí)行保存,此時(shí)用戶輸入的表單字段保存到文件中的數(shù)據(jù)為‘,它的明文加密后保存在隱藏字段并保存到文件中,從而對(duì)數(shù)據(jù)進(jìn)行加密。 文檔的實(shí)際編輯過程很少一次完成,往往需要多次修改,這就需要將保存前輸入的信息再顯示回表單字段中。在“將保存”事件和保存之后,“已保存”事件被執(zhí)行,調(diào)用解密方法將保存在隱藏字段的密文解密,解密出來的明文設(shè)置到表單字段中。此時(shí)表單字段的明文只是保存在字段中,并沒有保存在文件中,文件中對(duì)應(yīng)表單字段的數(shù)據(jù)為‘。當(dāng)用戶重新修改后再保存,仍然執(zhí)行的是“將保存”事件,保存 “已保存”事件。最終表單字段部分保存的數(shù)據(jù)為‘,對(duì)應(yīng)隱藏字段保存的數(shù)據(jù)為最終確定的數(shù)據(jù)密文。
3隱私保護(hù)實(shí)現(xiàn)
3.1數(shù)據(jù)加解密實(shí)現(xiàn)
用戶按下保存,觸發(fā)“將保存”事件,文件保存,再觸發(fā)“已保存”事件。 “已保存”事件包括從隱藏字段取值解密,顯示解密結(jié)果到字段兩個(gè)動(dòng)作。下面以Text1為例說明加密字段過程。
3.1.1管理字段列表 遍歷字段,獲得文本字段name列表,用數(shù)組存儲(chǔ)。由文本字段的name有規(guī)則生成隱藏字段name列表,以文本字段name+“hfield”的形式定義隱藏字段的name值。用hash數(shù)組將文本字段與隱藏字段進(jìn)行關(guān)聯(lián),以隱藏字段的name為鍵、文本字段的name為值建立映射。
3.1.2加解密中實(shí)現(xiàn)保存事件(1)將保存事件。①隱藏字段的定義:
var ft=this.getField("Text1");//獲得Text1對(duì)象 var hfname=ft.name+"'hfield";//對(duì)應(yīng)的隱藏字段name屬性 var hfield=this.getField(hfname);//獲得隱藏字段對(duì)象 if(hfield==null){//創(chuàng)建隱藏字段 var myrect=this.getField("Text1").rect; hfield =this.addField(hfname, "text", this.pageNum, myrect); Hfield.dispaly=display.hidden;}
②對(duì)字段值加密,代碼如下:
var key=this.setkey(); //生成密鑰 var aftersfvalue=this.security(ft.value,key);//對(duì)字段值進(jìn)行加密
③將加密后的值保存至隱藏字段:
if(ft.value!=''&&ft.value!=null){hfield.value=aftersfvalue;}
④清空:
ft.value='';
(2)已保存事件。生成解密密鑰并對(duì)隱藏字段的值進(jìn)行解密:
var afterjfvalue=this.security(hfield.value,key); ft.value=afterjfvalue;
3.2方法測(cè)試及結(jié)果分析
用戶編輯結(jié)果如圖2所示,用戶保存后的字段視圖如圖3所示。圖3比圖2多出的兩個(gè)文本字段是前面字段的隱藏字段,隱藏字段在界面上不顯示,可以在字段界面上顯示信息。可以看出,左邊值為“張三豐”的字段,其隱藏字段的值顯示為其它字符碼,即為字段加密后的結(jié)果。另一個(gè)顯示電話號(hào)碼的字段同理。可以看出,用戶編輯并保存后,生成了隱藏字段并進(jìn)行了加密,加密結(jié)果保存在隱藏字段,然后將原字段的值進(jìn)行清空。最后顯示原字段的值,由于對(duì)隱藏字段的值進(jìn)〖LL〗行了加密,重新保存到了原字段。
4結(jié)語
本文方法能實(shí)現(xiàn)對(duì)隱私數(shù)據(jù)的動(dòng)態(tài)加解密,當(dāng)然也存在諸多不足,比如對(duì)于用隱藏字段的name來標(biāo)示它本身, name是允許重名的,雖然可以用特殊字符串命名name,但無法保證不出現(xiàn)其它name與其重復(fù),可能會(huì)出現(xiàn)一些無法預(yù)料的情況。該方法功能也過于單一,將在今后進(jìn)一步研究。
參考文獻(xiàn):
[1]張波. PDF文檔語義信息抽取研究[D].保定:河北大學(xué),2004.
[2]陳珂. 開放式環(huán)境下敏感數(shù)據(jù)安全的關(guān)鍵技術(shù)研究[D].杭州:浙江大學(xué),2007.
[3]梁菊華. Adobe PDF安全策略及實(shí)施[J]. 印刷,2010(3):4447.
[4]符凱,陳曉江,何路,等. 電子文檔保護(hù)系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J]. 微電子學(xué)與計(jì)算機(jī),2006(9):176178.
[5]李計(jì)勇. 面向PDF文檔對(duì)象的安全保護(hù)系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[D].哈爾濱:哈爾濱工業(yè)大學(xué),2009.
[6]張金輝,郭曉彪,符鑫. AES加密算法分析及其在信息安全中的應(yīng)用[J]. 信息網(wǎng)絡(luò)安全,2011(5):3133.
[7]高蒙,范磊,李建華. 基于PDF文檔保護(hù)系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J]. 信息安全與通信保密,2008(3):6971.
[8]蘇晴,李永珍. 基于訪問控制的隱私保護(hù)方法的研究[J]. 延邊大學(xué)學(xué)報(bào):自然科學(xué)版,2016(1):6974.
(責(zé)任編輯:杜能鋼)