一种能定位pdf电子发票篡改的水印嵌入与认证方法
【技术领域】
[0001] 本发明涉及一种能定位roF电子发票篡改的水印嵌入与认证方法,属于电子发票 认证领域。
【背景技术】
[0002] 早在2012年,我国就启动了电子发票试点工作,减少开具纸质发票所造成的用纸 浪费。国家税务总局出台的《网络发票管理办法》从2013年4月1日起施行,要求所有开具 发票的单位和个人向消费者出具网络发票。现阶段的网络发票在用作财务记账凭证时,仍 然需要将电子发票打印在"特定纸质"上。也就是说,开具发票的单位和个人仍然需要将打 印的纸质发票通过快递寄送给消费者,造成人力、物力的浪费。为此,2013年6月和12月, 我国先后在北京、上海两地开始试点电子发票。至今成功开具电子发票超过5000万张。
[0003]2014年11月16日,国务院办公厅发布《关于促进内贸流通健康发展的若干意见》, 明确提出要"加快推进电子发票应用,完善电子会计凭证报销,登记入账及归档保管等配套 措施"。这是国务院层面首次公开推广电子发票,国家电子商务标准化总体组副组长邱月明 表示,随着电子商务的快速发展,必然带动发票业务的创新,电子发票较传统发票具有成 本低、效率高的天然性优势,未来几年有望在全国大范围内得到推广。
[0004]而在今年两会期间,推广电子发票、减少能源浪费,同样也成为委员们关注的焦 点。而就目前多个省市的试点情况而言,推广电子发票主要遇到"入账难、报销难"的问题。 对此,两会委员,苏宁控股集团董事长张近东在《加快推进电子发票报销入账》的提案中建 议,优先从法律、制度层面解决电子发票的合法效力问题、确立电子发票作为合法入账凭证 的法律地位,进而推进电子发票在全国范围普及。而当电子发票的法律地位被确认之后,随 之而来要解决"入账难、报销难"的问题。由于PDF格式具有安全性高,可移植性好,存储容 量小,因此现有的电子发票大多采用PDF格式。
[0005] 现有针对TOF电子发票的保护算法大多是基于数字签名的方法,它能够判别发票 是否被篡改,但并不能实现篡改定位的功能,其判定结果说服力差。
[0006] 采用水印嵌入的认证方法可以对PDF文件的篡改进行判定,也能对篡改进行定 位。但其认证算法大多数是利用交叉引用表中冗余空间嵌入水印,若采用此方法对PDF格 式的电子发票进行信息嵌入,则水印容量很小而且安全性低,给其后面的篡改定位带来限 制。
【发明内容】
[0007] 本发明的目的是提供一种能定位roF电子发票篡改的水印嵌入与认证方法。该方 法在保证实现水印不可见的同时,文件增量小,控制在1 %以内。其对篡改的检测准确性高, 误检率低,能够有效抵抗替换、添加和删除等篡改。
[0008] 本发明解决其技术问题,所采用的技术方案为:一种能定位roF电子发票篡改的 水印嵌入与认证方法,包括如下步骤:
[0009]A、基于文件阅读页面的水印生成
[0010]A1、页面分块:将原始TOF电子发票文件的阅读器页面P,根据信息单元的固有的 分布坐标分为〗个页面块Pi,即p={Pi|i= 12,…,I},i为页面块序号,I为整个阅 读器页面P上的页面块总数;
[0011] A2、解析文件结构:对原始roF电子发票文件的代码页面S进行PDF文件结构解 析,得到标明PDF文件版本信息的文件头SH,文件体S。,交叉引用表Sx和文件尾ST四个部 分,艮p:s= {SH,s0,sx,ST};
[0012] 其中,文件体SQ由J个对象0」(j= 1,2,...,J)组成,即{0」|j= 1,2,…J}, j为对象号;
[0013] 交叉引用表S#J个索引信息Xj(j=1,2,...,J)组成,Xj={对象偏移地址 代表该对象所修改的次数,对象是否正在被使用的状态};
[0014] 文件尾ST包括文件描述、密码信息及文件体S中的根对象号、摘要对象号和对象 总数;
[0015]A3、认证信息生成:
[0016] 对每一个页面块Pi(i= 1,2…,I),首先利用Itextsharp组件提取每个页面块Pi 中的文本内容凡,1\={t"Iq= 1,2, ? ?,zj,以及文本坐标Di,Di={d"Iq= 1,2, ? ?,zj, 其中,ti;q为文本内容Ti中的第q个信息单元,zi为文本内容T1包含的信息单元个数,di;q 为信息单元对应的坐标信息,各信息单元t&之间需添加行末标识符"\r\n" ;
[0017] 然后,基于秘钥&生成文本内容Ti与文本坐标Di的摘要信息Hi,氏= Hash(kp| |Dj;其中,Hash(?)表示Hash函数,| |代表连接操作;
[0018] 最后将页面块Pi的文本内容Tp文本坐标Di和摘要信息Hi连接起来构成页面块 Pi的认证信息A"Ai=Ti|也| |Hi;
[0019]A4、水印信息生成:对每个页面块Pi(i= 1,2…,I),将A3步生成的认证信息八1进 行压缩并利用秘钥k2加密之后得到二进制压缩数据流Bp并添加PDF格式信息1,生成待 添加的PDF对象UiZ{BpYj,同时计算其字节长度,记为li;
[0020] 所述的PDF格式信息Yi包括:对象号i+J、对象修改次数、对象的关键词、换行符;
[0021] B、基于文件代码的水印嵌入
[0022] 首先将A4步生成的I个待添加的PDF对象I作为页面块Pi的水印信息W= {W」i =1,2,…I},将该水印信息W与A2步的文件体S。: {0j|j= 1,2,…J}合并,得到包含N= 1+了个合并对象〇'11的合并文件体3/。={0'」11=1,2,"川},其中11为合并对象0 /11 的对象号,
同时根据偏移地址信息&,计算得到每个合并对象〇' "的 长度匕,
[0023] 然后,基于密钥k3生成长度为I+J的伪随机序列,对该序列进行从小到大排序,排 序前的位置信息按排序后的位置排列,构成对象置乱序列V,V= {vn|n= 1,2, . . .,I+J}, 其中vn为合并对象〇'n的新对象号,vne[1,I+J]的整数;据以进行置乱操作,即将合 并对象〇'n的对象号修改Svn,即令,随即得到置乱后的含水印文件体
[0024] C、交差索引表和文件尾的更新
[0025] 根据B步中得到的含水印文件体%和对象长度信息1' "计算出合并后的偏移地 址信息
,其中:a为第一个对象的偏移地址, 其具体值为PDF文件版本信息的文件*SH的字节长度;重新生成交差索引表.#,同时更新 文件尾ST中的根对象号、摘要对象号和对象总数,生成更新后的文件尾;
[0026] D、含水印roF电子发票文件生成
[0027] 将B步的含水印文件体和C步更新后的交差索引表#和文件尾合并重 构,即得到含水印的发票文件Fw;
[0028] E、认证信息重构和认证信息提取
[0029] E1、待检测文档的认证信息重构:
[0030] 将待测roF电子发票文件F#的阅读器页面P#,根据信息单元的固有的分布坐标分 为I个待测页面块Pi#,即P#={PIi= 1,2,…,1};
[0031] 对每一个待测页面块P'Q= 1,2…,I),首先利用Itextsharp组件提取每个待测 页面块P'中的待测文本内容T',T#i= {t^Jq=l,2,..,Zi},以及待测文本坐标D',D' ={d',」q= 1,2, . .,zj,其中,t、为待测文本内容T'中的第q个待测信息单元,zi为待 测文本内容T'包含的信息单元个数,d为待测信息单元t\q对应的待测坐标信息,各待 测信息单元t\q之间需添加行末标识符"\r\n" ;
[0032] 然后,基于秘钥&生成待测文本内容T'与待测文本坐标D'的待测文本摘要信息 Hash(k1,T#i|IDV;
[0033] E2、认证信息提取:对待测的PDF电子发票文件F#代码页面S#进行解析得到待测 文件体
根据秘钥匕和对象置乱序列
V对I+J个 待测对象进行反置乱,找到待测对象中对应的I个伪对象即待测水印信息w^(i= 1,2,…,I),
,解压待测水印信息 <中的待测压缩数据BA并利用秘钥k2解密 得到待测认证信息A;;
[0034] 按照E1中待测文本内容T'、待测文本坐标D'和待测文本摘要信息的长度, 由左到右依次从待测认证信息A;分割出对应页面块P^的提取文本内容TA提取文本坐 标D;,提取文本摘要信息H;,并根据行末标识符" \r\n"将提取文本信息IT分割出提取信 息单元t\q,以及从提取文本坐标分出对应的提取坐标单元d\q,即1^= {t\q|q= 1,2,..,zj,Di*={d*i;q |q= 1, 2, . . ,zj;
[0035] F、篡改认证
[0036] Fl、篡改真实性判定:如果待测文本内容T'和提取文本内容T广相等,且待测文本 摘要信息和提取文本摘要信息H^相等,则判定待测的TOF电子发票文件F#未被篡改, 输出检测通过的结果,完成检测;否则,判定待测的TOF电子发票文件已被篡改,进行F2步 的操作;
[0037] F2、篡改定位与标记:对F1步中认定为篡改的发票文件F#,找出与提取信息单元 t\q不相等的待测信息单元t ,即为被篡改信息单元t\q,输出检测不通过的结果;并根 据其对应的坐标信息,在被篡改信息单元t\q添加标识警示信息,使其对应的页面P# 显示文字内容处显示出篡改标识信息。
[0038] 与现有技术相比,本发明的有益效果是:
[0039] -、定位标记篡改:因本方法将信息单元的内容和其坐标值等作为水印信息,因 此当检测出发票被篡改后,系统会利用发票中被篡改信息单元对应的坐标信息将其精确标 识,且通过设定的标识信息的属性,如添加带有颜色的标线、标识框等在阅读器上突出显示 被篡改的信息单元。
[0040] 二、大水印容量、高安全性:相比利用交叉引用表中冗余空间嵌入水印,其水印容 量小,水印信息容易被发而导致安全性低,本方法根据roF阅读器显示的发票内容将页面 信息分为5个块,将分块后的发票块文本的内容信息、文本的坐标信息、人为添加的标记信 息以及文本信息与坐标信息的Hash值作为水印信息,经过加密、压缩以及添加对象中必要 的头尾部分,分别伪装成PDF合法对象嵌入PDF文件中,并利用秘钥置乱文件体中的所有对 象,最后重构PDF文件,从而让嫌疑者很难发现已经嵌入的伪造对象,因此安全性高,同时 每一个对象包含的水印信息远大于交叉引用表中的冗余空间,水印容量充足。
[0041] 三、定位复杂度低、定位信息完整:本方法将发票页面所有的文本信息和坐标信息 直接进行预处理如加密、压缩等作为水印信息嵌入PDF源文件中,文件增控制在1 %以内, 因此需要的水印量少,文件增量较少,定位信息完整;定位时,找到含水印的对象经过解压 缩、解密等步骤即可还原水印信息,因此定位复杂度低。
[0042] 本发明所述A2步中对原始TOF电子发票文件的代码页面S进行PDF文件结构解 析,得到标明PDF文件版本信息的文件头SH,文件体S。,交叉引用表Sx和文件尾ST。文件头 SH在本发明中并没有实际意义,因此不做分析,而文件体S。的信息可以通过交叉引用表找 到,因此只需分析交叉引用表&和文件尾S:两个部分,其具体做法是:
[0043] 将原始roF电子发票文件的代码页面S以字节的形式读到缓存区,找到文件 尾&唯一标识的关键字"trailer"(因本发票为线性PDF文件,因此只存在一个关键字 "trailer")信息,即找到了文件尾ST,并记录文件尾&中的"Size"关键字后面的根对象 信息、摘要对象信息、对象总数等信息,即获取文件尾ST信息;
[0044] 同时查找交叉引用表Sx唯一标识的关键字"startxref",其后即为交差引用表Sx, 记录交叉引用表Sx中的每一条偏移地址x」,以及与其对应的对象号信息,即获取了文件尾 Sxf目息。
[0045] 下面结合附图和【具体实施方式】对本发明作进一步地详细说明。
【附图说明】
[0046] 图1是为验证本发明方法对PDF电子发票部分内容替换篡改认证效果所用的原始 PDF电子发票。
[0047] 图2是对图1的PDF电子发票嵌入水印后的含水印的发票文件。
[0048] 图3是对图2的含水印的发票文件部分内容替换篡改后的PDF电子发票。
[0049] 图4是对图3的篡改后的TOF电子发票进行篡改定位和标记的TOF电子发票。
[0050] 图5是为验证本发明方法对TOF电子发票内容添加、删除篡改认证效果所用的原 始TOF电子发票。
[0051] 图6是对图5的TOF电子发票嵌入水印后的含水印的发票文件。
[0052] 图7是对图6的含水印的发票文件内容添加、删除篡改后的PDF电子发票。
[0053] 图8是对图7的篡改后的PDF电子发票进行篡改定位和标记的PDF电子发票。
[0054] 图9是为验证本发明方法对TOF电子发票同时进行添加、删除和替换篡改认证效 果所用的原始TOF电子发票。
[0055] 图10是对图9的TOF电子发票嵌入水印后的含水印的发票文件。
[0056] 图11是对图10的含水印的发票文件部分内容替换篡改后的PDF电子发票。
[0057] 图12是对图11的篡改后的PDF电子发票进行篡改定位和标记的PDF电子发票。
【具体实施方式】
[0058] 实施例
[0059] 本发明的一种【具体实施方式】是:一种能定位TOF电子发票篡改的水印嵌入与认证 方法,包括如下步骤:
[0060] A、基于文件阅读页面的水印生成
[0061] A1、页面分块:将原始TOF电子发票文件的阅读器页面P,根据信息单元的固有的 分布坐标分为〗个页面块Pi,即P= {Pi|i = 12,…,I},i为页面块序号,I为整个阅 读器页面P上的页面块总数;
[0062] A2、解析文件结构:对原始TOF电子发票文件的代码页面S进行PDF文件结构解 析,得到标明PDF文件版本信息的文件头S H,文件体S。,交叉引用表Sx和文件尾S T四个部 分,艮p :s = {SH,s0, sx,ST};
[0063] 其中,文件体S。由J个对象0」(j =1,2,...,J)组成,即SQ= {0」|j =1,2,…J}, j为对象号;
[0064] 交叉引用表J个索引信息X」(j =1,2,...,J)组成,Xj={对象偏移地址Xj, 代表该对象所修改的次数,对象是否正在被使用的状态};
[0065]文件尾ST包括文件描述、密码信息及文件体S 中的根对象号、摘要对象号和对象 总数;
[0066] A3、认证信息生成:
[0067] 对每一个页面块Pi(i= 1,2…,I),首先利用Itextsharp组件提取每个页面块Pi 中的文本内容凡,1\={t"Iq= 1,2,? ?,zj,以及文本坐标Di,Di={d"Iq= 1,2,? ?,zj, 其中,ti;q为文本内容T i中的第q个信息单元,z i为文本内容T 1包含的信息单元个数,d i;q 为信息单元对应的坐标信息,各信息单元t &之间需添加行末标识符"\r\n" ;
[0068] 然后,基于秘钥ki生成文本内容Ti与文本坐标Di的摘要信息Hi,Hi= Hash (kp | | Dj ;其中,Hash (?)表示Hash函数,| |代表连接操作;
[0069]最后将页面块Pi的文本内容Tp文本坐标Di和摘要信息Hi连接起来构成页面块 Pi的认证信息A"Ai= T i |也| |Hi;
[0070] A4、水印信息生成:对每个页面块Pi(i = 1,2…,I),将A3步生成的认证信息 行压缩并利用秘钥k2加密之后得到二进制压缩数据流Bi,并添加PDF格式信息Yi,生成待 添加的PDF对象UiZ{BpYj,同时计算其字节长度,记为li;
[0071] 所述的PDF格式
信息Yi包括:对象号i+J、对象修改次数、对象的关键词、换行符;
[0072]B、基于文件代码的水印嵌入
[0073] 首先将A4步生成的I个待添加的PDF对象I作为页面块Pi的水印信息W= {W」i =1,2,…I},将该水印信息W与A2步的文件体S。: {0j|j= 1,2,…J}合并,得到包含N= 1+了个合并对象〇'11的合并文件体3/。={0'」11=1,2,"川},其中11为合并对象0 /11 的对象号,
:同时根据偏移地址信息&,计算得到每个合并对象〇' "的 长度匕,
[0074] 然后,基于密钥k3生成长度为I+J的伪随机序列,对该序列进行从小到大排序,排 序前的位置信息按排序后的位置排列,构成对象置乱序列V,V= {vn|n= 1,2,. . .,I+J}, 其中vn为合并对象〇'n的新对象号,vne[1,I+J]的整数;据以进行置乱操作,即将合 并对象〇'n的对象号修改Svn,即令
,随即得到置乱后的含水印文件体5^,
[0075] C、交差索引表和文件尾的更新
[0076] 根据B步中得到的含水印文件体5^和对象长度信息1'"计算出合并后的偏移地 址信息
,其中:a为第一个对象(^的偏移地址, 其具体值为PDF文件版本信息的文件*SH的字节长度;重新生成交差索引表:#,同时更新 文件尾ST中的根对象号、摘要对象号和对象总数,生成更新后的文件尾
[0077]D、含水印H)F电子发票文件生成
[0078] 将B步的含水印文件体和C步更新后的交差索引表#和文件尾合并重构, 即得到含水印的发票文件Fw;
[0079] E、认证信息重构和认证信息提取
[0080] E1、待检测文档的认证信息重构:
[0081] 将待测TOF电子发票文件F#的阅读器页面P#,根据信息单元的固有的分布坐标分 为I个待测页面块P,,即P#={P'Ii= 1,2,…,1};
[0082] 对每一个待测页面块P'Q= 1,2…,I),首先利用Itextsharp组件提取每个待测 页面块P'中的待测文本内容T',T#i= {t^Jq=l,2,..,Zi},以及待测文本坐标D',D' ={d',」q= 1,2, . .,zj,其中,t、为待测文本内容T^中的第q个待测信息单元,zi为待 测文本内容A包含的信息单元个数,d 为待测信息单元t\q对应的待测坐标信息,各待 测信息单元t\q之间需添加行末标识符"\r\n" ;
[0083]然后,基于秘钥&生成待测文本内容T'与待测文本坐标D'的待测文本摘要信息 Hash(k1,T#i|IDV;
[0084] E2、认证信息提取:对待测的TOF电子发票文件F#代码页面S#进行解析得到待测 文件体
,根据秘钥匕和对象置乱序列V对I+J个 待测对象进行反置乱,找到待测对象〇&中对应的I个伪对象即待测水印信息Wi#(i= 1,2,…,I)
,解压待测水印信息W;中的待测压缩数据BA并利用秘钥k2解密 得到待测认证信息A;;
[0085] 按照E1中待测文本内容T'、待测文本坐标D'和待测文本摘要信息的长度, 由左到右依次从待测认证信息A;分割出对应页面块P^的提取文本内容TA提取文本坐 标D;,提取文本摘要信息H;,并根据行末标识符" \r\n"将提取文本信息IT分割出提取信 息单元t\q,以及从提取文本坐标分出对应的提取坐标单元d\q,即1^= {t\q|q= 1,2,..,zj,Di*={d*i;q |q= 1, 2, . . ,zj;
[0086] F、篡改认证
[0087] Fl、篡改真实性判定:如果待测文本内容T'和提取文本内容T广相等,且待测文本 摘要信息和提取文本摘要信息H^相等,则判定待测的TOF电子发票文件F#未被篡改, 输出检测通过的结果,完成检测;否则,判定待测的TOF电子发票文件已被篡改,进行F2步 的操作;
[0088] F2、篡改定位与标记:对F1步中认定为篡改的发票文件F#,找出与提取信息单元 t\q不相等的待测信息单元t,即为被篡改信息单元t\q,输出检测不通过的结果;并根 据其对应的坐标信息,在被篡改信息单元t\q添加标识警示信息,使其对应的页面P# 显示文字内容处显示出篡改标识信息。
[0089] 本发明的效果可以通过以下性能分析及试验得到验证和说明:
[0090] 其中,水印容量用单个文件中嵌入的字节数(Byte)来衡量,发票增量用文件字节 (Byte)变化的百分比做衡量。
[0091] 一、水印容量与发票大小增量的分析与统计
[0092] 对同类的水印嵌入算法,水印容量越大,带来文件的增量也越大。
[0093] 现有文献的文件增量多控制在5%以内,考虑到隐蔽性,防止被破解者嫌疑以及减 少存储空间,本发明将水印容量设定在1 %以内。水印容量根据对象块的内容大小不同而变 化。表1给出了本发明对常用PDF格式的电子发票原始文件大小、页面数、嵌入耗时、水印 容量及增量的统计结果。由表1可以看出,本发明文件增量即为水印容量,在0.5%左右,能 很好的保证文件的传输;在嵌入耗时一栏中计算了水印嵌入文件的时间和更新交叉引用表 的时间,该时间基本在l〇ms以下,嵌入效率高,适于实际应用。
[0094] 表1通过本发明方法对电子发票嵌入水印的参数统计结果
[0095]
[0096] 注:表中发票测试对象均来自本发明者自己开发的发票制作系统
[0097] 二、篡改检测性能的测试
[0098] 为验证算法在部分内容替换、添加、删除和混合篡改下的检测性能,用上述实施例 的方法对PDF格式电子发票文件进行了相关测试。
[0099] 1、部分内容替换篡改
[0100] 如图1所示,以文件大小98, 458字节的PDF格式电子发票为测试对象,利用本发 明生成的含水印文件见图2,从图1和图2可以看出水印完全不可见;水印容量为458字节, 其中嵌入耗时为5毫秒,含水印电子发票大小增量为0. 48%。对图2进行如下替换篡改:1) 在商品编号1中的数量一栏中用"11"替换"1";2)合计人民币(大写)一栏中用"拾元" 替换"伍拾元";3)发票代码中用"1110013710715"替换"111001371071";4)在日期一栏中 用"2015-02-06"替换"2015-02-02" ;2)小写一栏中用"Y10"替换"Y50",图3是对图2 篡改后的图像。
[0101] 图4是用本发明方法对图3进行认证后的定位图像;定位精度为子块文字信息的 长度,定位标记为一条红线。可以看到,由于本发明对可以获取发票中的所有文字坐标信 息,使得图4准确检测到了篡改。通过替换篡改结果可以看出,本发明对发票进行准确定 位,不存在漏检或虚检错误。
[0102] 2、添加、删除篡改
[0103] 如图5所示,以文件大小100, 325字节的PDF格式电子发票为测试对象,利用本发 明生成的含水印文件见图6,水印容量为492字节其中的,嵌入耗时为6毫秒,含水印电子 发票大小增量为〇. 51 %。对图6进行如下篡改:1)添加项目"小果耳机",商品相应的单价 "Y20",商品相应的数量"1",商品相应的金额"20"。图7是对图6进行篡改后的图像。
[0104] 图8是用本发明方法对图7的篡改后的电子发票进行认证后的篡改定位图像,定 位精度同样为子块文字信息的长度,定位标记为一条红线。可以看到,本发明因为对文件信 息分块之后进行逐一对比,并可以获取文件中文字的坐标信息,而在认证时的也是进行分 块模式,这样为最终的准确定位提供了保障。测试结果表明本发明对添加、删除篡改拥有较 好的认证能力。
[0105] 3、同时进行添加、删除和替换篡改
[0106] 以如图9所示的PDF原始电子发票为测试对象,利用本发明生成的含水印文 件见图10。对含水印电子发票文件如图10进行以下篡改:1)添加项目"百雀羚洗面 奶",单价"Y30",数量"1",金额"Y30";2
)删除行业分类中的"商业"以及收款单位 的全部信息;3)大写合计的"贰拾元"改为"五拾元",小写合计"Y20"为"50",开票时 间由 "2015-02-03" 修改为"2015-02-17",防伪码由 "WbTPJuvt5Sj44bt8DM-N3" 修改为 "bPJbubvt5Sj44bt8DMN335 ";得到包含三种篡改方式多个篡改区域的电子发票文件如图11 所示。图12是利用本发明方法对图11认证、篡改定位的图像,定位精度为子块文字信息的 长度,定位标记为一条红线。综合以上测试结果可看出,当添加、删除和替换同时存在于一 个PDF格式电子发票文件中时,本发明算法依然具有精确的篡改定位能力。
【主权项】
1. 一种能定位roF电子发票篡改的水印嵌入与认证方法,包括如下步骤: A、 基于文件阅读页面的水印生成 A1、页面分块:将原始TOF电子发票文件的阅读器页面P,根据信息单元的固有的分布 坐标分为I个页面块Pi,即P= {Pi Ii = 1,2, ···,〗},i为页面块序号,I为整个阅读器 页面P上的页面块PjA总数; A2、解析文件结构:对原始TOF电子发票文件的代码页面S进行PDF文件结构解析,得 到标明PDF文件版本信息的文件头Sh,文件体S。,交叉引用表SjP文件尾S泗个部分,即: S = {SH, S0, Sx, ST}; 其中,文件体 Sq 由 J个对象 Oj(j = 1,2,...,J)组成,即 S。= {Ojl j = 1,2,... J},j 为 对象号; 交叉引用表Sx* J个索引信息XjU = 1,2,...,J)组成,Xj= {对象偏移地址X j,代 表该对象所修改的次数,对象是否正在被使用的状态}; 文件尾St包括文件描述、密码信息及文件体S 中的根对象号、摘要对象号和对象总 数; A3、认证信息生成: 对每一个页面块PiQ = 1,2…,I),首先利用Itextsharp组件提取每个页面块Pi中的 文本内容 Ti, Ti= {t J q = 1,2, . .,zj,以及文本坐标 Di, Di= {d "I q = 1,2, . .,zj,其 中,ti;(1为文本内容T i中的第q个信息单元,z i为文本内容T 1包含的信息单元个数,d &为 信息单元对应的坐标信息,各信息单元t &之间需添加行末标识符"\r\n" ; 然后,基于秘钥Ic1生成文本内容Ti与文本坐标Di的摘要信息H i,Hi= HashQi1, Ti I IDi); 其中,Hash( ·)表示Hash函数,I I代表连接操作; 最后将页面块Pi的文本内容T i、文本坐标Di和摘要信息H i连接起来构成页面块P ^勺 认证信息 Ai, Ai = T i I !Di I !Hi; A4、水印信息生成:对每个页面块Pi (i = 1,2…,I),将A3步生成的认证信息Ai进行压 缩并利用秘钥k2加密之后得到二进制压缩数据流B i,并添加 PDF格式信息Yi,生成待添加 的PDF对象Wi, Wi= {Bp YJ,同时计算其字节长度,记为Ii; 所述的PDF格式信息Yi包括:对象号i+J、对象修改次数、对象的关键词、换行符; B、 基于文件代码的水印嵌入 首先将A4步生成的I个待添加的PDF对象Wi作为页面块P i的水印信息W = {W i I i = 1,2,... I},将该水印信息W与A2步的文件体S。= IOjI j = 1,2,... J}合并,得到包含N = 1+了个合并对象屮11的合并文件体"。={0'」11=1,2,...叫,其中11为合并对象屮11 的对象号,;同时根据偏移地址信息\,计算得到每个合并对象CV "的 长度,其中/ j5 =X/ I -Ay; 然后,基于密钥k3生成长度为I+J的伪随机序列,对该序列进行从小到大排序,排序 前的位置信息按排序后的位置排列,构成对象置乱序列V,V = IvnIn = 1,2,. . .,I+J}, 其中Vn为合并对象CV n的新对象号,vne [1,I+J]的整数;据以进行置乱操作,即将合 并对象〇' n的对象号修改为vn,即令= 〇;,随即得到置乱后的含水印文件体,C、 交差索引表和文件尾的更新 根据B步中得到的含水印文件体和对象长度信息I' n计算出合并后的偏移地址信 肩,其中:a为第一个对象O1的偏移地址,其具 体值为PDF文件版本信息的文件头Sh的字节长度;重新生成交差索引表^,同时更新文件 尾St中的根对象号、摘要对象号和对象总数,生成更新后的文件尾; D、 含水印HF电子发票文件生成 将B步的含水印文件体和C步更新后的交差索引表#和文件尾句T合并重构,即得 到含水印的发票文件Fw; E、 认证信息重构和认证信息提取 E1、待检测文档的认证信息重构: 将待测HF电子发票文件Fs的阅读器页面P #,根据信息单元的固有的分布坐标分为I 个待测页面块ΡΛ即Ps= {P ' I i = 1,2,…,1}; 对每一个待测页面块Ptti Q = 1,2…,I),首先利用Itextsharp组件提取每个待测页 面块Psi中的待测文本内容T % Tsi= {t'Jq = 1,2,..,Zi},以及待测文本坐标D',Dsi = {d、I q = 1,2, · ·,Zi},其中,为待测文本内容T '中的第q个待测信息单元,z丨为待测 文本内容Tsi包含的信息单元个数,d ^为待测信息单元t 对应的待测坐标信息,各待测 信息单元之间需添加行末标识符"\r\n" ; 然后,基于秘钥h生成待测文本内容T '与待测文本坐标D 的待测文本摘要信息H', Hfli= Hash (k1; Tfli I IDfli); E2、认证信息提取:对待测的HF电子发票文件F#代码页面S #进行解析得到待测文 件体.?"%根据秘钥M5P对象置乱序列V对I+J个待 测对象%n:进行反置乱,找到待测对象〇χ;η中对应的I个伪对象即待测水印信息WiYi = 1,2,…,I),,解压待测水印信息Wi冲的待测压缩数据B Λ并利用秘钥k2解密 得到待测认证信息ΑΛ 按照El中待测文本内容Tsi、待测文本坐标Dsi和待测文本摘要信息Hsi的长度,由 左到右依次从待测认证信息分割出对应页面块P ^的提取文本内容T Λ提取文本坐标 Di'提取文本摘要信息ΗΛ并根据行末标识符" \r\n"将提取文本信息分割出提取信 息单元,以及从提取文本坐标分出对应的提取坐标单元d\q,即IT= {t'Jq = 1,2,.., zj , Di*= {d *i;q I q = I, 2, . . , zj ; F、 篡改认证 FI、篡改真实性判定:如果待测文本内容Tsi和提取文本内容T广相等,且待测文本摘要 信息H/和提取文本摘要信息H ^相等,则判定待测的TOF电子发票文件F #未被篡改,输出 检测通过的结果,完成检测;否则,判定待测的HF电子发票文件已被篡改,进行F2步的操 作; F2、篡改定位与标记:对Fl步中认定为篡改的发票文件Fs,找出与提取信息单元不 相等的待测信息单元,即为被篡改信息单元,输出检测不通过的结果;并根据其对 应的坐标信息Clsi^在被篡改信息单元添加标识警示信息,使其对应的页面P #显示文 字内容处显示出篡改标识信息。
【专利摘要】一种能定位PDF电子发票篡改的水印嵌入与认证方法,包括A基于文件阅读页面的水印生成,具体包括阅读器页面分块、解析代码页面文件结构;生成认证信息、根据认证信息生成水印;B基于文件代码的水印嵌入;C交差索引表和文件尾的更新;D含水印PDF电子发票文件生成;对待测的PDF电子文件进行E认证信息重构和认证信息提取和F篡改认证,篡改认证包括篡改真实性判定和篡改定位与标记。该方法在保证实现水印不可见的同时,文件增量小,控制在1%以内。其对篡改的检测准确性高,误检率低,能够有效抵抗替换、添加和删除等篡改。
【IPC分类】G06T1/00
【公开号】CN104899822
【申请号】CN201510339156
【发明人】陈帆, 张旋, 和红杰
【申请人】西南交通大学
【公开日】2015年9月9日
【申请日】2015年6月17日