:一是防范未经授权的用1(cPAcrobat插件在PDF安全中的研究与应用周国祥吴自文(合肥工业大学计算机与信息学院合肥230009)wzw6513600@126.om)摘要对于PDF文档保护,用户通常只要输入密码就可以打开加密的PDF文件,安全性不高.为了增强保护,通过了解PDF结构和探究Acrobat加、解密,得出PDF解密原理.在此基础上,采用加密与用户授权二重保护,并制作解密插件来完成授权认证与密钥生成.用户安装解密插件后,避免了每次打开文件时都要输入密码,使得PDF文档版权保护更加安全、便捷.关键词PDF;数字版权系统;加密;解密;插件中图法分类号TP309.7随着计算机和互联网的越来越普及,在电子政务网和企业内部网中,许多文件都以电子文档进行分发和存储,比如使用PDF的形式.由于电子文档易于复制,且复制以后不会留任何痕迹,容易造成敏感信息的泄密,给信息安全带来严重的威胁,这也是内部网所面临的最大安全风险.对于电子文档安全,往是无能为力的.DF文档安全保护也面临以上两个问题[2],对它的保护大多采用加密和用户授权组合的方式,在阅读的时候对阅读器的控制有两种方式:一种是自己开发阅读器,但是开发难度大、周期长,且不易扩展;另一种方式是制作Acrobat控制插件,这种方式要相应的软件接口支持.需要解决两方面的问题[]本文旨在把插件技术引用到PDF电子文档保户对电子文档的非法获取和使用;二是防范合法用户非法复制和传播电子文档造成的敏感信息泄密.传统的信息安全技术大都是针对前者的,对后者往护中去,在阅读自定义安全句柄加密的PDF文档时,采用解密插件进行授权认证与密钥生成.这样不会产生临时文件,文件解密直接在内存中进行数据A2(PPFi(ci31daidArtl23转换,不会在机器上存有文档副本,采取有效的用户授权限制,如文档期限、网络限制、主机特征绑定等,从而达到合法用户也不能复制和传播电子文档.一方面提高PDF文档的安全性,另一方面使得安全保护更简单,更易于使用,让用户在使用过程中感觉不到PDF文档是受到保护的.1PDF文档说明1.Acrobat简介Acrobat是Adobe公司开发用来制作、编辑和阅读PDF文件的一款软件.Adobecrobat软件可以使商业人士能够可靠地创建、合并和控制AdobePDF文档,以便轻松且更加安全地进行分发、协作和数据收集.它提供了相应的编程接口,授权允许用户使用Adobe公司发布的AdobeLibrarySDK定制Acrobat的插件,包括加、解密.用户可以根据自身需要制作相应的Acrobat插件,完成所需功能.1.PDF文档组织结构PDFportabledocumentformat)文件格式是Adobe公司开发的电子文件格式.PDF电子文档的语法从以下4个元素来考虑最好理解[3]:1)对象.一个PDF文档是由一些基本的数据类型的集合构成的数据结构,这些基本的数据类型就是对象.2)文件结构.DF文件结构定义了对象是如何在文件里存储的,如何获得对象,以及如何更新对象,而这一结构是独立于对象的.3)文档结构.DF的文档结构定义了基本数据类型是如何表示PDF文档的要素的.例如如何表示页面,如何表示字体(ont),如何表示Annotaton.4)内容流.一个PDF内容流包含了一系列的组件用来描述页面或者其他图实体graphisentty)的表示.这些组件和对象不是同一概念,当然也能用对象来表示.PDF文档的结构可以用以上4个元素表示,如图1所示:图1PDF的语法结构1.PDF加密与解密对PDF文档保护时,总的来说有两种加密方式:一是对整个PDF文件加密,二是对其中的内容流加密.对应的解密也就有两种,本文是针对内容流加密PDF文档,引入插件技术,由插件自动完成授权与密钥生成.从这里也可以看出,插件并不是直接用来解密的,解密的工作是由Acrobat完成的,但是授权认证与密钥生成是由插件来处理.2PDF文档解密插件2.插件简介插件是一种遵循统一的预定义接口规范编写出来的程序,应用程序在运行时通过接口规范对插件进行调用,以扩展应用程序的功能[4-5].插件程序一般默认的是以.l结尾,而AdobeAcrobat的插件扩展名是.p而不是.l.当Adobecoba或Reader启动时,它们会自动检索系统的\ProgramFies\Adobe\Acrobat\plug-in目录、定位和载入插件.2.插件的系统结构插件系统结构如图2所示,解密插件有两个功能,分别是授权认证与密钥生成.认证成功后,插件生成解密密钥,然后由Acrobat进行解密.图2解密插件的系统结构从图2可以看出,插件一方面从PDF文档中提取加密信息,一方面从本地系统获取系统信息,这些信息将会用于授权认证的数据.2.插件工作流程Acrobat在PDF文件的尾部搜索加密关键字以判断文档是否被加密过,如果没有关键字“Encrypt”,Acrobat就立即打开文档.如果有关键字,说明文档是受保护的,它对应着一个加密字典.Acrobat在过滤器中取出相应的数据来判断使用了何种安全句柄.然后再从插件中匹配安全句柄,如果1rt:lic:Sst没有找到相匹配的安全句柄,不打开PDF文档.如果有相匹配的安全句柄,调用对应的插件进行以下两个处理:(如何将PDF文档转换成word文档)1)提取授权认证与加密信息并进行解密;2)从用户当前系统环境提取系统和当前网络信息.基于以上两个方面的数据,插件进行授权认证,一旦当前用户认证成功成为合法的授权用户,插件就会生成解密密钥,交于Acrobat解密文档;如果不成功,给出相应的说明,提示用户下一步的操作.3解密插件的实现3.插件编程解密插件是由Acrobat自动调用来完成授权认证与密钥生成的,它是针对某种特定的PDF加密文档,也可以说一个插件对应着一个安全句柄.这就要求Acrobat在打开加密文档时能够依据文档内的句柄找到插件,所以插件里注册的安全句柄要和文档中的句柄名称一样.(怎么把PDF转换成word)针对自定义安全句柄的加密方法,首先新建一个Acoba的VC++插件工程,命名为HfutSecHander,添加相应的头文件和PIMan.文件,完成这些,就成功制作了一个空的插件,此时运行程序不会执行任何操作,要想它能够完成授权认证与生成密钥,还要在工程里添加一个安全句柄,并注册安全句柄的名字为HFUT:ecHandler,它与加密的安全句柄相同,再依次添加安全句柄的回调函数完成相应的功能[6,8]:(怎么把PDF转换成word)1)GetAuthDataExProc()此函数用来创建和填充授权信息,如果用户是授权的,此函数返回true,并通过参数authData传递一个结果给AuthorizeExProc.如果不是授权的返回fale,并给出相应的提示.2)AuthorizeExProc()此函数实现授权功能,授权当前用户是否能打开文档,拥有哪些操作权限,操作权限包括内容复制、更改文档、打印、注释,签名等.授权成功就返回PDPermReqGranted,否则返回PDPermReqDenied.3)NewSecuriyDataProc()安全句柄使用此回调函数来提取加密信息与授权信息,比如:允许的IP地址段、文档时间期限、MAC地址以及当前文档的操作权限等,并把他们存入对应的变量中,以便授权认证时使用.提取tk26772PDF文档中某个字典里元素的值用函数CosObjCosDictGetKeyString(CosObjdict,conschar*key),它返回的是CosObj对象,ey是对应字典元素的Name.4)NewCryptDataExProc()此函数生成RC4算法的密钥去进行加密或解密.在本解密插件中当授权认证取得成功,安全句柄就会调用此函数去生成解密密钥.在此系统中我采用的是固定密钥,所以直接赋值即可.3.授权认证方式所谓授权认证就是控制用户打开加密PDF文件的限制方式.在用户下载前,与授权相关的信息已写入到PDF文档加密字典里,在打开时会先在PDF文档里提取这些信息再进行权限认证处理.这里的授权认证方式采用网络限制、本机绑定、文档期限的组合形式[9].1)网络限制.限定PDF文档只能在预先设置的网段内打开.这里有两类IP地址,分别是本机IP地址、服务器设置的IP起始地址和截止地址,比较前要把这3个地址都转换成十进制然后再进行区间比较.转换方式为:比如一个为218...的IP地址,进行如下转换,18×256×256×256+6×256×256+7×256+72)本机绑定.当前用户的MAC地址必须和请求下载时的主机MAC地址相匹配.选用这个认证方式可以防止在一台机器上下载的文件拷贝到另一台机器上还能打开,避免文档资料的扩散,使得文档保护更加安全.3)时间期限.对下载的PDF文档设定一个使用期限.它实际上是规定了文档的生命周期,这里的天数是在加密时设置的,可以由用户自由设定,打开时,如果文档过期就提醒用户重新下载,获得授权.在实际系统运行中,插件首先判断是否连上了服务器,系统认为用户机器连上服务器且在允许的IP段内,就是合法授权用户,无时间限制,反之就要进行时间限制.另外,为了防止PDF文档的属性是否被修改,在PDF文档里对P值进行两次保存,一个是明文,一个密文.明文可以被修改,但密文是不行的.判断P值是否被修改只需对明文加密和密文进行比较即可,如果一样则没有修改,反之,被修改[10].整个授权过程用程序流程图表示如图3所示:P3l\\\411233141516i1?Pc2图5打开口令输入窗口生成解密密钥,降低了用户的工作量.3)与编写专用阅读器控制器相比,采用插件的方式不会产生临时文件,一切数据转换都是在内存中进行的,合法用户无临时文件可以拷贝和传播.4小结本文通过系统地介绍PDF文档、DF加密与解密原理以及插件相关知识,说明了如何编写Acrobat图3授权流程图3.完成和测试插件程序编写完成之后,编译并运行就生成一个HfutSecHandler.api插件文件,安装插件到Acrobat的安装目录的插件文件夹下,即\ProgramFiesAdobeAcrobatplug-ins中,运行Acrobat即可加载此插件进行解密,打开显示安全属性可以看到如图4所示.经过测试此插件可以有效实现授权认证和密钥生成,提高了PDF文档安全保护的安全性和实用性.图4解密插件3.结果分析1)与传统保护相比,增加了用户授权认证模块,本文的方法可以很方便地进行授权认证处理,满足客户的要求,在更改与升级时只要修改插件程序中相关部分即可,无需修改整个系统,减少维护与升级的工作量.2)如图5所示Acrobat自带的保护方法,在打开的时候会弹出对话框提示填入打开密码.而采用此解密插件时,授权认证是自动完成的,由插件事先确定的方式进行授权认证,认证成功就解密插件程序来实现PDF文档的安全保护,通过具体的实例说明采用插件方法的便捷性和有效性.本文所用的加?解密算法是Acrobat自带的RC4算法,与Acrobat内置的加密方法相比,这里只是在密钥管理和授权上更加灵活多样,满足不同的管理方式.对于后期扩展,表现在以下几点:1)根据不同的需求,授权方式还可以改变,如网络或文档期限、网络+离线期限加密方式、网络时间+本机绑定等.2)替换Acrobat默认的加?解密算法,使用用户自己需求的加?解密算法,使得文档保护更安全,更能满足用户的需求.参考文献[]唐成,宋安利,赵黎强.一种电子文本版权保护的研究与实现.天津师范大学学报,2009,29():66-69[]高蒙,范磊,李建华.基于PDF文档保护系统的设计与实现.信息安全与通信保密,2008,():69-71[]高慧萍,吕俊.插件式开发技术研究与实现.计算机工程与设计,2009,30(6):3805-3807[]张宇,庄晋林.面向对象设计原则和设计模式的应用.华北水利水电学院学报,2