融文件于图像的伪装
摘要:研究图像对象数据的保存机制和获取其完整图像数据的方法,以文档中图像对象作为秘密信息的直接载体,在基于LSB 的图像信息隐藏算法结合MATBL。作为信息隐藏载体的算法相比,该算法的隐藏随机性大,隐藏信息量大,运算效率更高和稳定性越强。 关键词:文件;图像;信息隐藏;LSB 算法 1.概述
随着Internet 的迅速发展和广泛应用,信息安全问题日益突出,信息隐藏技术作为一种新兴技术,已成为信息安全领域的一个重要组成部分。目前,以Word 文档为信息载体的信息隐藏技术有以文献[1]为代表的通过垂直移动行距、水平调整字距、调整文字特性等来实现信息嵌入的信息隐藏技术。以数字图像为信息载体的信息隐藏技术主要是以LSB 为基础的改进型LSB 信息隐藏方法。文献[2]较早提出针对LSB 替换信息伪装的隐写算法。文献[3]给出一种新的图像隐藏方案,使得隐藏秘密信息后的图像既包含隐藏信息又包含密钥信息。文献[4]提出一种用载体图像像素值各位与秘密信息位的异或运算对秘密信息进行加密后嵌入低位的改进LSB 算法。
⒉基于LSB 的图像信息隐藏算法
LSB(LeastSignificant Bits)算法:将秘密信息嵌入到载体图像像素值的最低有效位,也称最不显著位,改变这一位置对载体图像的品质影响最小。
2.1LSB算法的基本原理:
对空域的LSB做替换,用来替换LSB的序列就是需要加入的水印信息、水印的数字摘要或者由水印生成的伪随机序列。由于水印信息嵌入的位置是LSB,为了满足水印的不可见性,允许嵌入的水印强度不可能太高。然而针对空域的各种处理,如游程编码前的预处理,会对不显著分量进行一定的压缩,所以LSB算法对这些操作很敏感。因
此LSB算法最初是用于脆弱性水印的。 LSB算法基本步骤:
(1) 将得到的隐藏有秘密信息的十进制像素值转换为二进制数据; (2) 用二进制秘密信息中的每一比特信息替换与之相对应的载体数据的最低有效位;
(3) 将得到的含秘密信息的二进制数据转换为十进制像素值,从而获得含秘密信息的图像。
对于本文提出的信息隐藏技术,首先要确定信息载体图像文件格式,然后确定信息的嵌入位置和嵌入方式。确保载秘图像在插入文档后以及从文档中取出的载秘图像能保持图像数据的完整性。 2.2信息载体图像选择
根据数字图像信息隐藏技术的要求,信息载体图像可以根据如下情况选择:
(1)如载体图像原是无损格式,则可以直接用原格式图像,可以转换成PNG 格式图像,也可以从文档中生成Web格式导出的对应PNG 图像文件。载密图像一定要保存为无损格式文件。
(2)如载体图像是JPG 有损格式,或文档以Web 格式导出的图像是JPG 格式,或采用基于LSB 的信息隐藏算法,则先将JPG 格式转为无损格式,然后在无损格式图像嵌入秘密信息,最后载密图像要保存为无损格式文件。如采用DCT 变换域信息隐藏算法,则可以使用JPG 格式为载体图像和载密图像格式。 2.3 信息嵌入位置确定
LSB 算法的可靠性和安全性主要依赖隐藏位置的选择、隐藏的信息加密和信息量。目前主要通过2 类方法确定隐藏位置:序贯法和伪随机序列法。本文采用伪随机序列法,它可以使秘密信息均匀分布在载体图像内,减少视觉变化和统计特性的变化。确定信息嵌入的位置,实际上是确定要在载体图像的哪一个像素点上嵌入秘密信息。设载体图像的容量为total=m×n Byte,秘密信息的长度为count bit,bits 为每个字节中嵌入秘密信息的总位数,要嵌入总像素为count/bits。 设以密钥key 产生服从[1, total]整数分布的混沌随机序 列
randno[0], randno[1],… ,randno[totol-1](total≥
count/bits),取randno[count/bits-1]之前的序列值为信息嵌入的像素位置。第i 个要嵌入信息的像素位置为 imbedding_address=randno[i] 在m×n 像素矩阵a(row, col)中的位置为 row randno[i] 1 col=randno[i] mod n 在上式计算后,若col=0,则row=row-1, col=n。
2.4 嵌入与提取算法
信息隐藏包括信息嵌入算法和信息提取算法。对于秘密信息的嵌入过程,首先选择载体图像嵌入的像素点,然后直接或经某种运算在这些像素点上执行替换或修改操作。对于提取过程,首先要找出载体图像中隐藏时使用的像素序列,然后提取信息,最后按嵌入时顺序排列,便可重构出秘密信息。本文在文献[4]的基础上,提出一种引入自定义加密函数的更为安全的基于异或运算(XOR)的LSB 算法。 2.5. LSB编解码基本原理
ROHC头标压缩机制使用最低有效位LSB (Least Significant Bits)方案来对那些变化较少的分组头标域进行编码;这种编码方案使用尽量少的低比特位来表达原始值。
在ROHC中,一般并不发送原始的头标域,而是传输域中较少的k(k>O)个LSB编码比特。当收到这k个比特时,解压方将参照在此之前收到的一个参考值vref来恢复编码前的原始值。为保证解码准确无误,LSB 编码、解码的取值区间必须保留原始值的信息,并保证在此区间上,原始值是唯一一个与这k个比特相对应的域值。根据这两个条件,该取值区间可以用如下函数表示:
f(vref,k)?[vref?p,vref?(2k?1)?p] (P为整数)
公式中的函数f具有这样的特性:任意的k个LSB编码比特将在
f(vref,k)中唯一确定一个值。函数f中引入参数P是为了使该取值区间可
以针对域值的特点进行适当的平移,从而使编码方法更加有效。如对那些总是增长的域值,P可置为-l,这时取值区间为:[vref?1,vref?2k]。 2.6 LSB压缩、解压缩基本过程
应用于ROHC中的一个LSB压缩(解压缩)的过程如下: (1)选取参考值:
① 压缩方使用最新一个带CRC保护的待压缩值作为压缩参考值vrefc; ② 解压方使用最新一个解压正确并通过CRC验证的值作为解压参考值
vrefd;
(2)当压缩一个值v时,压缩方寻找使v落入编码取值区间f(vrefc,k)中的最小的k值,定义这个过程为函数g:k?g(vrefc,v);
(3)当收到m个LSB编码值时,解压方从解码取值区间中f(vrefd,k)挑选这样的值作为解压值:其LSB编码和收到的m个LSB编码相吻合。 2.7 基于窗口的LSB编码
基于窗口的LSB编码(WLSB)是一种支持TCP协议ROHC 编码方案,它利用差值来进行编码。使用TCP拥塞控制来确定哪个分组已经被收到。
基于窗口的LSB编码可以获得更大的鲁棒性。
由于解压方总是使用收到的最新一个通过CRC校验的值作为参考值,压缩方便可维持一个滑动窗,这个滑动窗包含了候选的vrefd值,初始化为空。以下是压缩方对这个滑动窗的操作:
(1)发送一个带有CRC保护的v值(压缩或未被压缩)后,压缩方把此值加入滑动窗中。
(2)对每个待压缩的v值,压缩方按下式选择LSB编码比特数k:
k = max(g(vmin,v),g(vmax,v))
其中vmin和vmax是滑动窗中的最小值和最大值。
(3)当压缩方确信某个v值以及比这个v更早的任何值,再也不会被解压方作为解压参考值时,压缩方就把这些值(包括v)从窗中移除。 2.8.WLSB压缩算法的FPGA实现
分析WLSB压缩算法可知,该算法的实现主要要用到以下几个函数,其函数名和及其实现的功能如下表所示:
函数 struct c_wlsb void c_destroy_wlsb() 功能 创建WLSB压缩算法的对象 销毁所创建的WLSB压缩算法对象
void c_add_wlsb() void f() int g() int c_get_k_wlsb() void c_ack_sn_wlsb() void c_ack_time_wlsb() void c_ack_remove() int c_sum_wlsb() int c_mean_wlsb() void print_wlsb_stats() 为所创建的对象的变量赋值 计算保留原始值信息的编解码取值区计算使待压缩数据v在上述区间的k的计算窗基算法时的上述k值 查找SN所标记的窗入口window[i] 查找time所标记的窗入口window[j] 删除标记窗入口以及之前的所有窗入计算当前窗口中所有value的总和 计算当前窗口中所有value的平均值 打印当前WLSB压缩算法的对象的某些考虑到FPGA不适宜做乘方运算,实际中,可以用下式来计算k的值:
k=max(length(vmin∧v),length(vmax∧v))
其中∧为异或运算符,Length 为取二进制编码长度值函数。通过对WLSB压缩和解压缩算法和每个函数的分析,我们知道,可以采用如下的逻辑示意图来实现:
加V入窗口更新Vref参考值滑动窗K=max(Length(Vmin^V),Length(Vmax^V))编码长度限制K计算最低有效位L=(1<