信息隐藏与数字水印原理与matlab实现
【关键词】水印技术 隐藏 嵌入
【内容摘要】
随着计算机应用逐渐广泛、网络技术的迅速发展,使图文、音频、视频等多媒体信息都能以数字形式传输、阅读和播放,从而使大规模非授权拷贝成为了可能,而这样会损害音乐、电影、书籍和软件等出版业的健康发展。为了保护知识产权,引发了一个很有意义的研究方向:信息隐藏。
第一章 摘要
本文首先介绍了数字水印技术的原理和分类
所谓的信息隐藏是利用媒体信息普遍存在的冗余特性,将秘密信息隐藏在其他媒体信息中。其首要目标就是使加入隐藏信息后的媒体目标的质量下降,尽可能地小,使人无法觉察到隐藏的数据,或者知道它的存在,但未经授权者无法知道它的位置,并不像传统加密过的文件一样,看起来是一堆会激发非法拦截者破解机密资料动机的乱码,而是看起来和其它非机密性的一般资料无异,因而十分容易逃过非法拦截者的破解。其道理如同生物学上的保护色,巧妙地将自己伪装隐藏于环境中,免于被天敌发现而遭受攻击。被人们誉为历史学之父的古希腊历史学家希罗多德(Herodotus,486-425),在其著作中讲述了这样一则故事:一个名叫Histaieus的人筹划着与他的朋友合伙发起叛乱,里应外合,以便推翻波斯人的统治。他找来一位忠诚的奴隶,剃光其头发并把消息刺在头皮上,等到头发义长起来了,把这人派出去送“信”,最后叛乱成功了。
- 信息隐藏的原理
2.1信息隐藏技术的特点
|
2.1.1不可感知性
信息隐藏技术利用信源数据的自相关性和统计冗余特性,将秘密信息嵌入数字载体中,而不会影响原载体的主观质量,不易被观察者察觉。如果载体是图像,所做的修改对人类的视觉系统应该是不可见的;如果载体是声音,所做的修改对人类的听觉系统应该是听不出来的。
秘密信息的嵌入在不改变原数字载体的主观质量的基础上,还应不改变其统计规律,使得运用统计检查工具检查到隐秘载体文件中秘密信息的存在性也是非常困难的。
2.1.2鲁棒性
鲁棒性反映了信息隐藏技术的抗干扰能力,它是指隐藏信息后数字媒体在传递过程中,虽然经过多重无意或有意的处理信号,但仍能够在保证较低错误率的条件下将秘密信息加以恢复,保持原有信息的完整性和可靠性,它也称为自恢复性或可纠错性
对隐藏信息的处理过程一般包括数/模、模/数转换;再取样、再量化和低通滤波;剪切、位移;对图像进行有损压缩编码,如变换编码、矢量量化;对音频信号的低频放大,等等。
2.1.3隐藏容量
将信息隐藏技术应用于隐蔽通信中时,为了提高通信的效率,往往希望每一个数字载体文件能够携带更多的秘密数据。隐藏容量是反映这种能力的一个指标,它是指在隐藏秘密数据后仍满足不可感知性的前提下,数字载体中可以隐藏秘密信息的最大比特数。
随着数字隐藏技术的发展,在特定的应用方面对其技术性能又提出了更高、更具体的要求。在一般的信息隐藏方法中,这些特性都是相互冲突、互相矛盾的。例如,有的方法隐藏容量大,但鲁棒性较差;有的方法鲁棒性很好,但不可感知性较差;有的方法鲁棒性较差,但运算量较小,等等。应根据实际的需求对各种性能做出选择和择中,从而找到最合适的信息隐藏方法。
在信息隐藏算法中,主要有空间域算法和变换域算法。最典型的空间域信息隐藏算法为LSB算法。LFTurnet与RGVan利用LSB算法将信息隐藏在音频和数字图像中。Bender提出了通过修改调色板统计信息来嵌入秘密数据库的隐藏算法。Patchwork方法采用随机技术选择若干对像素,通过调节每对像素的亮度和对比度来隐藏信息,并保证这种调整不影响图像的整体观感。丁玮从数字图像的透明叠加方法出发,提出了基于融合的数字图像信息隐藏算法。并根据七巧板的游戏原理,提出了隐藏数字图像的Tangram算法,Marvel将数字图像看作嗓声,提出了空间域中的扩频数据隐藏方法。Lippman使用信号的色度,提出了在国家电视委员会的色度信道中隐藏信息的方法。Liaw和Chen提出了将秘密图像嵌入到载体图像中的灰度值替方法,为了适合灰度值替换,Wu和Tsai提出了使用图像差分的改进方法;Wu和Tsai还在人类视觉模型的基础上,提出了在数字图像中嵌入任何类型数据的数据隐藏方法;Tseng和Pan提出了一种安全的、大容量的数据隐藏算法;Provos通过随机嵌入和纠错编码的方法改进了信息隐藏的性能,Solanki等从信息论的角度出发,将视觉标准引入到通过量化来嵌入信息的方法,并由此提出了一种高容量的信息隐藏算法。
在变换域算法中,正交变换的形式可以有离散傅立叶变换(DFT),离散余弦变换(DCT),小波变换(Wavelet)等。由于变换域算法利用了人眼对于不同空间频率的敏感性,在适当的位置嵌入信息具有更好的鲁棒性和不可觉察性。容量也较高,所以变换域隐藏算法比空间域算法复杂。最具代表性的变换域算法是Cox在1995年提出的扩频算法。Andreas Westfel和Pitas分别提出了通过模拟图像水平或者垂直移动将秘密数据嵌入到图像的DCT系统的数据隐藏算法,管晓康提出了Pitas算法的改进算法,克服了该算法中嵌入数据量小的缺点。丁玮成功地将该算法修改并在小波域中运算该算法,并通过置乱技术改进了Pitas算法中的随机数策略,消除了误判的可能性。
2.2数字水印的特点
2.2.1安全性:数字水印的信息应是安全的,难以篡改或伪造,同时,应当有较低的误检测率,当原内容发生变化时,数字水印应当发生变化,从而可以检测原始数据的变更;当然数字水印同样对重复添加有很强的抵抗性
2.2.2隐蔽性:数字水印应是不可知觉的,而且应不影响被保护数据的正常使用;不会降质;
2.2.3鲁棒性:是指在经历多种无意或有意的信号处理过程后,数字水印仍能保持部分完整性并能被准确鉴别。可能的信号处理过程包括信道噪声、滤波、数/模与模/数转换、重采样、剪切、位移、尺度变化以及有损压缩编码等。主要用于版权保护的数字水印易损水印(Fragile Watermarking),主要用于完整性保护,这种水印同样是在内容数据中嵌入不可见的信息。当内容发生改变时,这些水印信息会发生相应的改变,从而可以鉴定原始数据是否被篡改。
2.2.4水印容量:是指载体在不发生形变的前提下可嵌入的水印信息量。嵌入的水印信息必须足以表示多媒体内容的创建者或所有者的标志信息,或购买者的序列号,这样有利于解决版权纠纷,保护数字产权合法拥有者的利益。尤其是隐蔽通信领域的特殊性,对水印的容量需求很大。
2.3数字水印的基本原理
目的是将特定的信息加入到需要保护的媒体信息中,加入的信息一般是能够代表媒体信息版权的内容,如公司标志、媒体作者、特定代码等,而且要保证数字水印能够抵抗一定的攻击,而不被轻易的破坏和修改,同时数字水印要能够被提取或者能够被检测到。数字水印的具体内容、算法、提取或检测过程根据实际应用有不同的要求。数字水印的嵌入和提取过程如图1,图2所示。
图1 数 字水印的嵌入过程
图2 数字水印的提取过程
图1是数字水印的嵌入过程,加入密钥可以提高数字水印的隐蔽性、抗攻击性,而并非是必须的。根据用途不同,,嵌入的水印有些是需要还原的,而有些则只需验证水印的存在性,前者需要数字水印的提取算法,而图2需要数字水印的检测算法,根据具体的水印算法,嵌入或提取的过程可能有所不同。
3.1matlab实现程序
clear
clc
M =512;%原图像长度 N =64;
%水印图像长度 K =8;
I=zeros(M,M);
J=zeros(N,N);
BLOCK=zeros(K,K);
%显示原图像 subplot(2,3,1);
I=imread('C:\Documents and Settings\Administrator\桌面\图像.jpg','jpg');
imshow(I);
title('原始公开图像');
%显示水印图像 subplot(2,3,2);
J=imread('C:\Documents and Settings\Administrator\桌面\水印.jpg','jpg');
imshow(J);
title ('水印图像');
%水印嵌入 for p=1:N for q=1:N
x=(p-1)*K+1; y=(q-1)*K+1;
BLOCK =I(x:x+K-1,y:y+K-1);
BLOCK=dct2(BLOCK);
if J(p,q)==0 a=-1;
else a=1;
end
BLOCK(1,1)=BLOCK(1,1)*(1+a*0.03);
BLOCK=idct2(BLOCK);
I(x:x+K-1,y:y+K-1)=BLOCK;
end
end
%显示嵌入水印后的图像 subplot(2,3,3);
imshow(I);
title('嵌入水印后的图像');
imwrite(I,'C:\Documents and Settings\Administrator\桌面\图像.jpg','jpg');
%从嵌入水印的图像中提取水印
I=imread('C:\Documents and Settings\Administrator\桌面\图像.jpg','jpg');
J=imread('C:\Documents and Settings\Administrator\桌面\水印.jpg','jpg');
J=imnoise(J,'gaussian',0,0.01);
subplot(2,3,4);imshow(J,[]);
title('加入高斯噪声');
I=imread('C:\Documents and Settings\Administrator\桌面\图像.jpg','jpg');
J=imread('C:\Documents and Settings\Administrator\桌面\水印.jpg','jpg');
J=imnoise(J,'gaussian',0,0.01);
subplot(2,3,4);imshow(J,[]);
title('加入高斯噪声');
for p=1:N for q=1:N x=(p-1)*K+1;
y=(q-1)*K+1;
BLOCK1 =I(x:x+K-1,y:y+K-1);
BLOCK2 =J(x:x+K-1,y:y+K-1);
BLOCK1=dct2(BLOCK1);
BLOCK2=dct2(BLOCK2);
a = BLOCK2(1,1)/BLOCK1(1,1)-1;
if a<0 W(p,q)=0;
else W(p,q)=1;
end end end
%显示提取的水印 subplot(2,3,5);
imshow(W);
title('从含水印图像中提取的水印')[3];
3.2水印前图片
嵌入的文件
3.3嵌入文件后的图片
3.4 RSA的MATLAB实现
1. 模n求逆函数
function [d]=moni(u,n)
n1=n;
n2=u;
b1=0;
b2=1;
for i=0:1000
q=floor(n1/n2);
r=n1-q*n2;
i=i+1;
if r~=0
n1=n2;
n2=r;
t=b2;
b2=b1+q*b2;
b1=t;
else
break
end end if n2~=1
warning(‘所求的模逆不存在‘);
end if n2= =1
if 0= =mod(i,2)
b2=-b2;
else
b2=b2;
end
d=mod(b2,n);
%return; end
2.求模n的大数幂乘函数
function [dashuchenmi]=dashuchenmi(x,r,n);
a=x;
b=r;
c=1;
for i=1:1000 if b= =0
dashuchenmi=c;
end
if mod(b,2)~=0
b=b-1;
c=mod(c*a,n);
else
b=b/2;
a=mod(a*a,n);
end
end
dashuchenmi=c;
3.主函数 clc clear
fid=input(‘输入待加密的明文:’,‘s’);
f=abs(fid);
p=input(‘输入第一个大素数:’);
q=input(‘输入第二个大素数:’);
e=input(‘输入加密密钥:’);
n=p*q;
fain=(p-1)*(q-1);
d=moni(e,fain);
for i=1:length(f)
miwen(i)=setstr(dashuchenmi(f(i),e,n));
end
for i=1:length(f)
mingwen(i)=setstr(dashuchenmi(miwen(i),d,n));
end
miwen
mingwen
实验结果:
输入待加密的明文:2106
输入第一个大素数:43
输入第二个大素数:59
输入加密密钥:13
密文=
2321
明文=
2106
【参考文献】
1.王磊 - 《计算机工程与应用》,2002年 第23期
2.祁明,刘迎风 - 《通信技术》,2001年06期
3.牛少彰,郭芬红,钮心忻 - 《北京邮电大学学报》,2004年06期
4.胡春萍 - 《电脑学习》,2006年02期