一种鲁棒性的基于分组的数字水印方法与流程

文档序号:17896145发布日期:2019-06-13 16:00阅读:493来源:国知局
一种鲁棒性的基于分组的数字水印方法与流程

本发明涉及数字水印方法,尤其涉及一种鲁棒性的基于分组的数字水印方法。



背景技术:

鲁棒性:也就是健壮和强壮的意思,是指系统或者某一方案在一定(结构,大小)参数摄动下,能够维持其功能稳定。比如说,一个计算机系统在执行过程中遇到错误,以及算法在遭遇输入、运算等异常时能继续正常运行,则说明该系统具有鲁棒性。

数字水印:是指将特定的信息嵌入数字产品中,数字产品可能是音频、图片或是影片等。若要拷贝有数字水印的产品,所嵌入的信息也会一并被拷贝。数字水印可分为浮现式和隐藏式两种,前者是可被看见的水印(visiblewatermarking),其所包含的信息可在观看图片或影片时同时被看见。一般来说,浮现式的水印通常包含版权拥有者的名称或标志。隐藏式的水印是以数字数据的方式加入音频、图片或影片中,但在一般的状况下无法被看见。隐藏式水印的重要应用之一是保护版权,期望能借此避免或阻止数字媒体未经授权的复制和拷贝。隐写术(steganography)也是数字水印的一种应用,双方可利用隐藏在数字信号中的信息进行沟通。

数字产品易于编辑、复制、传输,这一方面促进了人类信息的共享,推动了社会的进步,另一方面随之而来的数字产品的版权保护和数据认证问题也变得日益突出,成为数字世界迫切需要解决的问题。目前主要手段之一是采用数字水印技术来解决数据所有权问题和盗版追踪问题。在关系型数据库环境下,要保护数据的版权信息,需要在数据中加入数据拥有者的版权标识,即在数据中嵌入带有版权标识的水印信息,当发生数据的非法拷贝时,通过提取出非法拷贝中的水印信息,可以判断其版权归属。数字水印处理一般包括三个阶段,水印预处理阶段、水印嵌入阶段、水印检测和提取阶段。

在关系数据库的环境下,数字水印系统的基本流程是:先将水印信息用水印嵌入算法嵌入到原始数据集中去,然后将含水印的数据集通过公开的网络环境或者数据拷贝传送到目标用户端,在传输过程中可能发生盗版行为,对于有版权争议的数据集,可通过水印提取算法把水印信息从数据集中提取出来,然后跟原始水印进行对比验证,以确定版权归属。其主要流程如图1所示。

水印预处理阶段的目的是将代表版权信息的有意义的水印信息(可以是文本信息、声音、图像等)转换成数值序列,使其能够嵌入到数据集中去而不破坏数据的可用性。水印嵌入阶段主要的任务是:采用水印嵌入算法,将预处理阶段生成的水印信息嵌入到载体数据中去,使原始载体数据集版权得到保护。水印检测是判断某一数据载体中是否存在水印信息,一般分为盲检测与明检测。需要原始不含水印的数据载体参与的水印信息检测称为明检测,不需要原始数据载体参与也不需要知道原来嵌入的水印信息检测称为盲检测。水印提取是指采用水印提取算法,从含有水印的载体数据中提取出水印信息的过程,水印提取时,有的提取算法需要原始载体数据的参与或者原始水印信息的参加。

