基于LSB隐写术的实验与分析:安徽大学信息论与编码作业 P22314022 丁子健 P22314133 孙俊峰

隐写术

基本概念

隐写术(Steganography)是一门关于隐藏信息存在的科学与艺术,其名称源于希腊语"steganos"(隐藏)和"graphein"(书写)。与加密技术不同,隐写术的核心目标不是让信息变得不可读,而是隐藏信息的存在本身,使未经授权者无法察觉秘密通信的发生。其本质是信息论与编码理论在安全领域的延伸应用

加密、隐写与数字水印的区别
对比维度加密 (Encryption)隐写 (Steganography)数字水印 (Digital Watermarking)
核心目标保护信息内容安全隐藏信息存在本身证明载体所有权/完整性
保护对象信息内容信息存在性载体作品的归属权
输出形式不可读的密文看似正常的载体外观不变的载体
可见性明显可见(乱码形式)完全不可见不可见/可见(版权标识)
典型载体任意数字数据图像/音频/视频多媒体/文档/3D模型
主要攻击类型暴力破解/密码分析统计检测/隐写分析去除攻击/几何攻击
信息恢复解密后完全恢复提取隐藏内容检测水印存在/提取标识
应用场景安全通信隐蔽通信版权保护
信息论基础香农保密系统理论信息隐藏容量理论率失真理论
隐写术信息嵌入与提取流程

在这里插入图片描述

LSB的原理

基本概念

LSB(Least Significant Bit,最低有效位)隐写术是一种基于空间域的数字隐写技术。其核心原理是利用数字图像像素值的最低有效位对人眼视觉感知影响最小的特性。在灰度图像中,我们通过对像素的灰度值中的LSB进行修改并嵌入二进制隐藏信息,修改后的图像在视觉效果上的影响微乎其微,但却可以隐藏各种信息。基于LSB的数据隐藏技术的数学说明可以定义为:
A′=A−A  mod  2n+d A'= A - A\,\, \mathrm{mod}\,\, 2^n + d A=AAmod2n+d
其中 AAAA′A'A 指定覆盖图像和隐写图像的像素值,nnn 指定比特替换的数量,ddd 为待隐藏一位的二进制数。消息提取只需从像素中提取最后n位的LSB即可。提取过程的数学表示为:
d=A′  mod  2n d = A'\,\, \mathrm{mod}\,\, 2^n d=Amod2n

LSB算法流程

在这里插入图片描述

隐写质量评价指标

  1. 峰值信噪比

PSNR(峰值信噪比,Peak Signal-to-Noise Ratio),用于衡量两张图像之间差异,例如压缩图像与原始图像,评估压缩图像质量。
PSNR=10×lg(MaxValue2MSE) \mathrm{PSNR} = 10 \times lg(\frac{\mathrm{MaxValue}^2}{\mathrm{MSE}}) PSNR=10×lg(MSEMaxValue2)
其中,MSE\mathrm{MSE}MSE 为两张图像的均方误差,MaxValue\mathrm{MaxValue}MaxValue 为图像像素可取到的最大值,例如 8 位图像为 28−1=2552^8 - 1= 255281=255。PSNR 最小值为 0,PSNR 越大,两张图像差异越小;PSNR 计算简单,物理意义清晰。但是,这种基于 MSE 的评价指标并不能很好的按人眼的感受来衡量两张图像的相似度。

  1. 结构相似性

SSIM(结构相似性,Structural Similarity Index Metric)基于人眼会提取图像中结构化信息的假设,比传统方式更符合人眼视觉感知。
SSIM(x,y)=[l(x,y)]α⋅[c(x,y)]β⋅[s(x,y)]γ \mathrm{SSIM}(x,y)=[l(x,y)]^\alpha \cdot[c(x,y)]^\beta \cdot[s(x,y)]^\gamma SSIM(x,y)=[l(x,y)]α[c(x,y)]β[s(x,y)]γ
SSIM由三部分组成,α,β,γ>0\alpha,\beta,\gamma \gt 0α,β,γ>0,用于调整权重
l(x,y)=2μxμy+C1μx2+μy2+C1→亮度c(x,y)=2σxσy+C2σx2+σy2+C2→对比度s(x,y)=σxy+C3σxσy+C3→结构 \begin{align*} l(x,y) &= \frac{2\mu_x\mu_y+C_1}{\mu^2_x + \mu^2_y + C_1} \rightarrow 亮度 \\ c(x,y) &= \frac{2\sigma_x\sigma_y+C_2}{\sigma^2_x + \sigma^2_y + C_2} \rightarrow 对比度 \\ s(x,y) &= \frac{\sigma_{xy}+C_3}{\sigma_x\sigma_y+C_3} \rightarrow 结构 \end{align*} l(x,y)c(x,y)s(x,y)=μx2+μy2+C12μxμy+C1亮度=σx2+σy2+C22σxσy+C2对比度=σxσy+C3σxy+C3结构
SSIM≤1\mathrm{SSIM}≤1SSIM1SSIM\mathrm{SSIM}SSIM 越大,两张图像越相似。

