基于混沌加密的DCT域灰度级盲水印算法
2015-01-26张建忠孔华生
张建忠+孔华生
摘 要:提出一种混沌加密的DCT域灰度级盲水印算法。该算法利用80位外部密钥和两个混沌序列加密水印图像,为保证水印图像的安全性,两个混沌映射初始条件由外部密钥经过分组和数学变换提供,且动态变化。加密后的水印图像再经过灰度处理后嵌入到数字图像之中。仿真实验表明,该算法对图像信号处理和几何失真有较好鲁棒性,可应用于网络环境下版权保护和多媒体数据认证之中。
关键词:混沌加密;DCT域;盲水印;灰度级
中图分类号:TP316 文献标识码:A 文章编号:2095-1302(2015)01-00-03
0 引 言
作为传统密码学的有效补充,数字水印技术被认为是解决数字化时代数字作品版权保护的一个重要手段,并成为信息安全领域的研究热点[1]。早期研究的水印多以嵌入一个无意义的一维或二维伪随机序列为主,之后逐渐发展到嵌入一个具有可视性的水印图像[2]。二值水印图像或者灰度水印图像嵌入的数据量更多,而且由于人眼在直觉上对图像最为敏感,一维或二维伪随机序列显然不如二值水印图像或灰度水印图像更容易识别[3]。此外,灰度水印较二值水印嵌入的数据量大,不但嵌入难度高,而且难于实现盲提取,在提高水印嵌入鲁棒性的同时,也降低了其透明性,所以许多学者对灰度水印进行了预处理以减少数据的嵌入量。
一个好的数字水印算法应该折中的考虑水印的不可见性和鲁棒性。然而现有的水印加密的方法多数为用一个混沌序列与水印图像进行一定的位运算进行简单的加密,可以很容易被直观地提取出来,在安全性上存在很大风险。而如果对水印的加密过于复杂的话,则其在恢复的时候比较困难;通过改变连续序列数据分布特征实现水印的嵌入,鲁棒性较好,但只能对部分数据项适用,限制了水印嵌入容量[4]。另外根据工作域不同还有空域法和变换域法[5],空域水印直接修改图像的像素,该类算法最大特点是算法简单、计算复杂度低、但鲁棒性较差[6-7]。变换域算法是对图像进行各种各样的变换后嵌入水印,相对于空域水印算法,变换域算法中水印信号能量可以分布到所有像素上,有利于保证水印不可见性;可以较方便地结合HVS (Human vision system),有利于提高鲁棒性[8]。为了加强水印的安全性、不可见性和鲁棒性,本文提出了一种基于混沌加密的 DCT(Discrete Cosine Transform)域灰度级盲水印算法,首先用两个混沌序列置乱水印,然后把水印文件分解成二值序列嵌入到选定DCT块的选定系数中实现水印文件的嵌入。实验结果表明该算法有效,在没有压缩灰度水印数据量的情况下对JPEG 压缩、剪切等图像处理有较好鲁棒性。
1 基于混沌映射的水印加密
混沌是非线性系统出现的类似随机的动力学过程,具有初值敏感性、非周期性、连续宽带频谱及类似噪声的特性,使它具有天然的隐蔽性。混沌序列具有接近δ函数的自相关函数和零互相关函数的统计特性,遍历统计特性类似于白噪声,因此可被应用于数字通信、多媒体数据安全和水印之中,以加强信息和水印的安全性。水印加密是利用外部秘钥通过对密进行钥分组和数学变换来确定混沌映射的初始条件X0、Y0,产生两个混沌序列X、Y。第一个序列用于和水印图像进行异或运算对水印图像进行数据的置乱(每次8 b),第二个序列用来决定给像素中的R、G、B(都占8 b)中的哪一位与第一个混沌序列进行位运算。置乱后的水印图像再经过灰度处理后嵌入到图像文件中。
本文以Logistic映射为例演示混沌序列加密水印算法,具体步骤如下:
第一步,应用一个80 b长的外部密钥,每4 b分成一个秘钥块:
K=k1k2k3…k20(HEX格式) (1)
ki是0-9,A-F。另外,每8 b分成一个秘钥块表示如下,其中Ki代表第i个密钥块:
K=K1K2…K10(ASCII格式) (2)
第二步,利用Logistic映射产生两个混沌密钥序列Xn、Yn用来置乱水印图像:
Xn+1=μXn(1-Xn) (3)
Yn+1=μYn(1-Yn) (4)
混沌序列的初始值X0、Y0通过下面的数学转换得到。
第三步,计算初始条件X0,选择式(2)中三个密钥模块(如:K1K2K3)并把其转换成二进制格式B1:
B1=K1K2K3 (5)
Kij是第i个密钥模块第j个bit位(0或1),用上面二进制形式计算实数X01[9]:
X01=(B1)10/224=(K41×20+K42×21+…+K48×27+K51×28+
K52×29+…+K58×215+K61×216+K62×217+…+K68×223)/224 (6)
用如下公式计算得出X02,其中的 ki 是式(1)中十六进制表示的块:
X02=(k13+k14+k15+k16+k17+k18)10/96 (7)
根据式(6)、式(7)计算的X01和X02,利用以下算法可得映射(3)的初值X0:
X0=(X01+X02)mod 1 (8)
第四步,根据计算获得的X0和式(3)产生一个混沌序列,其中取出区间[0.1,0.9]内的4个迭代值构成一个实数序列f1, f2,…, f4,再把该实数序列用下式转换成整数序列,如式(9)所示,其中int表示整数转换,第k个整数为[9]:
Pk=int(23×(fk-0.1)/0.8)+1 (k=1,2,…,4) (9)
第五步,计算第二个混沌序列的初始状态Y0,选择三个密钥模块转换成二进制形式:
B2=K1K2K3 (10)
Kij是第i个密钥模块第j个bit位(0或1),用上面二进制形式计算实数Y01:
Y01=(B2)10/24 (11)
Y02用如下公式计算得到:
(12)
B2[Pk]表示B2中第Pk个bit位的二进制值(0或1),映射(4)的初始值表示如下:
Y0=(Y01+Y02)mod 1 (13)
第六步,利用初始条件Y0和式(4)迭代产生一个混沌序列y1,y2,y3,y4,…yn。对序列的每个值都扩大十倍后取整,然后对每个值对3取余,具体表示如式(14)所示:
vn=int(yn×10)mod 3 (14)
序列vn决定R、G、B与第一个混沌迭代产生的实数序列进行位运算,如式(15)所示。从文件中取一个像素点的数据,放入大小为3的数组Val中,R放入Val[0],G放入Val[1],B放入Val[2]。序列vn(其值为0、1、2序列)决定R、G、B中的与fi (第一个混沌序列产生的迭代值)中的那一个进行异或操作。其中的char表示取实数的低八位。
Val[j]=Val[j](char(fi))(j=0,1,2,j∈vn) (15)
第七步,水印文件的像素模块加密以后,用如下方程更改K1~K9密钥,
(Ki)10=((Ki)10+(K10)10)mod 256 (1≤i≤9) (16)
用上式修改密钥后,取步骤4中迭代产生的实数序列中的 f4作为第一个混沌映射的初始条件(即X0=f4)再次生成一个新的4位实数序列,之后重复步骤5~7,直到水印文件处理完毕。
2 DCT域灰度级盲水印算法
2.1 灰度级水印预处理
经过1产生的加密水印图像文件为设为W,大小为M×N。对W每个像素值W(i,j),i=1,2,…M,j=1,2,…N,按位分解为二进制,得到一个长度为M×N×8的一维二值水印嵌入序列。
2.2 水印嵌入
将原始灰度图像按8×8进行分块然后进行DCT变换。为较好地满足水印的稳健性和不可见性,选择将水印嵌入到DCT中频系数中[10]。具体步骤如下:
(1)设W为192×192的原始图像数据矩阵,将W按8×8进行分块,每块大小为24×24。对每个分块进行DCT变换,即I'=DCT 2(I)。
(2)将W的像素值分别嵌入到24个8×8的块中,并按加性原则嵌入在中频位置。将水印信息分别嵌入到每个块的第(x,y)系数上,即I'd(x,y)=k×W(i,j),k为嵌入强度。
(3)水印嵌入后,对图像进行离散余弦逆变换,即I''=IDCT(I'd),这样就得到含水印的图像。
2.3 水印提取
水印提取算法大致是嵌入算法的逆过程:
第一步,对嵌入水印后的图像I''按8×8分块,每一块进行DCT变换,得到每一块系数,取出每一块中点(x,y)处系数I''d(x,y)做相应计算:W'(i,j)=I''d(x,y)/k,k为嵌入强度[11]。
第二步,对提取出的水印图像W'(i,j),先灰度级逆处理,然后用混沌序列再进行二值化处理即可得到原始水印图像。
3 仿真实验结果及分析
在DCT域选定一组混沌加密序列作为嵌入参数,盲水印嵌入利用人类视觉掩蔽特性,如图1、2所示。嵌入的水印序列在没有原始图像情况下可以被提取出来,实验结果表明水印对大部分图像信号处理和几何失真具有鲁棒性,如图3、4所示。图5为论文用到的原始水印,图6为恢复水印。
图1输入灰度图像 图2 嵌入水印图像 图3不同像素
图4受噪声破坏的图像 图5原始水印 图6恢复水印
选用峰值信噪比PSNR客观评价图像降质,数据失真率DR客观评价检测水印质量,NC表示原水印和提取水印最大相关系数;
(17)
(18)
各种攻击及其对含水印载体和水印检测结果质量的影响如下:
(1)JPEG压缩:图7描述了在JPEG不同的质量和相应的NC压缩后的恢复水印。显然,水印可以被识别,同时,NC的值均大于0.85。一般来说,当Q从90至20变化过程中,NC是稳步减少而不是像Q一样下降。因此,该算法仍具有鲁棒性和稳定性。
(2)滤波:当水印图像通过高斯低通、中值和不同型号的平均值过滤器进行过滤时,所有的水印如图8和图9所示。此外,NC的值均大于0.83,这表明该算法具有对抗滤波的能力。
(a) Q=90 NC=0.950 9 (b) Q=70 NC=0.927 3 (c) Q=50 NC=0.911 8
(d) Q=30 NC=0.895 4 (e) Q=20 NC=0.868 7
图7 不同品质JPEG压缩后的恢复水印(Q)
(a) s=3 NC=0.907 3 (b) s=4 NC=0.870 8
图8 不同尺寸高斯低通滤波器(s*s)后的恢复水印
(a)Median(s=3)NC=0.910 7 (b)Median(s=5)NC=0.890 8 (c)Median(s=7) NC=0.869 7
(d)Median (s=9)NC=0.850 2 (e)Average(s=3)NC=0.904 7 (f)Average(s=5)NC=0.873 0
(g) Average(s=7) NC=0.857 8 (h) Average (s=9) NC=0.832 4
图9 不同尺寸下中值和均值滤波器(s*s)后的恢复水印
各种攻击及其对含水印载体和水印检测结果质量的影响如表1所示。
表1 攻击及其对载体图像和水印质量攻击方法 载体PSNR 水印
无攻击 43.236 4 1.039 5
JPEG 90% 38.656 3 5.659 4
JPEG 70% 36.146 8 10.626 8
JPEG 30% 33.562 2 23.931 8
高斯噪声 26.748 3 11.258 4
低通滤波 33.515 8 14.216 4
中值滤波 34.753 9 14.469 4
锐化 29.812 3 18.837 1
灰度拉伸 18.776 5 26.890 1
综合 10.166 2 18.123 7
4 结 语
在本算法中利用80 b的外部秘钥通过数学转换计算得到混沌序列的初始值,迭代产生两个混沌序列,以字节的方式加密水印图像像素点,再经过灰度处理后嵌入到图像中。实验显示此算法保证了水印的不可见性,又具有很强的稳健性,受到攻击后的图像提取出来的水印仍能被识别出来,对常见图像处理操作具有较好的鲁棒性。
参考文献
[1]单桂军,时文兵. 基于Shearlet变换的盲图像水印算法[J]. 计算机应用与软件,2014,31(6):319-323.
[2]鲍政, 张建伟, 夏德深. 基于混沌加密的DCT域灰度级盲水印算法[J]. 计算机工程,2006,32(7):157-162.
[3]杨恒伏, 陈孝威. 一种鲁棒的DCT域公开水印算法[J]. 计算机工程,2003,30(11): 142-144.
[4]徐龙秦. DWT域的关系数据库鲁棒性盲水印算法研究[J]. 计算机工程与应用,2010,46(22):153-156.
[5]丁海洋. 基于DCT和DFT视频盲水印算法的研究与实现[J]. 北京印刷学院学报,2012,20(4):32-35.
[6] Yang Qianli, Cai Yanhong. A Digital Image Watermarking Algorithm Based on Discrete Wavelet Transform[C]. Information Technology in Medicine and Education,2012:1102-1105.
[7]郑融, 金聪, 魏文芬, 等. 一种基于混沌加密的DCT域数字图像水印算法[J]. 计算机应用,2005,25(10): 2365-2373.
[8] Kutter M, Winkler S. A vision-base masking model for spread spectrum image watermarking[J]. IEEE Trans. Image Proccessing, 2002,11(1):16-25.
[9] Pareek. N. K, Vinod Patidar, Sud. K. K. Image encryption using chaotic logistic map[J]. Image and Vision Computing ,2006,24(9): 926–934.
[10]信丽萍, 段普. 基于混沌加密的DCT域盲数字水印算法[J]. 计算机安全,2008(4):19-20.
[11]余秋菊. 基于混沌加密的DCT域数字水印算法[J]. 科技信息,2013(2):208-209.
[12] http://www.advancedsourcecode.com/dctwater.asp[EB/OL].2005.