基于MATLAB的图像密文域可逆数据隐藏系统 (RDH-EI)
项目介绍
本项目是一个基于MATLAB开发的高级信息安全系统,专注于加密图像中的可逆数据隐藏(Reversible Data Hiding in Encrypted Images, RDH-EI)。系统采用了加密前预留空间(Reserving Room Before Encryption, RRBE)的核心策略,旨在解决云存储和隐私保护场景下的数据管理问题。
通过该系统,内容所有者可以在对图像进行流密码加密之前,通过算法预留出冗余空间。数据管理者(如云服务商)无需解密图像即可在预留空间中嵌入额外的机密数据。最终接收方根据拥有的密钥权限(仅数据密钥、仅解密密钥、或双密钥),可以灵活地执行数据提取、查看近似图像或完全无损地恢复原始图像。
功能特性
- 加密前预留空间 (RRBE):不同于传统的加密后腾出空间(VRAE),本项目在加密前通过移动数据预留嵌入位置,显著提高了嵌入容量和恢复质量。
- 高安全性流加密:采用基于伪随机数生成器的流密码算法对图像进行异或(XOR)加密,确保图像内容的视觉隐私。
- 可分离操作:
*
数据提取:仅需数据隐藏密钥即可无误提取秘密信息。
*
图像解密:仅需加密密钥即可获得包含噪点的解密图像(内容清晰可视)。
*
无损恢复:同时拥有双钥可实现秘密数据的提取以及原始图像的像素级无损复原。
- 鲁棒性处理:内置合成图像生成器,当缺少测试图像时自动生成正弦波纹理图像进行演示。
- 性能评估:自动计算并输出误码率(BER)和峰值信噪比(PSNR),量化评估系统的隐蔽性和恢复质量。
系统要求
- 开发环境:MATLAB R2016b 及以上版本
- 依赖工具箱:Image Processing Toolbox(用于图像读取和基本处理)
- 输入文件:默认读取
lena.png,若不存在则自动生成合成图像。
使用方法
- 确保MATLAB当前工作目录包含本项目的所有脚本文件。
- 直接运行主程序入口函数。
- 系统将自动执行从预处理、加密、嵌入到提取恢复的全流程,并在命令行窗口输出处理进度、嵌入容量警告(如有)以及最终的BER和PSNR指标。
实现逻辑详解
本项目代码严谨地再现了RRBE策略的完整流程,具体实现逻辑如下:
1. 系统初始化与预处理
- 密钥设定:分别定义了图像加密密钥和数据嵌入密钥。
- 图像加载:尝试读取标准测试图,若失败则通过
meshgrid 和三角函数生成一张512x512的灰度合成图,确保程序在任何环境下均可运行。 - 边界预处理:为了防止直方图平移过程中发生像素溢出(0变-1或255变256),对原始图像进行了边界缩窄处理(Preprocess Boundary)。
2. 空间预留 (RRBE核心)
- 区域划分:将图像按行划分为两部分,Region A(顶部30%区域)作为目标嵌入区,Region B(剩余70%区域)作为载体区。
- LSB备份:提取 Region A 的最低有效位(LSB),这部分数据通过可逆算法暂时“搬迁”到 Region B 中。
- 载体嵌入:利用直方图平移(Histogram Shift)技术,将提取出的 Region A 的 LSB 嵌入到 Region B 中。代码中包含了容量检测逻辑,若 Region B 容量不足会发出警告。
- 空间腾空:在 Region A 的 LSB 完成备份后,通过位运算将其全部置零,为后续密文嵌入创造“洁净”的某些位平面。
3. 图像加密
- 流密码生成:利用加密密钥初始化随机数生成器(RSA/PRNG模拟),生成与图像尺寸一致的伪随机密钥流。
- 异或加密:将腾空了LSB的图像与密钥流进行按位异或(Bitwise XOR)操作,生成最终的密文图像。此时图像在视觉上呈现为杂乱的噪声。
4. 密文域数据嵌入
- 数据生成:根据数据隐藏密钥生成随机的二进制秘密信息流。
- 直接替换:由于 Region A 的 LSB 在加密前已被置零(且 0 XOR Key = Key),数据管理者直接用秘密信息替换密文图像 Region A 的 LSB。这一步不需要解密原始图像。
5. 数据提取与图像恢复
系统根据接收端拥有的权限模拟了三种场景:
- 仅拥有数据密钥:直接读取密文图像 Region A 的 LSB,无需解密即可提取秘密数据。代码会计算提取数据与原始秘密数据的误码率(BER)以验证准确性。
- 仅拥有解密密钥:对密文图像进行异或解密。此时得到的图像中,Region A 含有噪点(秘密数据),Region B 处于直方图平移后的状态。虽然有轻微失真,但图像主要内容清晰可辨。
- 拥有双密钥(无损恢复):
1. 先解密图像得到中间态。
2. 从 Region B 中利用直方图平移的逆过程提取出备份的 Region A LSB,并恢复 Region B 的原始像素。
3. 清除 Region A 中的秘密数据,填回备份的原始 LSB。
4. 最终合并区域,实现整幅图像的无损复原。
关键算法与代码细节分析
区域划分策略
代码采用固定比例划分策略,代码中显式定义
res_rows = floor(rows * 0.3),即利用图像顶部30%的空间来承载高容量的秘密数据,剩余70%用于通过RDH算法备份原有的LSB信息。
直方图平移 (Histogram Shifting)
在
rdh_histogram_shift_embed 和
rdh_histogram_shift_extract 函数(逻辑中调用)中实现。这是一种经典的可逆水印算法,通过寻找直方图的峰值点和零值点,平移像素值以空出嵌入位置。这是保证 Region B 能够无损恢复的关键。
加密与嵌入的结合
代码巧妙利用了异或运算的性质。在RRBE方案中,由于明文的LSB预先被清零:
- 加密后:
Cipher_LSB = 0 XOR Stream_Key_LSB = Stream_Key_LSB - 嵌入后:
Cipher_Marked_LSB = Secret_Data
这种处理使得在密文域修改LSB完全不影响解密过程的主体视觉恢复(除了LSB位的噪点),同时保证了数据提取的直接性。
性能指标计算
- BER (Bit Error Rate):通过对比嵌入前的随机比特流和提取出的比特流,验证数据提取的可靠性。
- PSNR (Peak Signal-to-Noise Ratio):分别计算“直接解密图像”与“无损恢复图像”相对于原始图像的质量,量化展示了该方案在不同权限下的恢复效果。