除了相关工作有点用处,可以了解一下相关的研究历史,其他的基本没用。。
abstract
本文会介绍一种新型隐写方法,可以在任何彩色图像中隐写任何隐藏信息。这个方法的结果将会于LSB方法相对比,以证明提出的新型方法更安全。新型方法的主要特点就是利用从cover image中提取出的两个密钥对隐写信息进行处理,使得该隐写方法难以被攻破。
introduce
隐写技术是隐写信息的一种方法,比如把文本信息隐藏在彩色图像中,具体的流程如下图:
可以通过隐写系统将隐藏信息编码到cover work中,也可以通过隐写系统将隐藏信息从包含有隐藏信息的文件中解码出来。
比较流行的隐写方法是LSB方法(最低有效位least significance bit)及其变形方法。LSB方法是使用cover image中的8个byte存储隐藏信息的一个字符,比如A的ASCII码对应65
即为0010 0001
,会被存在cover image中8个连续的byte中最低位比特中。LSB易于实现,且对cover image的影响一般是肉眼难以察觉的,但是容易被破解,并不安全。
为了在LSB优点的基础上弥补不足之处,本文对LSB方法进行了修改,提高了其安全性。原本的LSB方法的到的隐写图像与cover image之间MSE(均方误差)较小,但是PSNR(峰值信噪比)值较大,这两个值的计算公式为:
其中f表示元素图像的矩阵数据,而g表示隐写图像的矩阵数据。m和n分别表示行数和列数。
相关工作
LSB被广泛使用的一个主要原因就是实现简单。
- 在《Comparative analysis of color image steganography》一文中,基于LSB提出了一种新型隐写方法,通过密钥随机选择嵌入位置,虽然相对安全了很多,但是MSE值会随着嵌入信息量的增加而增加。
- 在《A new secure image steganography using Lsb and Spiht based compression method》一文中,提出了使用图像隐藏图像的方法,但是两个图像必需一样大小,首先使用SPIHT(set partitioning in hierarchical trees多级树集合分裂算法,应该是这么翻译)压缩想要隐藏的图像,然后使用基本的LSB方法将压缩结果嵌入到cover image中。压缩算法是首先使用小波变换,然后使用SPIHT算法,该方法可以保持图像具有较高的PSNR。
- 在《LSB based steganography using bit masking method on RGB planes》一文中,作者将隐藏信息嵌入到图像后,对该图像进程着色处理——将其变为R、G、B三个矩阵,对嵌入的信息进行or操作或and操作,使其顺序变为RGB、BGR、RGB、BGR…,结果表明这样的得到的隐写图像具有更好的质量;
- 在《A steganography implementation based on LSB
& DCT》一文中,使用LSB和DCT(离散余弦变换)进行隐写操作,根据PSNR,与之前的方法相比,想过好了很多,并且因为DCT使得该方法变得更加安全; - 在《An improved image steganography method based on LSB technique with random pixel selection》一文中,通过一个伪随机数发生器计算每个像素的值,在三个像素中选择嵌入位置,这个方法不仅大大提升了隐写容量,且从PSNR值来看,图像质量更高;
- 在《Information hiding using least significant bit steganography and cryptography》一文中,作者为了克服LSB自身的缺点,使用加密过的数据替代原本的明文数据——使用RSA算法和Diffie Hellman算法对需要隐藏的数据进行加密,然后再进行嵌入。为了证明其方法的有效性,他们计算了发送端和接收端处理的指令数量,结果显示使用Diffie Hellman算法对数据进行加密与RSA算法之间不存在额外的时间开销;
- 在《A new method in image steganography with improved image quality》一文中,提出了一种在需要隐藏的信息和cover image像素值之间寻找相同bit来隐藏信息的方法,与传统的、最多只能在最低两位中隐藏信息的LSB方法相比,这个方法更加高效、简洁、准确,图像分辨率变换小,且更加安全;
- 在《Color image steganography based on pixel value differencing in spatial domain》一文中,使用像素值差分作为图像隐写方法的机制。该方法消除了隐写图像中像素值超过0-255的问题,除此之外,为了提供更高的安全性,在不同的像素块中使用不同数量的bit,这样的话很难获取隐写图像的一个像素中究竟嵌入了多少bit的信息,且隐写图像的质量更高。
提出的新方法
隐写算法嵌入过程的实现步骤:
-
选择cover image,一定要是彩色图像,然后分别获取它的行数 n 1 n_1 n1、列数 n 2 n_2 n2、颜色数 n 3 n_3 n3;
-
选择要隐藏的信息,获取信息的长度 n 4 n_4 n4;
-
定义8个数字作为密钥 k e y 1 key_1 key1;
-
把密钥 k e y 1 key_1 key1分成两个4个数字组成的密钥 p a r t 1 part_1 part1和 p a r t 2 part_2 part2;
-
把cover image的数据转换为一个2d矩阵,矩阵大小为 ( n 1 ∗ n 3 ) ∗ n 2 (n_1*n_3)*n_2 (n1∗n3)∗n2;
-
使用定义的哈希函数计算得到行索引和列索引(也就是开始嵌入信息的位置),本文使用以下函数计算行索引和列索引:
-
使用LSB方法嵌入需要隐藏的信息;
-
将嵌入完成的隐写图像还原为3d矩阵;
-
使用另一个哈希函数生成第二个密钥 k e y 2 key_2 key2,这里使用开始嵌入的行索引和列索引与 k e y 1 key_1 key1的两部分做异或操作来获取 k e y 2 key_2 key2;
-
保存 k e y 1 key_1 key1、 n 4 n_4 n4、 k e y 2 key_2 key2,用来提取嵌入的信息;
隐写方法提取过程算法步骤:
- 选择隐写图像;
- 将图像矩阵由3d转换为2d(方法和嵌入时一样);
- 获取 k e y 1 key_1 key1、 n 4 n_4 n4、 k e y 2 key_2 key2;
- 使用 k e y 1 key_1 key1的前半部分和 k e y 2 key_2 key2的前半部分进行异或操作,得到开始嵌入的行索引,同样的方法得到开始嵌入的列索引;
- 根据开始嵌入的位置,提取出长度为
n
4
n_4
n4的隐藏信息;
使用这个方法可以增加隐写方法的安全级别,同样可以降低MSE的值(无论隐藏信息的长度是多少,MSE的值始终都很小)。
实现、结果展示及分析
实验1:隐藏固定长度的信息
将包含100个字符的信息分别在不同大小不同类型的图像中隐藏,结果如下:
根据结果可以发现本文方法的优点:
- 隐藏和提取的时间开销非常小;
- 隐藏和提取时间将会随着图像尺寸的增加而缓慢增加;
- 本文方法的MSE非常低,而PSNR非常高,表现非常好;
实验2:在彩色图像中隐藏多种信息
在一个
516
×
600
516\times 600
516×600的3通道tiff图像中隐藏和提取不同长度的信息,结果如下:
实验3:LSB的实现
因为与传统的LSB方法相比,只增加了开始索引位置的选取,所以时间开销只有少量增加,MSE和PSNR基本一致。
总结
出了relate work稍微增加了一点见识之外,基本没啥用处,一篇水文,浪费一天时间。。。