程旋+何成萬


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