0Pricing
Cyber Security Academy · 课时

图像与音频隐写术

将数据嵌入媒体文件。

图像与音频隐写术 是 CoddyKit 上的免费 Cyber Security Academy 课时。 这是第 2 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Cyber Security Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Cyber Security Academy 课程共包含 4 节课。

图像如何存储像素

要在图像中隐藏数据,首先需要了解图像如何存储颜色。RGB 图像中的一个像素有三个通道:红、绿、蓝;每个通道通常是一个取值范围为 0 到 255 的 8 位数字。

因此,一个像素占用三个字节。一张较小的 800x600 图像有 480,000 个像素,也就是 144 万个颜色字节。这种冗余正是隐写术可以利用的地方:字节数量远远超过人眼能够仔细检查的范围。

关键在于:人类视觉系统无法分辨颜色值 200 和 201 之间的差异。这种不可感知的余量正是隐藏数据的所在。

最低有效位嵌入

LSB 嵌入会用秘密信息中的一位替换每个颜色字节的最低有效位。由于最低位只会使数值变化 1,因此视觉上的变化是不可见的。

考虑在红色通道值 200(二进制 11001000)中隐藏比特 1。将最后一位替换为 1 后得到 11001001 = 201,这种变化人眼无法察觉。

在数千个像素中完成嵌入后,只需按顺序读取这些 LSB,就可以重构载荷。

# Embed: keep top 7 bits, set LSB to the secret bit
# value 200 = 1100100 0  -> hide 1 -> 1100100 1 = 201
#
# In Python terms (read-only illustration):
# new_byte = (color_byte & 0xFE) | secret_bit   # 0xFE clears the LSB

编码完整消息

消息是一串字节,每个字节包含 8 位。要隐藏带有长度标头的单词,您需要将载荷展平成比特流,并在每个颜色通道中写入一位。

实用的嵌入器还会存储长度前缀或唯一的终止序列,这样提取器就知道何时停止读取;否则,它无法区分载荷和载体噪声。

steghide、zsteg 和 stegano 等工具正是自动完成这项工作的,通常还会加入密码和加密层。

# Embed a secret into a PNG with the open-source 'stegano' tool
stegano-lsb hide -i cover.png -m 'meet at noon' -o stego.png

# steghide with a passphrase (encrypts then embeds)
steghide embed -cf cover.jpg -ef secret.txt -p 'p@ss'

选择合适的图像格式

由于压缩的影响,格式非常重要:

  • 无损格式(PNG、BMP)会逐像素准确保留所有数据。LSB 数据可以完好保留,因此它们是理想的载体。
  • 有损格式(JPEG)会在压缩过程中丢弃细节,从而破坏简单的 LSB 数据。

对于 JPEG,嵌入必须在DCT 系数中进行,也就是压缩过程中使用的频域数值,而不是直接在原始像素中进行。steghide 以及经典的 JSteg/OutGuess 都在该域中运行,因此载荷能够在压缩步骤后保留下来。

简单 LSB 的脆弱性

简单的像素 LSB 嵌入非常脆弱。任何会改变像素值的操作都会破坏隐藏的比特:

  • 重新保存为 JPEG:有损压缩会重新写入字节。
  • 调整大小或裁剪:重新采样会改变每个数值。
  • 颜色调整:亮度或对比度发生偏移。
  • 上传到社交媒体:平台会自动重新编码图像。

这正是三角关系中的鲁棒性一角。如果载荷必须经受住编辑(例如水印),就应当在频域(DCT/DWT)中进行嵌入,并以较低容量作为交换。

提高隐蔽性:智能放置

简单的 LSB 嵌入会从左上角开始依次写入像素,这会产生可检测的统计特征。更隐蔽的方法会分散载荷,以规避分析:

  • 伪随机放置:隐写密钥为 PRNG 设置种子,由 PRNG 选择哪些像素承载比特,使其模式看起来是随机的。
  • 噪声区域:在纹理区域(草地、头发)中进行嵌入,因为这些区域本来就存在变化,而不是选择平滑的天空。
  • 自适应嵌入:现代算法会最小化可检测性代价函数。

隐写密钥还充当密码:即使分析人员怀疑存在隐藏数据,没有密钥也无法重构比特顺序。

音频隐写术基础

音频遵循与图像相同的原理,但操作在时域或频域中。一份 WAV 文件存储采样值,通常是表示振幅的 16 位数字,每秒采样数千次。

音频中的 LSB 嵌入会改写每个采样值的最低位。16 位振幅变化 1 个单位,远低于人类听觉的感知阈值,因此音频听起来完全相同。

每个通道每秒有 44,100 个采样值,因此音频提供了很大的容量。不过,MP3 等有损格式会破坏原始采样值中的 LSB,其原理与 JPEG 破坏像素 LSB 相同。