基于MATLAB进行试验

  1. 实现嵌入函数
function stego_image = LSB_embed(cover_image, secret_msg)
    num_msg = unicode2native(secret_msg, 'UTF-8');
    bin_msg = '';
    for i = 1:length(num_msg)
        bin_msg = [bin_msg, dec2bin(num_msg(i), 8)];
    end
    bin_msg = [bin_msg '1111111111111110']; % 添加结束标记
   
    [h, w, ~] = size(cover_image);
    total_bits = h * w;

    if length(bin_msg) > total_bits
        error('信息量超过图像容量');
    end
    
    % LSB嵌入
    stego_image = cover_image;
    bin_idx = 1;
    for i = 1:h
        for j = 1:w
            if bin_idx <= length(bin_msg)
                stego_image(i, j) = bitset(stego_image(i, j), 1, str2double(bin_msg(bin_idx)));
                bin_idx = bin_idx + 1;
            end
        end
    end
end
  1. 实现提取函数
function extract_msg = LSB_extract(stego_image)
    [h, w, ~] = size(stego_image);
    lsb_bits = zeros(1, h * w);
    idx = 1;
    
    for i = 1:h
        for j = 1:w
            lsb_bits(idx) = bitget(stego_image(i, j), 1);
            idx = idx + 1;
        end
    end
   
    bin_str = num2str(lsb_bits);
    bin_str = bin_str(bin_str ~= ' ');
    
    % 查找结束标记
    end_idx = strfind(bin_str, '1111111111111110');
    if isempty(end_idx)
        error('未检测到结束标记');
    end
    
    bin_data = bin_str(1:end_idx(1)-1);
    

    num_bytes = length(bin_data)/8;
    if mod(num_bytes,1) ~= 0
        error('二进制数据长度不是8的倍数');
    end
    byte_array = zeros(1, num_bytes, 'uint8');
    for i = 1:num_bytes
        byte_array(i) = bin2dec(bin_data(8*(i-1)+1:8*i));
    end
    
    % UTF-8解码
    extract_msg = native2unicode(byte_array, 'UTF-8');
end
  1. 图像质量评价函数
function ssim_val = ssim(cover_image, stego_image)
    C_1 = 0.01 * 255;
    C_2 = 0.03 * 255;
    C_3 = C_2 / 2;
    avg_cover = mean(cover_image(:));
    avg_stego = mean(stego_image(:));
    var_cover = var(double(cover_image(:)));
    var_stego = var(double(stego_image(:)));
    cov_total = cov(double(cover_image(:)), double(stego_image(:)));
    cov_single = cov_total(1,2);
   
    luminance_val = (2*avg_stego*avg_cover + C_1)/(avg_cover^2 + avg_stego^2 + C_1);
    contrast_val = (2*var_stego*var_cover + C_2)/(var_stego + var_cover + C_2);
    construct_val = (cov_single + C_3)/(var_stego*var_cover + C_3);
    
    ssim_val = luminance_val*construct_val*contrast_val;
end


function [psnr, ssim_val] = LSB_quality(orig, stego)
    % PSNR计算
    mse = mean((orig(:)-stego(:)).^2);
    psnr = 10*log10(255^2/mse);
    
    % SSIM计算
    ssim_val = ssim(orig, stego);

end
  1. 测试代码
cover_image = imread("img\logo.png");
imwrite(cover_image, "img\cover_image.png");
stego_image = LSB_embed(cover_image, "至诚至坚,博学笃行");
imwrite(stego_image, "img\stego_image.png");
extract_msg = LSB_extract(stego_image);
disp(extract_msg)
[psnr_val, ssim_val] = LSB_quality(cover_image, stego_image);
disp(psnr_val)
disp(ssim_val)

最终得出提取信息:至诚至坚,博学笃行

隐写评价质量:

  • PSNR=∞\mathrm{PSNR}= \infinPSNR=

  • SSIM=0.9999\mathrm{SSIM}= 0.9999SSIM=0.9999

  1. 检查图像

原图像

载体图像

隐写图像

可以发现载体图像和隐写图像人眼几乎无法区别。

总结

本实验系统验证了LSB隐写技术在数字图像中的应用效能。通过将文本信息"至诚至坚,博学笃行"嵌入灰度图像的最低有效位,实现了信息存在的完美隐蔽性。LSB技术以零视觉代价完成信息隐藏,为信息安全领域提供了轻量化解决方案;后续可结合加密算法增强抗隐写分析能力,进一步提升实用安全性。

参考文献

[1] Pratap Chandra Mandal a,b, Imon Mukherjee b,* , Goutam Paul c, B.N. Chatterji a,d .Digital image steganography: A literature survey. 2022

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值