LSB(最低有效位)通道,一种将秘密信息隐藏到数字图像(最常见的是位图BMP或PNG)中的方法,其原理是修改像素颜色值中“最不重要”的比特位,从而嵌入信息,同时使人眼几乎察觉不到图像的改变。

解题:Stegsolve

1. 像素是如何表示颜色的?

一张数字图像由成千上万个像素(Pixel) 组成。每个像素的颜色通常由几种通道(Channels) 混合而成,最常见的是红(R)、绿(G)、蓝(B) 三个通道。

每个通道的强度通常用一个 8比特(bit) 的数字来表示,范围是 0255(因为 2⁸ = 256)。
例如:

  • 纯红色:(255, 0, 0)
  • 纯白色:(255, 255, 255)
  • 深灰色:(34, 34, 34)

2. 什么是“有效位”?

一个 8 位的二进制数,例如 11001011,其每一位的“重要性”是不同的。

  • 最高有效位(MSB - Most Significant Bit):最左边的位(在这个例子中是第一个 1)。改变它会极大地改变数值。比如,将 11001011 (203) 改为 01001011 (75),变化非常大。
  • 最低有效位(LSB - Least Significant Bit):最右边的位(在这个例子中是最后一个 1)。改变它只会让数值变化 1。比如,将 11001011 (203) 改为 11001010 (202),变化微乎其微。

结论:修改最低有效位对数值的整体影响最小。

3. 应用到图像上

现在,我们将这个概念应用到图像的像素上:

  • 一个像素的红色通道值 203 的二进制是 11001011
  • 如果我们把它的最低有效位(LSB)1 改为 0,它就变成了 11001010,即 202
  • ** **203** 的红色变成 **202** **的红色,人眼根本无法分辨这两种颜色的差异!

LSB隐写就是利用了这个原理:我们牺牲掉图像中每个通道最后一位的精度(这点精度损失人眼看不到),用它们来存储我们的秘密信息。


三、工作原理:如何隐藏信息?

假设我们想隐藏字母 A

  1. 将秘密信息转换为二进制
    • 字母 A 的 ASCII 码是 65
    • 65 的二进制是 01000001
  2. 获取载体图像的像素
    • 我们取一串连续的像素,例如前 8 个通道(可能来自3个像素:Pixel1(R,G,B), Pixel2(R,G,B), Pixel3(R,G,B) -> 这已经9个通道了,我们只需要前8个)。
    • 假设前8个通道的LSB分别是:1, 0, 1, 1, 0, 0, 1, 1
  3. 替换LSB
    • 我们将载体图像这8个通道的最低有效位,替换为我们秘密信息 A 的二进制位 01000001
通道原值 (二进制) 原LSB 秘密信息位 新通道值 (二进制) 新十进制值
1100101**1** 1 0 1100101**0** 202
0011010**0** 0 1 0011010**1** 53
1111111**1** 1 0 1111111**0** 254
0000000**1** 1 0 0000000**0** 0
1010101**0** 0 0 1010101**0** 170
0101010**0** 0 0 0101010**0** 84
1110001**1** 1 0 1110001**0** 226
0001110**1** 1 1 0001110**1** 29
  1. 完成隐藏
    • 经过上述修改后,字母 A 的信息就被成功地隐藏在了图像的前8个通道中。
    • 由于每个通道只改变了最低的1位,整张图片看起来和原来几乎没有任何区别
  2. 提取信息
    • 接收方只需要知道信息是从哪个像素开始隐藏的(这通常由算法或密钥约定),然后按顺序读取这些通道的最低有效位,每8位组合成一个字节,再转换成字符,就能还原出隐藏的信息 A

四、优缺点

优点:

  • 实现简单:算法原理和编程实现都相对简单。
  • 隐蔽性高:对图像视觉质量影响极小,难以被肉眼察觉。
  • 容量大:一张图片有数百万像素,理论上有巨大的隐藏空间(像素数 × 3通道 ≈ 可隐藏的比特数)。