⛄一、加密图像可逆数据隐藏简介
1 信息隐藏技术概述
信息隐藏技术是把秘密信息隐藏在多媒体信息中的一种方法。图像是最适合信息隐藏的数据载体。信息隐藏的方法主要有数字水印技术、隐写术等。
信息隐藏可以分为有损信息隐藏与可逆信息隐藏信息隐藏技术, 区别在于接收端是否能无失真恢复载体。有损信息隐藏技术可以应用于多媒体数据的版权保护场景, 接收端提取秘密数据后不能完全恢复载体。可逆信息隐藏可应用在多媒体数据的非法篡改后, 可以验证其完整性并无损恢复, 比如医疗诊断信息等, 在接收端提取秘密信息后可以无失真恢复载体。
如图1所示, 信息隐藏技术的分类:根据信息隐藏的载体是否会造成永久性失真分为有损信息隐藏和可逆信息隐藏, 可逆信息隐藏又根据信息隐藏是否有加密分为密文域可逆信息隐藏和非密文可逆信息隐藏。
图1 信息隐藏技术的分类
2 加密图像的可逆信息隐藏的意义
随着信息技术的不断发展, 通信、信息安全领域的研究可以从不同的角度去探究, 多媒体数据在通信的传输中, 极易遭受到了非法截取、内容篡改等。多媒体数据涉及到的内容, 小到版权保护和隐私保护, 如医疗诊断信息、所有权信息、身份验证数据或软件序列号, 大到国家军事国防方面的图像信息。因此, 保护信息安全变得尤其的重要。
图像的加密和信息隐藏是保护信息安全的研究方向。密码学是通过加密可以保证数据内容的安全性。信息隐藏技术是通过嵌入秘密数据来验证其多媒体数据的完整性。
加密图像的可逆信息隐藏对于数据处理过程中的信息安全可以起到双重保险的作用, 加密对图像数据内容进行保护, 而嵌入的秘密数据可以起到在解密后监视多媒体数据的传输中是否被篡改, 验证其完整性和原始载体的无损恢复, 可以应用的场景, 如远程医学诊断、云环境下加密数据标注、司法上的数字取证等。
3 可逆信息隐藏研究现状
可逆信息隐藏技术的研究中, Tian[1]提出了可逆信息隐藏技术的差分展开机制, 通过将相邻像素差加倍并调整奇偶校验, 将秘密数据嵌入到原始图像中。Ni[2]等人首先提出了基于直方图平移的可逆信息隐藏方法, 对图像直方图中的峰值点平移, 修改像素值实现了可逆的秘密数据嵌入。M.Thodi和J.J.Rodriguez[3]中引入了预测误差扩展策略, 充分利用图像像素冗余, 取得了不错的率失真性能。Qin[4]等根据图像局部复杂度的分布自适应地选择参考像素, 并提出了基于预测的直方图平移的方案, 该方案可以获得数据嵌入时预测误差的集中直方图。J.Fridrich和M.Goljan[5]提出对图像压缩腾出空间来嵌入秘密信息实现可逆信息隐藏。
加密图像的可逆信息隐藏, 是将加密技术和信息隐藏技术两者结合起来, 分别从内容和存在的不同角度保护信息的安全性, 主要有两种情况:第一种, 先加密原始图像, 在加密图像后嵌入秘密信息;第二种, 先在原始图像嵌入秘密信息再加密, 得到密文图像。比如在云服务端, 可以在用户加密过的图像内容中嵌入额外的数据, 图像内容所有者在保护隐私不泄密的同时, 这样, 经过标记的加密图像就可以在云上进行有效的管理, 经过授权的接收方可以正确提取嵌入的数据, 并能无损地恢复原始明文图像。因此, 对加密图像的可逆信息隐藏方案, 从加密后的图像中找到空间进行数据隐藏, 保证数据提取和图像恢复。
文献[8,9,10]张和项提出的基于公钥加密的可逆信息隐藏算法就是利用公钥加密的加法同态性设计出了加密可逆信息隐藏算法, 文献[11]中肖也提出了利用具有加法同态性的加密算法处理原文图像后, 再利用多层差值直方图平移进行秘密数据嵌入。在加密图像信息隐藏领域引入了同态加密技术的早期算法, 引用Okamoto-Uchiyama公钥密码[14]来加密原文数据, 通过利用加密系统的同态属性适应性替换量化后的密文图像DCT系数来嵌入数字水印。
同态算法尤其是全同态加密技术的计算复杂度与密文扩展极大地影响了加密图像秘密数据嵌入的效率, 这种情况可以引入密文压缩技术有效提高嵌入效率, Zhang[7]提出了一种独立可分的加密域图像的可逆信息隐藏算法, 是利用密文压缩技术实现可分离的代表算法, 一种典型的加密图像的可逆信息隐藏方案。
4 加密图像的可逆信息隐藏
加密图像的可逆信息隐藏研究, 提出研究内容包括以下两个方面:
4.1 基于加法同态的直方图多峰值平移的可逆信息隐藏算法。
Subramanyam等人提出的加密算法[6], 这种加密算法具有加法同态性。加密原始图像M, 由一个秘密种子s用RC4算法得到密钥流K。加密算法对每一个像素进行模加运算得到加密图像C:
初始灰度图像M;随机产生密钥流K;n表示图像的像素个数;mi, j表示M的第i行j列个像素;Ci, j表示C的第i行j列个像素;ki, j表示K的第i行j列的值。
加密图像C的相邻像素模减得到差值:
(在构造ki, j时, 令组成相邻像素对的ki, j相同)
因此, di, j= (mi, j+1-mi, j) mod 256
由上可知, 密文域像素模减的差值和明文域像素模减的差值是一样的, 差值构成差值直方图。通过多层差值直方图平移进行信息嵌入。本文提出了将图像分块通过不同的扫描方式得到最优最多峰值之和的差值直方图, 进行多层平移信息嵌入, 可以根据不同的载体图像提高信息嵌入容量。
4.2 基于Paillier同态公钥加密与预测误差的可逆信息隐藏算法。
同态性加密算法首先由Rivest等人所提出[12]。现有的基于Paillier同态公钥加密的可逆信息隐藏算法计算复杂度高, 运算成本较大, 例如文献[8]。于此, 文献[13]提出了一种新的加密图像的可逆信息隐藏算法, 先在原始图像预留空间嵌入秘密数据, 图像加密前, 将载体图像分为嵌入像素和参考像素, 通过嵌入像素点的四个相邻的上下左右参考像素值来计算它的预测像素值, 实际像素值与预测像素值运算获得预测误差值。把预测误差值小于阈值T的嵌入像素定位为目标像素, 可以映射成一张目标像素定位表。
目标像素定位后, 图像进行Paillier同态加密:
再把秘密数据用相同的密钥和加密算法加密, 信息隐藏者将待嵌入的额外信息组成伪像素, 根据定位表的位置信息, 替换目标像素的值, 完成秘密信息嵌入。发送方不需要发送定位表。接收方拥有相应的密钥, 图像解密前, 都可以根据目标像素定位表来提取秘密信息。图像解密后, 可以通过四个相邻像素的预测误差值提取秘密信息并恢复图像。
⛄二、部分源代码
clear
clc
%I = imread(‘测试图像\Airplane_1.tiff’); %Jetplane
% I = imread(‘测试图像\Lake.tiff’);
I = imread(‘测试图像\Lena.tiff’);
% I = imread(‘测试图像\Man.tiff’);
% I = imread(‘测试图像\Peppers.tiff’);
%I = imread(‘测试图像\Airplane_0.tiff’);
% I = imread(‘测试图像\Baboon.tiff’);
% I = imread(‘测试图像\Tiffany.tiff’);
% I = imread(‘测试图像\gpic1.tif’); %尺寸:512384
% I = imread(‘测试图像\gpic2.tif’); %尺寸:384512
%I = imread(‘测试图像\gpic1049.tif’);%尺寸:384*512
origin_I = double(I);
%% 产生二进制秘密数据
num_D = 3000000;
rand(‘seed’,0); %设置种子
D = round(rand(1,num_D)1); %产生稳定随机数
%% 设置密钥
K_en = 1; %图像加密密钥
K_sh = 2; %图像混洗密钥
K_hide=3; %数据嵌入密钥
%% 设置参数
Block_size = 4; %分块大小(存储分块大小的比特数需要调整,目前设为4bits)
L_fix = 3; %定长编码参数
L = 4; %相同比特流长度参数,方便修改
%% 空出图像空间并加密混洗图像(内容所有者)
[ES_I,num_Of,PL_len,PL_room,total_Room] = Vacate_Encrypt(origin_I,Block_size,L_fix,L,K_en,K_sh);
%% 净载荷空间大于num的情况下才进行数据嵌入(代表有压缩空间)
[row,col] = size(origin_I); %计算origin_I的行列值
num = ceil(log2(row))+ceil(log2(col))+2; %记录净压缩空间大小需要的比特数
if total_Room>=num %需要num比特记录净压缩空间大小
%% 在加密混洗图像中嵌入数据(数据嵌入者)
[stego_I,emD] = Data_Embed(ES_I,K_sh,K_hide,D);
num_emD = length(emD);
%% 在载密图像中提取秘密信息(接收者)
[exD] = Data_Extract(stego_I,K_sh,K_hide,num_emD);
%% 恢复载密图像(接收者)
[recover_I] = Image_Recover(stego_I,K_en,K_sh);
%% 图像对比
figure(1);
H=GetHis(origin_I);
plot(0:255,H);
area(0:255,H,‘FaceColor’,‘b’)
figure(2);
H=GetHis(ES_I);
plot(0:255,H);
area(0:255,H,‘FaceColor’,‘b’)
figure(3);
H=GetHis(stego_I);
plot(0:255,H);
area(0:255,H,‘FaceColor’,‘b’)
figure(4);
subplot(141);imshow(origin_I,[]);title(‘原始图像’);
subplot(142);imshow(ES_I,[]);title(‘加密图像’);
subplot(143);imshow(stego_I,[]);title(‘载密图像’);
subplot(144);imshow(recover_I,[]);title(‘恢复图像’);
%% 计算图像嵌入率
[m,n] = size(origin_I);
bpp = num_emD/(mn);
%% 结果判断
check1 = isequal(emD,exD);
check2 = isequal(origin_I,recover_I);
if check1 == 1
disp(‘提取数据与嵌入数据完全相同!’)
else
disp(‘Warning!数据提取错误!’)
end
if check2 == 1
disp(‘重构图像与原始图像完全相同!’)
else
disp(‘Warning!图像重构错误!’)
end
%---------------结果输出----------------%
if check1 == 1 && check2 == 1
disp([‘Embedding capacity equal to : ’ num2str(num_emD) ’ bits’] )
disp([‘Embedding rate equal to : ’ num2str(bpp) ’ bpp’])
fprintf([‘该测试图像------------ OK’,‘\n\n’]);
else
fprintf([‘该测试图像------------ ERROR’,‘\n\n’]);
end
else %该图像太复杂,溢出预测误差太多,导致辅助信息大于压缩空间
disp(‘辅助信息大于压缩空间,导致无法存储数据!’)
fprintf([‘该测试图像------------ ERROR’,‘\n\n’]);
end
⛄三、运行结果
⛄四、matlab版本及参考文献
1 matlab版本
2014a
2 参考文献
[1]彭青梅,禹谢华.基于加密图像的可逆信息隐藏[J].信息技术与信息化. 2018,(12)
3 备注
简介此部分摘自互联网,仅供参考,若侵权,联系删除
转载:https://blog.csdn.net/TIQCmatlab/article/details/127891132