工程设计数字图纸DXF格式文件的篡改检测定位方法

2023-11-09 10:37范荣全郑晓波曾嵘向圣军陈少卿吕俊杰
微型电脑应用 2023年10期
关键词:块段关键字哈希

范荣全, 郑晓波, 曾嵘, 向圣军, 陈少卿, 吕俊杰

(1.国网四川省电力公司,四川,成都 610000; 2.国网四川省电力公司天府新区供电公司,四川,成都 610000;3.成都荣耀科技有限公司,四川,成都 610000)

0 引言

目前有关文件防篡改的技术主要针对常见格式位图文件和SHP格式矢量图文件。工程系统设计文件格式一般为DXF,具有多层次、多元素等特征,单层次单元素的位图篡改检测、定位技术不适用,而SHP文件和DXF文件相互转换中会丢失大量数据,因此现有针对SHP格式的矢量图文件的防篡改技术不适用于工程系统设计文件的篡改检测。现有很多方法只能判断文件是否被篡改,并不能对篡改处进行定位。

现有篡改检测、定位算法均不适用于DXF格式设计文件,需要对DXF工程文件设计有针对性的篡改检测和定位方法。

1 相关研究

重要的设计文件不仅会受到外部黑客的攻击,还会受到内部的恶意破坏和非法篡改。近年来,一些研究团体和学者对文件篡改定位已开展了很多相关的研究工作,取得了一定的研究成果。林意等[1]提出将文件头信息作为图像像素灰度值进行处理,利用MD5构造的哈希函数生成文件头的信息摘要值,并将消息摘要值作为水印,以可逆不可见的方式嵌入DICOM图形,使用提取水印与重新生成水印的差异进行文件头信息篡改检测,该方法对文件头信息篡改具有极强的敏感性、较高的准确性,对大文件处理效率过慢。陈阳等[2]提出一种支持篡改定位的电子航海图零水印算法,在ENC文件以经纬度表示的离散点坐标数据分布规律的基础上,构造离散点经纬度坐标校验码的二值序列,引入经纬度坐标校验码和格网分块技术,在保证ENC数据精度的同时,具备点位篡改定位的特性,主要应用在电子航海图数据的版权保护上。SU等提出了一种基于混合Sudoku的图像篡改检测脆弱水印算法,水印虚拟地嵌入每个像素对中,产生临时坐标信息,然后将临时信息坐标隐藏到覆盖图像中,实验表明精度较高,有效定位出篡改位置,但不适用于DXF文件。彭一航等提出一种基于递进式混合特征的篡改图片识别算法。算法针对SIFT特征无法区分自然相似区域与篡改区域的问题,结合矩特征的优点,提取合成子块的递进式混合调整来降低算法的虚警率。算法可以有效防止传统图片复制-粘贴的图片篡改方式,但DXF文件篡改存在数据变更问题,并不适用。

2 设计文件篡改检测定位方法

本节针对DXF文件设计篡改检测与定位方法。首先,详细分析DXF文件的结构,找出改变元素会显著改变的关键部分。提取这些关键部分元素借助默克尔树生成防篡改码[2-3]。最后通过对比实时生成的篡改码与原始保存的防篡改码是否一致来判断文件是否被篡改,并通过回溯默克尔树定位被篡改的位置。DXF结构如图1所示。

图1 DXF结构图

2.1 DXF文件结构解析

DXF 图形文件结构 DXF文件由标题段(Header)、表段 (Tables)、块段(Block)、实体段(Entities)和文件结束段(EoF)共5部分组成。DXF通过每一行存储相关数据,每两行为一个组,第一行为组的代码,第二行为组值,一个组就代表了一个数据的含义和值,DXF文件由大量的组构成。经过研究,对内容比较敏感的是其中的表图层(Layer)、块段(Blocks)和实体段(Entities),文件只要有改动必然反映在这些元素里。所以虽然DXF文件结构相当复杂,但根据需求,只要获取其中的层表、块段和实体段,就可以完成相应实体的提取[4-5]。

2.2 设计文件特征获取

将DXF格式的工程系统设计文件进行分解,并按关键字提取特征。将层元素、块元素和实体元素对应的序列进行拼接,将拼接结果作为设计文件的特征。

(1) 将表图层中的关键字“TABLE 2 LAYER 5”作为表图层的开始,将关键字“0 ENDTAB”作为表图层的结束,将关键字“0 LEYER 5”所分割的数据作为表图层的数据分片,以关键字定位并提取表图层的每一个数据段构成表图层数据序列L1,L2,…,Ln。

(2) 将块段中的关键词“0 SECTION 2 BLOCKS”作为块段的开始,将关键字“100 AcDbBlockEnd 0 ENDSEC”作为块段的结束,将关键字“0 ENDBLK 5”所分割的数据作为块段的数据分片,以关键字定位并提取块段的每一个数据段构成块段数据序列B1,B2,…,Bm。

(3) 将实体段中的关键词“0 SECTION 2 ENTITIES”作为实体段的开始,将关键字“0 ENDSEC”作为实体段的结束,将关键字“100 AcDbEntity 8”所分割的数据作为实体段的数据分片,以关键字定位并提取实体段的每一个数据段构成实体段数据序列E1,E2,…,ES。

