P.W.Wong脆弱性水印算法
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《信息隐藏课程大作业》
—P.W.Wong脆弱性水印算法
学院计通学院
专业班级信安1102
姓名尹昊
学号 ********
一、基本原理
典型的脆弱水印是P.W.Wong水印系统。
这是基于公钥的图像认证和完整性数字水印系统。
基本思想就是利用hash函数的单向性和能在输入发生微小变化时得到完全不同输出值的特点,结合图像分块来完成对图像像素值微小改变的定位。
借助公钥系统的便利性,使得任何人,只要他能获得作者的公钥,便可以完成对图像的完整性检测和身份认证。
二、算法实现
1.嵌入过程
☐以大小为M*N像素灰度图像X m,n为例,要把同样大小的二值化水印图像W m,n嵌入到载体图像X m,n中得到含水印图像Y m,n。
为此,逐块进行水印的嵌入,嵌入过程如下:
⏹假定X表示载体图像X m,n中第r块子图,将X的LSB(最低有效位)
平面值置为0得到X’
⏹设H()是一种哈希加密函数,用下式计算哈希值,
H(M,N,X’)=( P1r, P2r, … , P s r)
其中:P i r是哈希函数的输出比特值,S是输出比特位的大小,其值取
决于所使用的特定哈希函数,例如对SHA256算法而言S=256。
取前
I*J位构成哈希值输出矩阵d m,n
⏹对d m,n和对应的W m,n中的子块W r中的子块通过逐位异或运算得到新
矩阵C r,C r=W r⊕d m,n
⏹使用非对称加密公钥中的私钥对C r进行加密运算,S r=E r(C r),其
中E()表示一公钥加密系统,K表示私钥
⏹最后把得到的二进制值S r嵌入到X’的LSB位得到含水印图像取反后
Y m,n的第r个子块
⏹重复上面的步骤直到最后每一块水印都被添加到宿主图像中
流程图:
2. 提取过程
☐ 水印提取过程与嵌入过程相似,首先将待检测图像Z m,n 分块记
为Z r ,水印的检测过程如下图所示:
⏹ 把待检测的图像的每个子块Z r 分为两部分:第一部分G r 是Z r 子块中每
个像素最低有效位的值,第二部分Z’是把Z r 子块的LSB 平面置零的值
⏹ 利用公钥加密系统的公钥K 对G r 解密得到U r ,U r =E r (G r )
⏹ 计算M,N 和Z’的哈希值记为Q r
⏹ 使用嵌入水印时第三步骤的操作提取出水印:B r =Q r ⊕U r
⏹ 重复上面步骤,直到恢复出每一块的水印信息,得到提取的二值水印图像
取反后B m,n
含水印的图像分块X’r
Sr
标志水印分块
私钥
图像分块X
X’ 图像素N 图像素M
H(M,N,X’) Xor 加密
S 嵌入X’的LSB
LSB 置0 0-1取反
Wong 算法水印嵌入流程图
流程图:
三、 实验过程
本次实验是在matlab 环境下进行编程实现的,在main 文件下是主要运行的过程函数,.\image 文件下是图片素材,.\code 文件是密码算法的实现过程函数,.\hide 文件哈希算法的实现过程函数。
1、 选用.\image\origin.png 图像像素256X256的灰度图像作为载体,
和同样大小的.\image\print.png 二值图像作为标志水印
2、 将载体图像分为16X16的块并去掉LSB ,对每块在.\hide 文件下提
供的接口函数inter.m 采用SHA256算法计算HASH 值并且与二值化的水印图像进行异或运算得到嵌入值
3、 把上一步得到的嵌入值作为明文,对每块的嵌入值在.\code 文件Ur Qr 公钥
Gr 该图像分块的提取水印B’r
Sr 图像分块Zr
Z’
图像素N 图像素M
H(M,N,Z’) Xor 解密
0-1取反
LSB 置0
Wong 算法水印提取流程图
提取LSB 值
下提供的接口函数interen.m采用RSA公钥密码算法计算出密文,最后将其嵌入原始图像的LSB中得到嵌入水印后的图像
4、把嵌入水印后的图像进行篡改,篡改的图像同样分为16X16的块
并去掉LSB,也同样采用SHA256算法计算HASH值
5、提取图像的LSB值对每块在.\code文件下提供的接口函数
interde.m采用RSA公钥密码算法计算出明文后再与得到的HASH 值进行异或运算还原出水印图像
实验结果如下图:
四、总结
本次实验由于考虑过于单一,采用的是256X256大小的图像和水印并生成的HASH值也是256位,RSA密码算法所采用的公钥和私钥也是按照等明文密文分组长度测试选取的,有很大的局限性,只是满足了生成的HASH值位数与图像像素点的的个数能一一对应,尽量满足全部嵌入图像的LSB。
后经过考虑,认为可以有两种办法能更好的灵活运用。
1.可以嵌
入图像的多个层面,经实验发现最多可以嵌到4层而人眼不易觉察到。
这样可以不用限定HASH算法得到的值的长度以及密码算法明文密文分组的不同。
2.可以对获得的HASH值进行分段选取,因为同样的文件用相同参数和算法算得的摘要肯定是一样的,所以选取算得的HASH值的一部分作为要嵌入的初始数值,或者是选取HASH值的多
个段做异或后作为嵌入的初始数值,总之是设定一个所需要的数值长度,这同样可以宽松对于密码算法密钥选择的限制。
在实际运用中可以考虑上述改进的考虑方案。
对课程的思考建议:
信息隐藏技术这门课通过理论知识的学习让我更加了解了信息安
全运用的广泛性,并且提高了对于信息处理的思考方式,通过老师上课所列举的实例让我更加明白了信息隐藏的具体应用和实现方法,又通过实验对编程实践能力有了一定的提高,也对文件格式有了进一步的认识。
程序源文件->matlab程序实现。