目前的数字水印方案很多,在关系数据库水印方面,也有很多种解决方案。agrawal提出对关系数据库中的数值型属性值进行标记的策略(agrawalr,kiernanj.watermarkingrelationaldatabases[c]//vldb'02:proceedingsofthe28thinternationalconferenceonverylargedatabases.2002:155-166.),利用hash函数(参数是用户提供的密钥和元组的主键值)来标记关系数据库的某些元组的某些数值型属性值,并按照水印嵌入算法对这些数值型属性值的某些比特位置1或者0,作为标记,将所有的标记组合起来就是嵌入的水印信息。donghuihu等人提出了一种带有失真控制的可逆数据库水印方案(hud,zhaod,zhengs.anewrobustapproachforreversibledatabasewatermarkingwithdistortioncontrol[j].ieeetransactionsonknowledgeanddataengineering,2018.),通过使用遗传算法生成的密钥结合hash函数来将数据进行分组,然后采用直方图移位算法来嵌入水印信息。这种方案在给数据分组时利用了数据库中元组的主键信息,因而无法抵抗数据结构攻击。假设含水印的数据集在传播过程中遭遇到数据结构攻击,如攻击者破坏了数据库的主键信息,则使得数据库中的水印信息无法提取出来,失去了版权保护的意义。

在关系型数据库环境下,目前提出的数字水印方案,都没有解决在遇到数据结构攻击时,如何防止水印失效这个问题。现有的水印方案,在数据分组或者水印嵌入阶段过于依赖数据库元组的特定属性信息,尤其是元组的主键信息,不能抵抗数据结构的攻击。

因此,如何提供一种鲁棒性的数字水印方案,以防止水印失效,是本领域技术人员所亟待解决的技术问题。



技术实现要素:

为了解决现有技术中的问题,本发明提供了一种鲁棒性的基于分组的数字水印方法。

本发明提供了一种鲁棒性的基于分组的数字水印方法,包括以下步骤:

s1、水印预处理阶段,基于无监督学习方法的数据集分组,完成数据预处理和水印预处理;

s2、水印嵌入阶段,将水印嵌入到数据库中的特定位置;

s3、水印提取阶段,将水印从数据库中提取出来。

作为本发明的进一步改进,还包括步骤s4、基于数字水印的单记录数据溯源阶段,具有针对部分数据的朔源的功能,能够检测部分不完整数据集的版权归属。

作为本发明的进一步改进,在步骤s4中,在判断某条记录a是否来自于某个数据集时,用原始数据集s的分组模型对记录a进行预测,如果记录a在分组模型的预测下,属于数据分组中的子集si,而且从记录a中提取的水印片段跟si集合中的水印片段是一致的,则说明了记录a来自于原始数据集s。

作为本发明的进一步改进,在步骤s1中,采用无监督的学习方法,基于数据集中有价值的属性对数据进行聚类分组。

作为本发明的进一步改进,步骤s1中的数据预处理包括属性选择、数据线性变换、聚类分组;

其中,

属性选择包括:从数据库候选属性中选择n个浮点类型的数值型的属性a1,a2,…,an作为待嵌入水印的候选属性,其中每个属性可容忍的误差为c位十进制数,其中c代表属性中能被嵌入的十进制位数,即可通过修改属性的低c位来嵌入水印;

数据线性变换包括:将数据进行线性变换操作,即对数据进行正则化,如公式(1)所示,

x=norm(x),x∈si(1)

x为某一条记录,si为数据划分的某个子集;

聚类分组包括:采用k-means算法来对数据进行聚类分组,分成k类,以平方误差和作为聚类的目标函数,按照给定样本之间的距离大小,将样本划为k个簇,同一簇内的样本数据基本相似,目标函数如公式(2)所示,

sse表示样本x点到聚类中心ci的质心ci的距离平方和,其中,

x为样本点,ci为第i类的聚类中心,k为类别数,最优的聚类结果使得sse达到最小值。

作为本发明的进一步改进,步骤s1中的水印预处理包括:采用ascii码转换w=ascii(s),将水印被转换成一个新的数值序列w,然后将水印序列分成r份w={w1,w2,…,wr},嵌入到n个不同的属性列中,其中lx为水印的bit数,指定一个密钥key用于水印嵌入阶段时的属性选取操作。

作为本发明的进一步改进,步骤s2包括以下子步骤:

s21、根据水印预处理阶段对数据进行聚类分为k组,令每一子集类别为label,label∈[1,k],首先,对于每一个数据子集slabel,重复步骤s22-26;

s22、对于每一个元组t,t∈slabel,重复步骤s23-26;

s23、计算h(t)=hash(label||key),其中,key为预先指定的密钥;

s24、计算x=mod(h(t),α),其中,α为数值型属性中小数部分的长度;

s25、对于每一个候选属性ai∈t,i∈[1,n],重复步骤s26;

s26、如果mod(h(t),β)==i,其中,β为候选属性的数量,即β∈[1,n],计算index=mod((β||label),k),其中,n为哈希函数的长度,然后将索引为index的子水印windex,index∈[1,r]嵌入到该元组ai属性ai(t)的小数部分的第x位和第x+1位之间,否则,继续循环。

作为本发明的进一步改进,步骤s3包括以下子步骤:

s31、对每一个元组t,t∈sw,sw指含有水印的数据库,重复步骤s32-38;

s32、使用数据预处理阶段,对数据进行聚类分组的模型model来预测该元组t的label;

s33、计算h(t)=hash(label||key),其中,key为预先指定的密钥;

s34、计算x=mod(h(t),α),其中,α为数值型属性中小数部分的长度;

s35、对于每一个候选属性ai∈t,i∈[1,n],重复步骤s36-37;

s36、清空数组m,m为一个数组用于临时存储提取出来的子水印;

s37、如果mod(h(t),β)==i,其中,β为候选属性的数量,即β∈[1,n],计算index=mod((β||label),k),然后将该元组ai属性ai(t)的小数部分的第x位和第x+1位之间的数值提取出来,储存到mindex,index∈[1,r]中去,否则,继续循环;

s38、对每个矩阵mindex采用多数投票法,选取位置index处的数值,即为此子集嵌入的水印信息,将所有的index,index∈[1,r]对应的数值提取出来,构成了整个数据库的水印信息w。

作为本发明的进一步改进,步骤s4包括以下子步骤:

s41、input:欲判断的数据记录a,待检测数据集s,密钥key,针对数据集s的分组模型model,水印信息wm;

s42、用分组模型去预测a的分组label,label=model.predict(a),即a记录有可能是来自于数据集s的子集slabel;

s43、计算h(a)=hash(label||key);

s44、计算i=mod(h(a),β),其中,β为候选属性的数量,即第i个属性含有水印信息;

s45、计算x=mode(h(a),α),其中,α为数值型属性中小数部分的长度;s46、提取记录a中的水印:采用水印提取算法将嵌入的水印片段提取出来,即wm(a)=extract(a,label,i,x);

s47、提取slabel中的水印,求出slabel中嵌入的水印片段的索引,index=hash((β||label),k),其中,k为分组的数目,即slabel看的水印片段为wm(index);

s48、比对记录a与slabel中的水印信息,如果wm(a)==wm(index),则表示记录a来自于数据集s中的slabel子集。

本发明的有益效果是:通过上述方案,提供了一种鲁棒性的基于分组的数字水印方法,在遇到数据结构攻击时,可以防止水印失效。

附图说明

图1是现有技术中数字水印系统的流程图。

图2是本发明一种鲁棒性的基于分组的数字水印方法的流程图。

具体实施方式

下面结合附图说明及具体实施方式对本发明作进一步说明。

图2中的d代表拟嵌入水印的数据集;w代表水印信息;dw示已嵌入水印的数据集;daw表示遭受攻击后的带水印的数据集;we表示从数据集中提取的水印信息。

如图2所示,一种鲁棒性的基于分组的数字水印方法,包括以下步骤:

s1、水印预处理阶段,基于无监督学习方法的数据集分组,完成数据预处理和水印预处理;

s2、水印嵌入阶段,将水印嵌入到数据库中的特定位置;

s3、水印提取阶段,将水印从数据库中提取出来;

s4、基于数字水印的单记录数据溯源阶段,具有针对部分数据的朔源的功能,能够检测部分不完整数据集的版权归属。

在步骤s1中,采用无监督的学习方法,基于数据集中有价值的属性对数据进行聚类分组,这种分组方法解决了以往数据分组依赖主键信息(或特定属性)的问题,从而可以抵抗数据结构攻击。

本方案还具有针对部分数据的朔源的功能,即能够检测一小部分不完整数据集的版权归属。具体为:在步骤s4中,在判断某条记录a是否来自于某个数据集时,用原始数据集s的分组模型对记录a进行预测,如果记录a在分组模型的预测下,属于数据分组中的子集si,而且从记录a中提取的水印片段跟si集合中的水印片段是一致的,则说明了记录a来自于原始数据集s。

在水印预处理阶段主要的任务是完成数据预处理和水印预处理。步骤s1中的数据预处理包括属性选择、数据线性变换、聚类分组;

其中,

属性选择包括:从数据库候选属性中选择n个浮点类型的数值型的属性a1,a2,…,an作为待嵌入水印的候选属性,其中每个属性可容忍的误差为c位十进制数,其中c代表属性中能被嵌入的十进制位数,即可通过修改属性的低c位来嵌入水印;

数据线性变换包括:将数据进行线性变换操作,即对数据进行正则化,如公式(1)所示,

x=norm(x),x∈si(1)

x为某一条记录,si为数据划分的某个子集;这种变换保留了数据的许多跟数据挖掘相关的属性特征,使得数据具有一定的容错率,能够有效抵制子集修改攻击;

聚类分组包括:采用k-means算法这种无监督的学习方法来对数据进行聚类分组,分成k类,k-means算法简单,高效,能够根据用户指定的k个初始质心,以作为聚类的类别数(cluster),重复迭代直至算法收敛。算法核心以平方误差和作为聚类的目标函数,按照给定样本之间的距离大小,将样本划为k个簇,同一簇内的样本数据基本相似,目标函数如公式(2)所示,

sse表示样本x点到聚类中心ci的质心ci的距离平方和,其中,

x为样本点,ci为第i类的聚类中心,k为类别数,最优的聚类结果使得sse达到最小值。

步骤s1中的水印预处理包括:采用ascii码转换w=ascii(s),将水印被转换成一个新的数值序列w,然后将水印序列分成r份w={w1,w2,…,wr},嵌入到n个不同的属性列中,其中lx为水印的bit数,指定一个密钥key用于水印嵌入阶段时的属性选取操作。

基于水印预处理阶段处理完成的情况下,水印嵌入阶段主要将水印嵌入到数据库中的特定位置,并且不会破坏数据的可用性以及嵌入的水印对用户不可见。步骤s2包括以下子步骤:

s21、根据水印预处理阶段对数据进行聚类分为k组,令每一子集类别为label,label∈[1,k],首先,对于每一个数据子集slabel,重复步骤s22-26;

s22、对于每一个元组t,t∈slabel,重复步骤s23-26;

s23、计算h(t)=hash(label||key),其中,key为预先指定的密钥;

s24、计算x=mod(h(t),α),其中,α为数值型属性中小数部分的长度;

s25、对于每一个候选属性ai∈t,i∈[1,n],重复步骤s26;

s26、如果mod(h(t),β)==i,其中,β为候选属性的数量,即β∈[1,n],计算index=mod((β||label),k),其中,n为哈希函数的长度,然后将索引为index的子水印windex,index∈[1,r]嵌入到该元组ai属性ai(t)的小数部分的第x位和第x+1位之间,否则,继续循环。

水印嵌入到特定选择的数字属性的小数部分,这些候选属性都是由数据所有者选择的,以便它们能够可以容忍由水印引起的一定量的数据失真。在小数部分所做的改变,能够使得数据失真的影响最小,从而保证了数据的可用性。

水印的检测和提取阶段,主要的任务就是将水印从数据库中提取出来。水印提取过程跟水印嵌入过程大致一样,只是有些操作的顺序不同。步骤s3包括以下子步骤:

s31、对每一个元组t,t∈sw,sw指含有水印的数据库,重复步骤s32-38;

s32、使用数据预处理阶段,对数据进行聚类分组的模型model来预测该元组t的label;

s33、计算h(t)=hash(label||key),其中,key为预先指定的密钥;

s34、计算x=mod(h(t),α),其中,α为数值型属性中小数部分的长度;

s35、对于每一个候选属性ai∈t,i∈[1,n],重复步骤s36-37;

s36、清空数组m,m为一个数组用于临时存储提取出来的子水印;

s37、如果mod(h(t),β)==i,其中,β为候选属性的数量,即β∈[1,n],计算index=mod((β||kabek),k),然后将该元组ai属性ai(t)的小数部分的第x位和第x+1位之间的数值提取出来,储存到mindex,index∈[1,r]中去,否则,继续循环;

s38、对每个矩阵mindex采用多数投票法,选取位置index处的数值,即为此子集嵌入的水印信息,将所有的index,index∈[1,r]对应的数值提取出来,构成了整个数据库的水印信息w。

本方案具有针对部分数据的朔源的功能,即能够检测一小部分不完整数据集的版权归属。以判断记录a是否来自于数据集s为例,步骤s4包括以下子步骤:

s41、input:欲判断的数据记录a,待检测数据集s,密钥key,针对数据集s的分组模型model,水印信息wm;

s42、用分组模型去预测a的分组label,label=model.predict(a),即a记录有可能是来自于数据集s的子集slabel;

s43、计算h(a)=hash(label||key);

s44、计算i=mod(h(a),β),其中,β为候选属性的数量,即第i个属性含有水印信息;

s45、计算x=mode(h(a),α),其中,α为数值型属性中小数部分的长度;

s46、提取记录a中的水印:采用水印提取算法将嵌入的水印片段提取出来,即wm(a)=extract(a,label,i,x);

s47、提取slabel中的水印,求出slabel中嵌入的水印片段的索引,index=hash(β||label),k),其中,k为分组的数目,即slabel看的水印片段为wm(index);

s48、比对记录a与slabel中的水印信息,如果wm(a)==wm(index),则表示记录a来自于数据集s中的slabel子集。

本发明提供的一种鲁棒性的基于分组的数字水印方法,具有以下优点:

1、本发明提出的用于版权保护的水印方法具有鲁棒性,能够抵御各种重要的攻击类型,包括数据重新混洗/排序,大量子集选择,数据的线性变化,数据随机更改,数据结构攻击等。

2、可以实现小部分盗版子集的追踪识别,能够判断某一条数据记录是否来自于某个数据库。

以上内容是结合具体的优选实施方式对本发明所作的进一步详细说明,不能认定本发明的具体实施只局限于这些说明。对于本发明所属技术领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干简单推演或替换,都应当视为属于本发明的保护范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1