(4) 把实体段中变量的个数定义为实体数量s。

2.3 防篡改码生成

将电力系统设计文件的特征L1,L2,…,Ln,B1,B2,…,Bm,E1,E2,…,ES作为底层叶子,之后相邻的两个节点的哈希值合并成一个字符串,然后计算这个字符串的哈希值,得到的就是这两个节点的父节点的哈希值。如果该层树节点个数是单数,那么对于最后剩下的节点,直接进行哈希运算以获取父节点的值[6]。循环重复上述计算过程,最终计算得到最后一个节点的哈希值,将该节点的哈希值作为整棵树的哈希,将默克尔树的根节点哈希值作为设计文件的防篡改码。DXF防篡改码Merkle图,如图2所示。

图2 DXF防篡改码Merkle图

2.4 篡改检测

由于防篡改码生成比较耗时,为了提高检测效率,在比较时先对比提取的实体是否一致:如果实体个数都不同,则肯定被篡改过;如果实体数目一致再生成篡改码作进一步对比。

(1) 若均通过则获取区块里的工程系统设计文件,结束篡改检测定位。

(2) 若未通过,则获取当前工程系统设计文件的默克尔树,并将其与区块内的默克尔树中各个层的特征值进行对比,根据图层-影响此图层块段-影响此块段实体的顺序,定位设计文件被篡改的数据段,并生成篡改报告。篡改报告包括被篡改过的数据段集合[7-8]。

3 实验分析

3.1 DXF解析

本文实验了不同大小设计文件的篡改检测定位效果和效率,实验中使用的开发语言为Python。

获取一个简易的DXF图形,打开后如图3所示。

图3 DXF篡改前可视化图

这图形主要由4条直线和10个圆圈组成。

对这个DXF分析,DXF文件篡改前结构组成,如图4所示。

图4 DXF文件篡改前结构组成图

可以得知这个文件是由编号44-4D的圆组成和编号52-55的线段组成,DXF版本号为AC1015,层段为1个,块段为3个,实体段为14个。

3.2 篡改检测

对DXF文件进行更改,将其中2个圆改成两个线段。修改后如图5所示。

图5 DXF篡改后可视化图

然后对该DXF文件进行解析,得图6。

图6 DXF文件篡改后结构组成图

原图形圆44和圆45变为线段98和线段99。

文件版本号变为AC1032,层由1个变为2个。通过分析可以得到图形由多少类型的小块构成,那么该图形有多少实体。

若删去一个线段99,实体便会变为13个,如图7所示。

图7 DXF文件篡改后结构组成图

判断实体数量是否发生变化。如实体数量发生变化,文件被篡改。通过解析文件可以发现,文件具体发生变化的是哪个图形。

对初始文件实体进行MD5哈希,如图8所示。

图8 篡改前实体MD5值

对DXF文件图形进行修改,将圆44和圆45变为线段98和线段99,两个MD5值发生变化,如图9所示。

图9 篡改后实体MD5值

两个MD5值发生变化,可以判断DXF文件被篡改。经过类似对比过程可以发现DXF设计文件的改动,目前实验检测准确率为98%以上,小型文件基本是百分百的检测准确率。

3.3 性能分析

以上是篡改方法有效的简单实验示例。下面对真实的DXF文件生成完整的默克尔树,其根节点哈希值就是防篡改码。为了观察不同大小DXF文件生成防篡改码的效率,本实验以100 KB、1 MB和10 MB等3个不同大小量级的DXF文件为例。

首先对3个文件进行解析,生成根节点的数量如图10所示。

图10 根节点生成数量情况

通过图表可以发现,若DXF文件量级达到10 MB,生成根节点的数量会达到上万个。

不同大小文件生成根节点的时间如图11所示。

如今大部分DXF文件的大小都是在100 KB到1 MB之间,100 KB大小文件生成根节点只需要0.2 s左右,而1 MB的文件生成根节点需要2 s左右,满足实际需要。

4 总结

本文提出了一种设计文件篡改检测定位的方法,将多元素的DXF格式设计文件分解,按元素提取最重要的层、块、实体元素和实体数量,构成设计文件的特征;接着,将提取的特征作为底层叶子,利用默克尔树得到文件防篡改码。实验表明该方法可以检测并定位设计文件的篡改位置,检测准确率在98%以上,小型文件达到100%,且对比较大的设计文件的处理效率也在秒级,满足实际使用需要。本文仅针对DXF格式文件篡改检测方法进行研究,在后续研究中,仍需对其他格式文件防篡改技术进行完善。

猜你喜欢
块段关键字哈希
履职尽责求实效 真抓实干勇作为——十个关键字,盘点江苏统战的2021
资源储量估算中地质块段法与剖面法对比分析
成功避开“关键字”
浅析露天矿储量计算方法
基于OpenCV与均值哈希算法的人脸相似识别系统
地质块段法在卡而却卡铜矿区资源量估算中应用及注意事项
基于维度分解的哈希多维快速流分类算法
基于同态哈希函数的云数据完整性验证算法
深部区域块段煤体瓦斯基本参数测定技术研究
一种基于Bigram二级哈希的中文索引结构