经常有文章把数字签名和数字水印“傻傻分不清”,那今天就介绍一下数字水印。
一、数字水印技术原理
数字水印是一种信息隐藏技术,它利用人体感官的限制,将数字信号,如图像、文字、符号、数字等一切可以作为标记、标识的信息与原始数据(如图像、音频、视频数据)紧密结合并隐藏其中,并可以经历一些不破坏源数据价值的操作而能保存下来。
一般地,数字水印应具有如下的基本特性:
(1)可证明性:水印应能为受到版权保护的信息产品的归属提供完全和可靠的证据。
(2)不可感知性:不可感知包含两方面的意思,一个指视觉上的不可感知性(对听觉也是同样的要求),即因嵌入水印导致图像的变化对观察者的视觉系统来讲应该是不可察觉的,最理想的情况是水印图像与原始图像在视觉上一模一样,这是绝大多数水印算法所应达到的要求;另一方面水印用统计方法也是不能恢复的,如对大量的用同样方法和水印处理过的信息产品即使用统计方法也无法提取水印或确定水印的存在。
(3)鲁棒性:鲁棒性即健壮性,它对水印而言极为重要。一个鲁棒性强的数字水印应该能够承受大量的、不同的物理和几何失真,包括有意的(如恶意攻击)或无意的(如图像压缩、滤波、扫描与复印、噪声污染、尺寸变化等等)。但易碎水印技术恰恰与之相反,其鲁棒性很低,它所保护信息的微小变化都会引起水印被破坏。
二、一种使用易碎水印保护图像的方法
基于易碎水印的基本原理,我们可以使用它来保护图像,即当图像被更改后,哪怕是一个像素,都会破坏水印本身,从而达到验证保护的目的。
其基本思想是修改原图像中的每一个像素点的值,使得修改后的图像经过某一种算法的运算可以得到一个新的二值图像或文本,即水印。基本步骤为:
- 首先设定一个映射函数f,通过此函数可以将原图像g的每一个像素值映射成一个二值L(0或1):
- 设要嵌入的水印为W,W可以是一个二值图像,也可以是经过编码的字符串,这里面所使用水印为二值图像。根据以下公式修改原图像g的每一个像素值,使得修改后的g中每一个像素点的值通过f运算后都与W相同(要注意的是,修改幅度必须足够小,使肉眼观察不能察觉):
这样水印图像就被嵌入到原图像中了。
- 提取、验证水印。假设待提取水印的原图像为g,验证对照的水印图像为W。通过f函数算出g每个像素的对应二值W’,即为提出的水印。
将提取出的水印图像W’与W比较,就可以判断原图像g是否被更改过
下图就展示了水印保护的效果示意,原图像被修改后,对应的水印部分就会被破坏。
三、数字水印嵌入与提取
根据易碎水印保护图像的基本原理,可以设计出以下使用流程。
1.在原图像中的水印嵌入步骤
1)首先选择一张8位二值BMP图片作为水印图像;
2)从原图像的第一行第一列开始,逐个像素进行运算,
3)将当前像素的红、绿、蓝 三原色值取出,分别为R、G、B;
4)将R、G、B在映射表(Table)中所对应的映射结果(0或1)取出,并进行异或运算,得到运算结果P;
5)取出水印图像对应位置像素的值,并除以255,得到结果W。因为水印为二值图像,像素值为0或255,故除以255后变成0和1方可做下面比较;
6)若P=W,则跳回步骤2),进行下一像素的运算;
7)若P<>W,在R、G、B中随机选中一个,修改其数值。如果数值大于175,数值减去1,如果数值等于或小于175,则数值加1;
8)跳到步骤3)重新进行运算;
9)原图像全部像素处理完毕,水印嵌入完成。
2.在图像中提取水印嵌入步骤
1)从图像的第一行第一列开始,逐个像素进行运算,
2)将当前像素的红、绿、蓝 三原色值取出,分别为R’、G’、B’;
3)将R’、G’、B’在映射表(Table)中所对应的映射结果(0或1)取出,并进行异或运算,得到运算结果P’;
4)将P’值乘以255,得到结果W’。即为水印图案在此位置的像素值;
5)跳回步骤2),进行下一像素的运算;
7)最后得到水印图像。
通过提取图像中的数字水印,并与原水印对比,可以检测图像是否被篡改过。正是因为数字水印也可以用来检测数据的完整性,所以出现了把数字签名称为数字水印的情况,通过上面的介绍就应该知道,数字签名和数字水印是完全不同的技术。
四、强壮性数字水印的使用
上面提出了用易碎水印保护图像完整性的方法。其实数字水印更多地被用于多媒体数据的版权保护。比如以前的画家用印章或签名标识作品的作者,那么今天的艺术家可以通过数字水印将自己的名字添加到作品中来完成著作权的标识。同样,影视音像公司也可以把公司的名字、标志等信息添加到出版的多媒体数字产品中。这样通过跟踪多媒体数据中的数字水印信息来保护多媒体数据的版权。这里的水印都是鲁棒性强的水印,也就是强壮性水印。因为只有采用强壮性的水印,才能保证无论盗版者怎么修改、压缩、转换数字作品,里面的数字水印信息都能尽量的保留下来,以作为版权拥有者追究盗版行为的有利证据和武器。
除了在版权保护方面的应用,数字水印技术在文档(印刷品、电子文档等)的真伪认证上面也有很大的用途,将某些难以察觉的数字水印信息添加到文件中,大大增加了文件被伪造的难度。例如护照持有人的姓名在护照中被明显印刷出来,也可以在头像中将持有人姓名做为数字水印被隐藏起来,如果某人想通过更换头像来伪造一份护照,那么通过扫描护照就有可能检测出隐藏在头像中的水印信息与打印在护照上的姓名不符合,从而发现被伪造的护照。