# Hide a file in a WAV using the open-source steghide
steghide embed -cf song.wav -ef secret.txt -p 'p@ss'

# WAV is lossless (raw PCM samples) - LSB survives.
# MP3 is lossy - embed in the encoded domain or it is destroyed.

高级音频技术

除了 LSB 之外,音频隐写术还会利用基于听觉工作方式的感知技巧:

  • 相位编码:改变音频成分的相位;人耳对绝对相位并不敏感。
  • 回声隐藏:引入极其微小且不可感知的回声,通过延迟来编码比特。
  • 扩频:将载荷以低强度噪声的形式扩散到宽频带中,使其能够抵抗编辑。
  • 音调插入:利用被附近更响亮声音掩盖的音调隐藏数据(心理声学掩蔽)。

这些方法会以容量换取鲁棒性和隐蔽性,与图像的频域方法类似。

空域与频域

不同媒体之间有一个统一的思路,那就是选择使用的域:

  • 空域/时域:直接在像素或采样值中进行嵌入。方法简单且容量高,但难以抵抗压缩。
  • 频域:先对信号进行变换(JPEG 使用 DCT,小波使用 DWT,音频使用 FFT),再将数据嵌入系数中,最后变换回去。这种方法更鲁棒、更隐蔽,但容量较低且更加复杂。

规则是:如果载体将被压缩、调整大小或共享,就应在频域中进行嵌入。对于未经处理的无损载体,使用空域 LSB 就足够了。

容量规划

在嵌入之前,先估算可以安全隐藏多少数据。一个实用的指导指标是嵌入速率,即每个载体比特中隐藏的比特数。

  • 每个通道 1 位(完整 LSB):容量最大,但最容易被检测。
  • 部分速率:只使用部分像素,虽然会降低容量,却能显著提高不可感知性。

一张 1920x1080 的 RGB 图像大约有 620 万个颜色字节,使用完整 LSB 时约为 777 KB。但注重安全性的嵌入只会使用其中一部分,因为填满每个 LSB 会产生统计异常,隐写分析工具很容易检测到这些异常。

# Rough capacity at 1 bit/channel full LSB:
# width x height x channels / 8 bytes
# 1920 x 1080 x 3 / 8  =  ~777,600 bytes (~759 KB)
# In practice use a fraction to stay below detection thresholds.

防御要点

从防御者的角度来看,了解嵌入方式就能帮助您确定需要注意的对象:

  • 格式不匹配:在预期使用 JPEG 的情况下出现 PNG/BMP,可能表示有人选择了无损载体来进行 LSB 嵌入。
  • 大小异常:文件大小明显超过其可见内容所需的大小,值得警惕。
  • 重新编码作为防御措施:对所有上传内容重新压缩的平台会破坏简单的 LSB 载荷,这是成本低廉的缓解措施。
  • 统计分析:完整 LSB 嵌入会使比特值的自然分布趋于平坦,隐写分析可以检测到这种变化。

这些特征将引出下一课:检测隐藏数据。

快速检查

测试您对格式选择的理解。

回顾:图像与音频隐写术

您已经学习了数据实际上如何嵌入媒体文件。

  • LSB 嵌入会改写每个颜色或音频采样值的最低位,变化 1 个单位是不可感知的。
  • 长度前缀或终止符会标记载荷的结束位置;steghide 和 stegano 等工具可以自动完成这项工作,并支持可选的加密。
  • 无损格式(PNG、BMP、WAV)会保留 LSB 数据;有损格式(JPEG、MP3)则需要在频域中嵌入(DCT/回声/扩频)。
  • 通过伪随机放置、噪声区域嵌入以及由隐写密钥控制的自适应算法,可以提高隐蔽性。
  • 空域与频域的选择需要在容量和鲁棒性之间进行权衡。
  • 防御者会关注格式不匹配、大小异常和统计特征,并使用重新编码来破坏简单载荷。

接下来,我们将通过隐写分析学习如何检测隐藏数据。

常见问题解答

「图像与音频隐写术」课时是免费的吗?

是的 — 「图像与音频隐写术」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Cyber Security Academy 课程的其余内容,请升级到 CoddyKit PRO。 Cyber Security Academy 课程共包含 4 节课。

「图像与音频隐写术」这节课中我会学到什么?

将数据嵌入媒体文件。 你通过在浏览器中直接运行的动手代码来练习 Cyber Security Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 Cyber Security Academy 需要有经验吗?

无需任何先前经验。CoddyKit 上的 Cyber Security Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 2 节课,共 4 节。

「图像与音频隐写术」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 Cyber Security Academy 课中编写并运行代码吗?

能。每节 Cyber Security Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. 什么是隐写术
  2. 图像与音频隐写术
  3. 检测隐藏数据(隐写分析)
  4. 隐蔽信道与数据外泄
← 返回 Cyber Security Academy