数字水印的攻击类型
引言
数字水印技术作为信息隐藏技术的一种,不可见性和鲁棒性是它的主要特点。通常在水印嵌入时我们需要来确定水印的嵌入量,以此来平衡不可见性和可见性之间的关系。
方法
对于不可见性,我们可以直观的判断出来。但对于鲁棒性,我们需要进行一系列的攻击测试来判断。下面,将介绍数字水印常见的几种攻击类型。
实验结果与讨论
1.常见的攻击类型
1.1 简单攻击
简单攻击是试图对整个水印化数据进行操作来削弱嵌入的水印的幅度,而不是试图识别水印或者分离水印,以此来导致数字水印提取发生错误,甚至根本提取不出来水印信号。常见的有:压缩(JPEG、MPEG)、噪声
1.2 同步攻击
同步攻击是试图破坏载体数据和水印的同步性,被攻击的数字作品中水印仍然存在,而且幅度没有变化,但是水印信号已经发生错位,不能维持正常的水印提取过程所需要的同步性。同步攻击通常采用几何变换方法,常见的有:缩放,裁剪,旋转。、
1.3 削去攻击
削去攻击试图通过分析水印化数据,估计图像中的水印,将水印化的数据分离成为载体数据和水印信号,然后抛弃水印,得到没有水印的载体数据。常见的有:合谋攻击
1.4混淆攻击
混淆攻击是试图生成一个伪源数据、伪水印化数据来混淆含有真正水印的数字作品的版权。常见的有:IMB攻击
2.理论知识及代码
2.1 压缩
在处理数字水印的压缩攻击时,用的最多的是Stirmark工具。
Stirmark工具实操步骤
Step1.在matlab中将水印嵌入后,保存嵌入了水印后的图,我这里保存为了.BMP格式
Step2.将待检测的图放置在文件夹Media\Input\Images\Set1中。
Step3.双击Bin\Benchmark\StirMark Benchmark应用程序,程序会自动运行,会自动将攻击测试后的图放置在Media\Output\Images\Set1中,如图:
程序运行时,会有下面的界面,显示的是攻击测试类型:
若想修改攻击测试的参数,可以在Profiles\SMBsettings里进行修改
Step4.直接从Output\Images\Set1中拿图去提取吧,提取不出来,就是不抗这种攻击哦。
2.2 噪声
常见的几种噪声:高斯噪声、椒盐噪声、泊松噪声、乘性噪声
在matlab中,可以通过imnoise()函数给图像添加这四种噪声,imnoise()函数的调用格式为:
J=imnoise(I,type,parameters)
I:要添加噪声的图像
type:添加的噪声类型,‘gaussian’为高斯噪声,‘localvar’为0均值白噪声,‘poisson’为泊松噪声,‘salt & pepper’为椒盐噪声,‘speckle’为乘性噪声
parameters:噪声的参数,不设置采用默认值。不同的噪声类型,需要设定的参数也不同,下面对高斯噪声和椒盐噪声进行介绍
①高斯噪声
J=imnoise(I,‘gaussian’,m,v)
m:高斯噪声的均值,默认为0
v:高斯噪声的方差,默认为0.01
附上高斯噪声代码:
代码清单 1
clear all; close all; I=imread('coins.png'); J=imnoise(I, 'gaussian', 0, 0.01);%方差为0.01的高斯噪声 K=imnoise(I, 'gaussian', 0, 0.03);%方差为0.03的高斯噪声 figure; subplot(121); imshow(J);title('方差为0.01的高斯噪声') subplot(122); imshow(K);title('方差为0.03的高斯噪声')
②椒盐噪声
J=imnoise(I,‘salt & pepper’,d)
d:噪声的密度,默认为0.05
附上椒盐噪声的代码:
代码清单2
2.3 缩放
这里用imresize()函数,调用格式可以用最基础的:
B=imresize(A,m)
m大于1,图像放大;m小于1,图像缩小
代码清单3
2.4 剪切
这里要注意的是,matlab中有自带的剪切函数,imcrop()函数是我们对一幅图中的某个区域感兴趣需要将这部分剪切下来时使用的,保留的是剪切下来的那部分。而对于数字水印的剪切攻击而言,我们并不是直接调用imcrop()函数,因为我们要保留的是原图“剪切”后剩下的那部分,用图表示就是下面的阴影部分。这里的剪切我用了引号,是因为这里并不是真正的剪切,只是将选中的部分调为白色,也就是像素调为255,(0表示黑色,255表示白色),若原图为灰度图像,直接调为255即可,若原图为RGB彩色图像,需要三色通道都调为255。
下面附上RGB图“剪切”的代码,对于灰度图只用剪切一次即可:
代码清单4
2.5 旋转
图像的旋转通常是以图像的中心为原点进行旋转,旋转后,图像的大小一般都会改变。
函数imrotate()的调用格式如下:
1.B=imrotate(A,angle)
将图像A以原点为中心按照angle角度进行旋转。
angle大于0,逆时针方向旋转;angle小于0,顺时针方向旋转。
(该函数默认使用‘nearest’进行领域插值)
2.B=imrotate(A,angle,method)
将图像A以原点为中心按照angle角度进行旋转,旋转时采用method的方法进行插值。
method的取值有:‘nearest’最近邻插值(默认),'bilinear’双线性插值,‘bicubic’双三次插值
3.B=imrotate(A,angle,method,bbox)
将图像A以原点为中心按照angle角度进行旋转,旋转时采用method的方法进行插值,bbox为旋转之后图像的大小。
bbox的取值有:‘crop’表示输出图像与输入图像大小相等,旋转后的图像进行剪裁;‘loose’表示能将完整旋转图像容下的足够大的图像。
下面对以上几种调用格式的旋转进行操作:
代码清单5
结语
以上就是数字水印常见的一些简单攻击和几何攻击,具体在数字水印当中的应用,就是用这些攻击方法对嵌入水印后的图像进行攻击,保存受攻击后的图,再进行水印的提取,若能提取出水印,则说明水印算法能够抵抗这种攻击,若提取不出来,说明鲁棒性有待提高。
稿件来源:深度学习与文旅应用实验室(DLETA)