APP下载

PDF中隐私数据的保护方法

2017-06-20程旋何成万

软件导刊 2017年4期
关键词:加解密

程旋+何成万

摘要: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.

(责任编辑:杜能钢)

猜你喜欢

加解密
基于FPGA 的AES 快速加解密模块软件设计
电子取证中常见数据加解密理论与方法研究
基于FPGA的LFSR异步加解密系统
IPSec VPN技术的原理与应用
IPTV直播系统中DRM解决方案的研究与设计