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