✅作者简介:CSDN内容合伙人、信息安全专业在校大学生
系列专栏 :信息隐藏实验报告
新人博主 :欢迎点赞收藏关注,会回访!
舞台再大,你不上台,永远是个观众。平台再好,你不参与,永远是局外人。能力再大,你不行动,只能看别人成功!没有人会关心你付出过多少努力,撑得累不累,摔得痛不痛,他们只会看你最后站在什么位置,然后羡慕或鄙夷。
2021~2022学年第 2 学期
实验一 空域图像 LSBR
理解并掌握空域图像最低有效位替换(LSBR)隐写算法
1.位平面 **
以灰度图像为例,采用无符号 8 位整型(unit8)数组存储,图像像素的 8 位由低至高组成了 8 个位平面,第一个位平面由每个像素的最低位组成,第八个位平面由每个像素的最高位组成。如下图:
图表 1 图像的位平面
所组成的 8 个位平面在图像中所代表的重要程度是不同的,如下图所示:
从上图可以看出,将嵌入信息嵌入到图像像素的最低位,对整个图像没有明显的影响,从而达到信息隐藏的目的。图像像素的最低位一般称为LSB(Least Significant Bits)。
2.LSBR描述
** LSB 算法的核心是将选取像素点的最不重要位依次替换成秘密信息,嵌入秘密信息过程包括选择图像载体的一个像素点子集{C1,C2……CL(m)},(L(m)为秘密信息的二进制序列长度),然后在子集上执行替换操作:LSB(Ci) <- mi,即把像素 Ci的最不重要位替换成秘密信息 mi,mi为秘密信息的比特位,可以是 1 或 0。LSB 算法中,也可以替换载体图像像素点的多个比特(如最低两个比特)来嵌入秘密信息,以增加信息的嵌入量。秘密信息提取,找出嵌入信息的像素点子集,将这些像素点 的 LSB 提取出来,恢复出秘密信息。算法描述如下:
嵌入过程: 根据载体图像大小及秘密信息的二进制序列长度,选择像素{C1,C2……CL(m)}
for i=1:L(m)
LSB(Ci) <- mi
提取过程:
for i=1: L(m)
mi <-LSB(Ci)
像素点的选择方法有两种:顺序选择和随机选择
3.Stego 的峰值信噪比(PSNR)
** 峰值信噪比(英语:Peak signal-to-noise ratio,常缩写为PSNR**)是一个表示信号最大可能功率和影响它的表示精度的破坏性噪声功率的比值的工程术语。由于许多信号都有非常宽的动态范围,峰值信噪比常用对数分贝单位来表示。
_ _
4.卡方分析法
** **灰度直方图是关于图像灰度级分布的函数,它将数字图像中的所有像素,按照灰度值的大小,统计其出现的次数,即图像中具有某种灰度级的像素的个数。在原始图像(灰度值为0-255)中,相邻灰度值的像素块数目一般差别很大。但在LSB信息隐藏中,秘密信息在嵌入之前往往经过加密,可以看作是0、1随机分布的比特流,而且值为0与1的可能性都是1/2。如果秘密信息完全替代载体图像的最低位,那么伪装对象相邻灰度值的像素块数目将会比较接近,所以可以根据这个性质判断图像是否经过隐写。在这种情况下,可以将相邻的灰度值两两分组(灰度值一奇一偶),因为嵌入信息总是嵌入载体图像的最低比特位,其像素值要么不变,要么出现由奇数到相邻偶数(减一)、或由偶数到相邻奇数(加一)的改变,这种改变会改变直方图的分布(由差别很大变得近似相等),但是却不会改变这组整体的像素块数目之和。此外,卡方检验就是统计样本的实际观测值与理论推断值之间的偏离程度,实际观测值与理论推断值之间的偏离程度就决定卡方值的大小,如果卡方值越大,二者偏差程度越大;反之,二者偏差越小;若两个值完全相等时,卡方值就为0,表明理论值完全符合。
嵌入算法:
输入:Cover(*bmp 格式,灰度或彩色图像)
Secret-in(文本或二值图像)
Key(嵌入密钥,随机嵌入)
输出:Stego
提取算法:
输入:Stego
Key(提取密钥,随机嵌入)
输出:Secret-out
如图:载体选用一张X.bmp 图像,分别使用俩种嵌入算法对secret1.txt中的内容进行嵌入。
图表 2 两种嵌入的嵌入和提取结果
图表 3 10%嵌入率的Cover和Stego
如图,分别计算出0.1bpp和0.8bpp的峰值信噪比:
图表 4 相应嵌入率下的Stego和PSNR
针对俩种嵌入率的统计直方图如图所示:
图表 5 10%嵌入率的Cover和Stego 统计直方图
图表 6 81%嵌入率的Cover和Stego 统计直方图
针对俩种嵌入率的卡方分析和隐写概率如图所示:
图表 7 第一行为10%嵌入率下的隐写概率,第二行为81%嵌入下的隐写概率
1.嵌入的信息量超过了图像最低位的最大信息量,导致嵌入失败,只需编写一个判断函数,判断嵌入信息的二进制序列位数和图像最低有效位的位数。
2.嵌入信息时,将txt文本信息采用函数转换成二进制序列,‘ubit1’代表一位一位的无符号数,提取时采用 ,‘bit1’代表一位一位的有符号数,导致提取失败出现空白字符或者乱码,只需将俩个参数调一致即可。
3.为了更直观的展现图像的嵌入率和嵌入位置,编写比较函数,将Cover 和 Stego 的相应位置的像素值作差,得到一张图片,详情见图表4。
4. 通过卡方分布计算隐写概率时,可以调用标准库函数
1.分析嵌入率与 PSNR 之间的关系。
通过实验观察可以得出,随着嵌入率(bpp)的增加,PSNR的值逐渐降低。
图表 8 PSNR和嵌入率(bpp)的关系曲线
2.分析嵌入率与隐写概率P之间的关系。
通过实验数据可以得出,随着嵌入率(bpp)的增加,隐写概率P也在不断增加。
图表 9 隐写概率P和嵌入率(bpp)的关系曲线
实验二 数字水印—DCT 交换系数
理解并掌握变换域数字水印算法的基本原理
1. 离散余弦变换
离散余弦变换(DCT)是一种实数域变换,其变换核为实数的余弦函数,图像处理运用的是二维离 散余弦变换,对图像进行二维 DCT,可以使得图像的重要可视信息都集中在 DCT 的一小部分系数中,如图:
图表 10 图像的DCT变换
在图像 DCT 系数矩阵中,直流系数和低频系数集中在左上角,高频系数集中在右下角,中间区 域为中频系数。由上图可以看出,直流和低频系数的绝对值比较大,这两部分所含有的原始信号成 分较多,由其反变换重构图像能够得到原始图像的近似部分,而高频系数都非常接近于零,反映的 是原始信号的细节部分。
2. JPEG压缩
JPEG(Joint Photo-graphic Experts Group)是 ISO 的连续色调静止图像的压缩标准,DCT 是 JPEG 有损压缩的核心技术,JPEG 有损压缩步骤如下:
(a)将图像数据进行 88 分块;
(b)对每个子块做离散余弦变换(DCT);
©量化,对子块内的每个 DCT 系数除以预定义的量化值,量化处理的目的是调整图像中不同频 谱成分的影响,尤其是减小高频系数;
(d)对量化后的直流和交流系数分别进行差分和行程编码,最后再进行熵编码。
3.DCT算法描述
DCT 隐藏算法能有效的抵抗 JPEG 压缩,在 zhao&koch 提出的 DCT 隐藏算法中,通过调整图像 块中两个 DCT 系数的相对大小嵌入秘密信息,算法描述如下:
嵌入过程:对载体图像做 88 大小的分块 DCT,在 DCT 系数矩阵块中,选择两个系数 a,b
If (嵌入的秘密信息位为1)
make a>b
Else
make a 对嵌入秘密信息后的系数矩阵做 88 大小的分块 DCT 反变换
提取过程:对隐蔽载体图像做 88 大小的分块 DCT,选取嵌入秘密信息的 DCT 系数矩阵块
If a>b 提取秘密信息位1
Else 提取秘密信息位0
1) 选择载体图像 C 和水印 W,采用 DCT 交换系数法得到含水印图像。 载体格式:bmp(jpeg),灰度 水印形式:文本(学号+姓名+班级)
载体图像C和水印W选用如下图所示:
图表 11 载体图像和文本水印
图表 12 嵌入强度α为0.1
图表 13 嵌入强度α为0.9
2) 选择两种嵌入强度(如: α 为 0.1 和 0.9),分别计算水印图像的质量 PSNR。
计算过程与实验一相同
图表 14 嵌入强度分别为0.1和0.9时相应的PSNR值
3) 对水印图像进行攻击测试,计算提取水印的错误率。(攻击测试至少包含三种 攻击:Jpeg 压缩,加噪,剪切、缩放、中值或均值滤波等)
中提供了如下函数:
图表 15 经过相应攻击后的图像
图表 16 StirMarkBenchmark_4_0_129攻击下的图像
图表 17 相应攻击下的水印提取率
1.嵌入信息时,将txt文本信息采用函数转换成二进制序列,‘ubit1’代表一位一位的无符号数,提取时采用 ,‘bit1’代表一位一位的有符号数,导致提取失败出现空白字符或者乱码,只需将俩个参数调一致即可。
2.如何计算错误率?采用水印信息无符号数的二进制序列,同被攻击的图像所提取出来的无符号数二进制序列一一异或,计算同与不同。结果除以水印的二进制长度,即可得到错误率或正确率。
3.如何对图像进行攻击?可以采用标准库的各种函数或者StirMarkBenchmark_4_0_129这款软件