第 22卷第 11期2023年 11月
Vol.22 No.11
Nov.2023软件导刊
Software Guide
基于Linux系统的地理信息数字水印系统
设计与实现
邹秀珍1,胡宇宸2,朱长青2
(1.南京吉印信息科技有限公司,江苏南京 210013;
2.南京师范大学虚拟地理环境教育部重点实验室,江苏南京 210097)
摘要:地理信息作为国家基础建设的关键数据,对其进行版权保护的重要性不言而喻。然而,现有地理信息数字
水印系统均基于Windows系统进行开发,无法实现软件的自主可控及满足在Linux操作系统上实现地理信息版权保
护的需求。因此,基于开源的地理空间数据抽象库(GDAL),采用Java语言、Swing框架开发了适用于Linux系统的地
理信息数字水印系统,并从系统设计、关键技术、系统实现等方面介绍系统及其实现细节。该系统由水印嵌入、水印
检测、日志管理、权限管理4个部分组成,针对不同的地理信息数据格式分别设计了数字水印算法,在实现过程中解
决了读写ESRI FileGeodataBase(FileGDB)数据的问题。实验表明,该系统的不可感知性强、算法鲁棒性较高,可抵抗
常见的攻击,弥补了当前地理信息版权保护软件在Linux系统中的空白,真正实现了GIS软件的自主可控,为推动GIS
软件国产化作出了积极贡献。
关键词:版权保护;地理信息;数字水印;软件设计;Linux操作系统
DOI:10.11907/rjdk.231737开放科学(资源服务)标识码(OSID):
中图分类号:TP316.81  文献标识码:A文章编号:1672-7800(2023)011-0009-09
Design and Implementation of Digital Watermarking System for Geographic
Information Based on Linux System
ZOU Xiuzhen1, HU Yuchen2, ZHU Changqing2
(1.Nanjing Geomarking Information Technology Co.,Ltd, Nanjing 210013, China;
2.Key Laboratory of Virtual Geographic Environment of Ministry of Education, Nanjing Normal University, Nanjing 210097, China)Abstract:As the key data of national infrastructure, the importance of copyright protection of geographic information is self-evident. Howev‑er, the existing digital watermarking systems for geographic information are all developed based on Windows operating system, which cannot realize the independent control of the software and meet the demand of copyright protection of geographic information on Linux operating sys‑tem. Therefore, based on the open-source Geospatial Data Abstraction Library (GDAL), this paper develops a geographic information digital watermarking system for Linux operating system by using Java langua
ge and Swing framework, and introduces the system and its implementa‑tion details from the aspects of system design, key technologies, system implementation, etc. . The system consists of four parts: watermark embedding, watermark detection, log management, and permission management, and it designs digital watermarking algorithms for different geographic information data formats and solves the problem of reading and writing data in ESRI FileGeodataBase (FileGDB) in the process of implementation. The experimental results show that the system is imperceptible and the algorithm is robust against common attacks. The imple‑mentation of this system makes up for the blank of the current geographic information copyright protection software in Linux system, truly real‑izes the autonomy and control of GIS software, and makes a positive contribution to promoting the localization of GIS software.
Key Words:copyright protection; geographic information; digital watermarking; software design; Linux operating systems
收稿日期:2023-07-10
基金项目:国家自然科学基金项目(42071362);国家重点研发计划项目(2022YFC3803600)
作者简介:邹秀珍(1988-),男,硕士,南京吉印信息科技有限公司工程师,研究方向为地理空间数
据安全;胡宇宸(1999-),男,南京师范大学虚拟地理环境教育部重点实验室硕士研究生,研究方向为地理空间数据安全;朱长青(1962-),男,博士,南京师范大学虚拟地理环境教育部重点实验室教授、博士生导师,研究方向为空间数据安全、空间数据不确定性等。本文通讯作者:朱长青。
2023 年软件导刊
0 引言
地理信息是国家基础设施建设与地理信息科学研究的基础数据,包含了大量的地理位置信息、空间分布特征和地理属性,被广泛应用于城市规划、环境保护、农业管理等领域[1-3]。然而,随着地理信息的快速增长和广泛流通,随之引起的复制、盗版等侵权问题屡禁不止[4-6],不仅无法保障数据提供者的权益,还阻碍了更多的数据共享和创新,无法推动地理信息领域的持续发展。因此,如何解决地理信息开放共享和版权保护之间的矛盾成为了地理信息领域面临的重要科学问题。
数字水印是一种将特定信息嵌入到数字数据中的技术,通过对数据进行隐蔽性修改,不影响数据的正常使用和感知,但可在需要时提取水印信息以实现版权保护[7-8]。数字水印技术的出现为地理信息的版权保护提供了新思路[9-11],在多年研究中,众多学者们针对不同格式的地理信息设计了多种数字水印算法[12-14]。现有地理信息数字水印算法可分为空间域和变换域算法两类。其中,空间域算法直接使用坐标、像素值、亮度值等作为水印信息载体[15];变换域算法将坐标、像素值等从空
间域转换为变换域后,使用转换后的系数作为水印信息载体[16]。
基于设计的水印算法,学者们逐渐开发了地理信息版权保护系统。张海涛等[17]利用数字水印技术开发了名为
GiSeal的软件,该软件以矢量数据的空间分布特征为基础,将水印信息嵌入搭配数据的冗余信息中。周芳妃[18]设计了基于离散傅里叶变换的自适应矢量地图数字水印算法,基于此开发了适用于矢量地图的数字水印系统。崔翰川等[19]基于ArcGIS Engine开发了矢量地理数据数字水印系统,实现了对于矢量地理数据的版权保护。任娜等[20]开发了适用于4D数据的数字水印系统,实现了对多种格式地理信息的版权保护。邓晓红等[21]介绍了数字水印在南京市规划和自然资源局中,实现数据安全保护中的应用。
虽然,上述开发地理信息数字水印系统现已在各领域得到了广泛应用,但只适用于Windows操作系统,不适用基于Linux内核开发的国产操作系统,因此无法完全满足科研、政府等机构在多个平台上实现地理信息版权保护的需求。
相较于Windows操作系统,国产操作系统由本国技术团队开发,具有自主可控性[22]。其次,国产操作系统可根据国情、安全需求进行定制开发,以提供更强的安全保护和适应性。在实现GIS软件国产化的背景下,虽然开发代码及内容逐渐实现了国产化,但开发平台的不安全性对GIS软件造成了一
定的威胁。因此,开发适用于国产操作系统的GIS软件,可提供更好的数据安全、定制化功能、本地技术支持,跨部门合作优势更强,有助于满足国内用户需求,降低外部技术的依赖。地理信息数字水印系统作为保护地理信息版权的关键软件,确保其安全性是维护国家地理信息安全的关键所在。因此,开发基于Linux操作系统的地理信息数字水印系统,真正实现GIS软件的自主可控,是当前研究的关键问题。
为了解决上述问题,本文使用开源的地理空间数据抽象库(Geospatial Data Abstraction Library, GDAL),开发了适用于Linux操作系统的地理信息数字水印系统,实现了地理信息在Linux操作系统上的版权保护,为地理信息的安全共享和保护提供了新的思路。
1 系统设计
1.1 系统框架
地理信息数字水印系统建设的总体目标是在类型多样、格式繁多的数据中嵌入可代表版权信息的水印,从而实现版权保护。系统要求快速速写不同类型的地理信息,且具备跨平台的能力。因此,数字水印系统基于Linux操作系统,应用开源且跨平台的GDAL库,采用Java语言、
Swing框架进行开发,系统架构如图1所示。由此可见,本文系统以不同数据类型的数字水印算法为基
础,依据C/S 三层架构将其划分为表示层、业务逻辑层、数据访问层,不同层级完成不同的业务需求。
(1)表示层。该层是用户与系统之间的接口,用户通过该层与系统进行交互操作,可输入待处理文件的路径、水印信息,并选择嵌入的数据格式和方法等,将输入数据传递给业务逻辑层进行处理。
(2)业务逻辑层。该层实现了地理信息数字水印系统的应用功能,具体为版权信息加密方法、水印嵌入算法、水印检测算法、用户权限管理、水印日志记录等,版权信息加密方法可对水印信息进行加密以提升水印的安全性,然后水印嵌入算法将加密后的水印信息嵌入待处理数据中。其中,水印检测算法可从数字水印数据中提取水印信息,实现水印的检测和提取;用户权限管理负责管理系统中用户的权限,确保数据的安全性和访问控制;水印日志操作用于记录水印嵌入和提取过程的操作日志,便于追溯和审计。Linux操作系统的稳定性和安全性使业务逻辑层在处理版权信息加密、水印嵌入算法和水印检测算法等关键功能时更可靠。同时,Linux操作系统的良好网络性能和高并发处理能力可支持大规模数据嵌入和提取任务,满足业务逻辑层的性能需求。
(3)数据访问层。该层负责对处理的数据进行读写操作,可从存储介质中读取待处理数据,并将处理后的数据写回存储介质。数据访问层与业务逻辑层进行交互,将待处理数据传递给业务逻辑层进行处理,并存储处理后的数据。Linux操作系统的高度兼容性和可扩展性使系统能与各种存储介质进行交互,包括硬盘、闪存等。此外,Linux 还提供了强大的文件系统支持,可高效读取和写入数据,
··10
第 11 期邹秀珍,胡宇宸,朱长青:基于Linux 系统的地理信息数字水印系统设计与实现确保数据的完整性和安全性。
1.2 系统功能
地理信息数字水印系统采用模块化的设计,由水印信
息生成模块、水印信息嵌入模块、水印信息提取与检测模块、用户权限管理模块、水印日志记录模块组成,如图2所示。
1.2.1 水印信息生成模块
水印信息生成是地理信息数字水印系统的核心功能
之一,该模块负责生成用于嵌入到待处理数据中的水印信息。在处理界面,用户可输入需要嵌入的水印信息,系统将根据用户输入的信息生成水印数据,再对水印信息进行加密以提高水印的安全性,生成的水印信息将传递至水印信息嵌入模块进行处理。
1.2.2 水印信息嵌入模块
水印信息嵌入模块负责将生成的水印信息嵌入待处
理数据中。在处理界面中,用户可选择嵌入的数据格式和方法等参数。通过水印信息嵌入模块,系统将根据用户选择的嵌入算法将水印信息嵌入待处理的数据中。水印嵌入过程通过访问Linux 文件系统与数据访问层进行交互,从存储介质中读取待处理数据,并将处理后的数据写回存储介质。
1.2.3 水印信息提取与检测模块
水印信息提取与检测模块负责从处理后的数据中提
取和检测水印信息。在该模块中,用户可选择进行水印检测的文件路径,系统将采用相应的水印检测算法从待处理数据中提取嵌入的水印信息,并进行验证和检测,以判断数据是否被侵权。
1.2.4 用户权限管理模块
用户权限管理模块负责管理系统中用户的权限,确保
数据的安全性和访问控制权限。该模块与Linux 的用户管理和权限系统进行集成,确保系统的安全性和可控性,以控制用户对系统各功能模块的访问权限。系统管理员可设置不同用户的权限级别,限制其访问和操作系统功能,从而确保只有经过授权的用户才能进行水印信息生成、嵌入、提取和检测等操作,以增强系统的安全性。1.2.5 水印日志记录模块
水印日志记录模块用于记录水印嵌入和提取过程的
Fig. 1 System framework
图1 系统框架
Fig. 2 System function module
图2 系统功能模块
·
·11
2023 年
软件导刊操作并生成日志,以便追溯和审计。该模块在Linux 环境下运行,利用Linux 的特性和功能来实现日志记录的安全性和可靠性,并记录用户的操作行为、嵌入和提取文件信息、操作时间等关键信
息以及用户身份、权限验证等与Linux 系统相关的额外信息。通过记录水印操作的日志可
用于后续审计、追溯和分析,有助于保障水印操作安全,提供证据支持,当发生问题或纠纷时可进行调查和解决。2 关键技术
2.1 水印信息生成
针对不同的嵌入水印信息,将其分为文本版权信息和图像版权信息分别进行处理。对于文本版权信息,首先使用快速反应(Quick Response , QR )码进行编码,使其转为具有版权信息的图像[23]
;然后将图像版权信息使用Logis‑tic 混沌映射进行加密。Logistic 混沌映射模型是一种常见
的水印信息加密算法
[24-25]
,其特点是对初始值及参数极为
敏感,初始值只要有微小的差异就能导致完全不同的结果。应用于图像置乱的Logistic 混沌系统的公式如式(1)所示。图3为使用Logistic 混沌系统加密前后的版权图像信息。
D n +1=μD n (1-D n )
(1)
式中:D n ∈(0,1);0≤μ≤4;n =0,1,2,⋯
linux内核设计与实现 pdf
2.2 水印信息嵌入
2.2.1 矢量数据数字
本文采用的数字水印算法需同时适用于点、线、面数
据,且具备较好的不可感知性和鲁棒性。基于该设计思想,本文使用基于空间域的数字水印算法为系统核心,算法具体步骤如下:
步骤1:将线和面数据转为点集合,以点要素为操作对象。
步骤2:计算点集合的最小凸包,并获得最小凸包的最远点对。
步骤3:分别计算点集合中其他点距离最远点对的两
个点的最短距离,这两个点分别记为P f (x f ,y f )、P l (x l ,y l )。
步骤4:计算点集合内的其他点到点P f 、P l 构成直线的
距离D ,点(x t ,y t )到直线距离的计算公式为:
D =
|(y l -y f )*x t +(x f -x l )*y t +(x l *y f -x f *y l )|(y f -y l )2+(x f -x l )2
(2)
步骤5:计算点集合内的其他点与点P f 构成的线段距离,并计算该距离与点P f 、P l 构成线段距离的比值r 。
r =
(y -y )+(x -x )(y f -y l )2
+(x f -x l )
2
(3)
步骤6:取距离比值r ,根据哈希函数将其量化为水印索引index 。
index =Hash (r *10β)(4)
步骤7:获取加密后的版权图像,并将其转为一维序列Bit ,然后根据水印索引index 获取该点需要嵌入的水印比特bit 。
bit =Bit [index ]
(5)
步骤8:使用量化索引调制(Quantization Index Modula‑
tion , QIM )技术[26-27]将待嵌入的水印比特bit 嵌入到距离D 的小数后第δ位q 中,计算公式如下:
q '=ìíîïï
ï
ïïïbit                      0≤q <S
bit +S              S ≤q <2S ⋯                      ⋯
bit +()n -2S    ()n -2S ≤q <()n -1S bit +()n -1S    ()n -1S ≤q <9
(6)
式中:q '为距离D 小数后第δ位被嵌入后的数值;S 为量化步长;在D 中使用q '替换q 即可得到新的距离D '。
步骤9:重复上述操作,对点P f 、P l 外的其他点依次嵌
入水印信息。
2.2.2 栅格数据数字水印嵌入
本文采用的栅格数据水印算法使用基于密钥矩阵的
栅格数据水印算法[28],该算法将水印信息嵌入栅格像元值的最高和次低位平面,通过生成密钥矩阵进行模板匹配,从而实现水印信息的嵌入和提取。算法具体步骤如下:
步骤1:读取待嵌入的栅格数据R ,R 的大小为M ×N 。步骤2:读取原始栅格数据大小,将加密后的水印信息按照栅格数据的大小进行扩频处理,以得到新的水印信息。
步骤3:首先,遍历栅格数据的每个像元,
将水印信息的对应位与当前像元的最高位进行比较。如果水印信息与最高位相同则记录该像元的位置,并生成一个密钥矩阵Key 。然后,
在密钥矩阵Key 的相应位置处将值设置为1
从而实现了将水印信息嵌入到栅格数据的最高位中,并保持原始像元的最高位值不变。如果水印信息与最高位不相同,则在密钥矩阵Key 的相应位置处将值设置为0,表示该像元未嵌入水印信息。然后,转至步骤4进行水印嵌入操作,将产生的密钥矩阵按照二进制格式进行存储。
步骤4:采取基于特征修改的嵌入规则将水印信息嵌
(a ) Original copyright image
(a ) 原始版权图像
(b ) Logistic encrypted copyright image
(b ) Logistic 加密后版权图像
Fig. 3 Copyright image information before and after encryption
图3 加密前后的版权图像信息
··12
第 11 期邹秀珍,胡宇宸,朱长青:基于Linux 系统的地理信息数字水印系统设计与实现入栅格数据的
次低位,计算公式如下:I l =ìí
î1,
w l (i )=10,
w l (i )=0(7)
式中:I l 表示像素值次低位的值。2.3 水印信息提取
2.3.1 矢量数据数字水印提取
矢量数据数字水印检测流程是水印嵌入的逆过程,具体步骤如下:步骤1:重复水印嵌入的步骤1—步骤6,获取水印索
引index '、距离D ''。
步骤2:对距离D ''再次采用QIM 技术,从其小数后δ位的数值q ''中提取嵌入的水印比特bit '。
bit ′=ìíîïï
ï
ïïïq ''                    0≤q ''<S
q ''-S              S ≤q ''<2S ⋯                      ⋯q ''-()n -2S    ()n -2S ≤q ''<()n -1S q ''-()n -1S    ()n -1S ≤q ''<9
(8)
式中:S 为量化步长。
步骤3:为了增加水印的鲁棒性,在嵌入时同一水印比特会被多次嵌入到不同的点中。因此,根据水印索引index '和提取出的水印比特bit ',使用多数投票法完成水印信息组合。
步骤4:通常通过计算原始水印信息W 与提取出的水印信息W '之间的相似度,来评价水印算法鲁棒性。本文采用归一化相关(Normalized Correlation , NC )值来表征相似度
[29]
,NC 值越大表示数据之间的相似度越高。
NC =
∑i =1
i =O ∑
j =1
j =P XNOR ()
W ()i ,j ,W '()i ,j
O *P
(9)
式中:O *P 表示水印图像的大小;
W (i ,j )、W '(i ,j )分别表示原始水印信息与提出水印信息在(i ,j )位置的水印比
特;XNOR 表示异或非运算。
2.3.2 栅格数据数字水印提取
在对栅格数据进行水印检测与嵌入时,使用的基于密
钥矩阵的栅格数据水印算法相互对应。本文使用了基于模板匹配的水印提取算法进行水印提取。具体步骤如下:
步骤1:读取待检测的栅格数据I '。
步骤2:读取密钥矩阵,如果对应位置处的密钥值为1则根据步骤3进行水印提取,否则根据步骤4进行水印提取。
步骤3:在含水印信息的栅格数据像元值的最高位二进制位中提取水印信息,提取规则为:如果该位置最高位为1,则对应的扩频水印位的值为1;否则,对应的扩频水印位的值为0。计算公式为:
W (i ,j )
=I MSB =ìíî1,
I MSB (i ,j )=10,
I MSB (i ,j )=0(10)
步骤4:在含水印信息的栅格数据像元值的次低位二
进制位提取水印信息,提取规则为:如果该位的二进制最
高位为1,则对应的扩频水印位的值位1;否则,对应的扩
频水印位的值为0。计算公式为:
W (i ,j )
=I l =ìíî
1,
I l (i ,j )=10,  I l (i ,j )=0(11)
步骤5:将得到的扩频水印进行Logistic 逆变换,得到
解密后的扩频水印。
步骤6:将原始水印信息作为待匹配的模板,在提取的扩频水印信息中搜寻目标。如果栅格数据未经过
任何攻击,可在扩频水印信息的第一个位置处获得最佳匹配结果;一旦栅格数据遭受攻击后,为了得到最佳匹配结果,此时扫描扩频水印并与原始水印进行匹配,以计算两者间的相关系数NC 。
步骤7:计算所有的相关系数,以提取出具有最大相关系数的块,并将其作为提取的水印信息。
2.4 Linux 系统下矢量数据读写
由于水印嵌入和检测需要对矢量数据的坐标及其他参数进行修改和读取,因此在Linux 系统中实现矢量数据读写是系统的关键技术之一。矢量数据数字水印的实现过程中,为了减少水印嵌入对数据精度的影响,需要通过原始数据的容差和分辨率来计算嵌入的位置。
目前,多采用ESRI FileGeoDatabase (FileGDB )存储矢量数据。不同于Windows 系统,在Linux 系统中GDAL 并不支持读取FileGDB 内矢量数据容差和分辨率。为了解决该问题,本文首先将ESRI 提供的File Geodatabase API 在Linux 系统中进行编译,从而实现GDAL 对FileGDB 的写入操作;然后将其与jfgdb 库(https ://github/frett27/jfgdb )
编译后生成的.so 文件用于系统开发软件的配置中,从而读取FileGDB 中矢量数据定义和容差。读取容差的具体操作如下:
首先,创建一个地理数据库对象,并打开一个地理数据库;然后,调用getDatasetDefinition ()方法
获取指定数据集的定义信息;接下来,对定义信息中的“<XYTolerance > … </XYTolerance>”及“<XYScale>" … </XYScale>”标签内容进行解析,分别获得容差和分辨率。
<?xml version="1.0" encoding="UTF-8"?>
…<SpatialReference xsi :type="esri :ProjectedCoordinateSystem">…
<XOrigin>-5123200</XOrigin><YOrigin>-10002100</YOrigin>
<XYScale>10000</XYScale><ZOrigin>-100000</ZOrigin><ZScale>10000</ZScale><MOrigin>-100000</MOrigin><MScale>10000</MScale>
<XYTolerance>0.001</XYTolerance><ZTolerance>0.0002</ZTolerance><MTolerance>0.0002</MTolerance>·
·13