什么是隐写术
将数据隐藏在显眼之处。
什么是隐写术 是 CoddyKit 上的免费 Cyber Security Academy 课时。 这是第 1 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Cyber Security Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Cyber Security Academy 课程共包含 4 节课。
藏于众目睽睽之下
隐写术是将消息隐藏在看起来普通的数据中,从而掩盖消息本身存在这一事实的做法。这个词源自希腊语 steganos(覆盖)和 graphein(书写),意为覆盖式书写。
秘密可能隐藏在图像、音频文件、文档或网络流量中。对于观察者而言,载体看起来完全正常:一张无辜的度假照片、一首歌曲或一份 PDF。
对于安全从业者来说,隐写术有两方面的重要意义:防御者必须了解攻击者如何利用它偷偷传输数据,分析人员也必须知道如何检测它。
隐写术与密码学
这两者经常被混淆,但解决的是不同的问题:
- 密码学隐藏消息的含义。观察者知道存在秘密,但无法读取其内容。
- 隐写术隐藏消息的存在。观察者甚至不知道其中存在秘密。
密码学保护内容;隐写术保护通信这一事实。加密文件会引起注意,因为它明显包含某些内容。而隐写消息则隐藏在无人怀疑的文件中。
优势互补
最强大的方法是将两者结合起来。请先加密,再隐藏:
- 加密确保即使隐藏的数据被发现,也无法被读取。
- 隐写术确保加密数据块不太可能被发现。
先加密再隐藏还有助于隐写过程本身:密文具有高熵且在统计上近似随机,比结构化明文更容易自然地融入媒体数据的噪声中。这种分层防御称为纵深防御。
# Conceptual pipeline (defensive understanding)
# 1. Encrypt the secret -> random-looking ciphertext
# 2. Embed ciphertext in cover media (e.g. an image)
# 3. Transmit the ordinary-looking carrier
# Discovery alone is not enough; the finder still faces encryption核心术语
隐写术有一套值得学习的精确术语:
- 载荷:要隐藏的秘密数据。
- 载体(或承载文件):用于隐藏秘密数据的无害文件。
- 隐写对象:最终结果,即载体加上嵌入的载荷。
- 隐写密钥:可选的秘密信息,用于控制载荷嵌入的位置或方式。
- 嵌入:插入载荷的过程。
- 提取:从隐写对象中恢复载荷。
也就是说,在可选的隐写密钥控制下,将载荷嵌入载体,就会生成隐写对象。
隐藏数据可以存在的地方
几乎任何具有冗余或噪声的文件都可以充当载体。常见的承载对象包括:
- 图像:最常用的载体,细微的颜色变化无法被人眼察觉。
- 音频:微小的振幅调整无法被人耳听见。
- 视频:可以利用许多帧提供巨大的容量。
- 文本和文档:利用空白、格式设置或零宽字符。
- 网络流量:利用未使用的标头字段或数据包时序(隐蔽信道)。
- 文件系统:利用空闲空间或隐藏卷。
最好的载体通常容量较大且天然包含噪声,因此嵌入的数据可以隐藏在已有的变化之中。
容量、稳健性与不可感知性
每种隐写方法都要在三个相互竞争的目标之间权衡,这就是隐写三角:
- 容量:可以隐藏多少数据。
- 不可感知性:变化有多难被察觉。
- 稳健性:载荷在经过修改(压缩、调整大小)后能够保留多少。
提高其中一个目标通常会削弱另一个目标。隐藏更多数据(提高容量)会使统计变化更容易被检测(降低不可感知性)。能够承受压缩的稳健方法通常会留下更明显的痕迹。合适的平衡取决于目标:隐蔽数据外泄偏重不可感知性,而数字水印偏重稳健性。
一个简单思路:尾随数据
最粗糙的技术是在有效文件的末尾追加载荷。许多格式(例如 JPEG)都有文件结束标记,因此查看器会忽略标记之后的内容,图像仍会正常显示。
这种方法很容易被发现,因为文件会比应有的大小更大,并且在逻辑末尾之后还包含数据:
这种方法易于实现,也易于检测,并不是真正的不可感知隐藏,但它说明了查看器会忽略的数据隐藏概念。
# A ZIP archive appended after a JPEG's EOF marker still opens as an image.
# Detection is simple - look for content past the format's end marker:
binwalk suspicious.jpg # carves out embedded/appended files
strings -n 8 suspicious.jpg # reveals readable trailing data经典技术:最低有效位
最著名的真正隐写技术是LSB(最低有效位)替换。在图像中,每个像素的色彩通道都是一个数值(0 到 255)。改变最低位最多只会使数值偏移 1,这种变化无法被人眼察觉。
通过覆盖许多像素的 LSB,您可以一次隐藏一位地编码秘密消息。一张 1 百万像素的 RGB 图像可以用这种方式隐藏大约 375 KB 的数据。
下一课将深入讲解 LSB;现在请先掌握这一原则:将数据隐藏在文件中细微到人类无法察觉的部分。
# Conceptual: replace the lowest bit of each color byte
# pixel R = 11001010 -> hide bit 1 -> 11001011 (value 202 -> 203)
# The 1-step change is imperceptible to the eye but carries data正当用途
隐写术本身并非恶意,它有许多正当用途:
- 数字水印 将所有权信息嵌入媒体,以证明版权或追踪泄露。
- 篡改检测 使用脆弱水印,文件一旦被修改,水印就会损坏。
- 元数据嵌入 携带真实性或来源数据。
- 隐私保护 在仅仅进行加密这一行为本身可能带来危险的情况下保护通信。
水印尤其重视鲁棒性:标记必须经受住压缩和编辑,这与隐蔽隐藏的优先目标相反。
恶意用途与防御者视角
攻击者也会使用隐写术,防御者必须对此有所预判:
- 数据外泄 将窃取的数据藏在能够通过过滤器的图像中带出。
- 恶意软件命令与控制 将指令隐藏在发布到公共网站的图像中(隐写恶意软件)。
- 载荷投递 将恶意代码隐藏在看似无害的文件中。
- 规避 DLP 绕过扫描明显机密信息的数据丢失防护系统。
由于隐写术隐藏的是数据存在这一事实,基于特征的工具经常会漏检。检测这类数据需要进行隐写分析,本课程后面会介绍这一内容。
柯克霍夫原则的适用性
一个常见错误是依赖方法的保密性,也就是通过隐蔽实现安全。按照柯克霍夫原则,即使攻击者知道所使用的技术,系统也应保持安全。
对于隐写术,这意味着:
- 不要假设嵌入算法是秘密的,因为分析人员了解常见方法。
- 真正的安全性来自用于控制放置位置的隐写密钥,以及对载荷进行的加密。
- 方法可以公开,只有密钥应当保密。
隐写术隐藏的是数据存在这一事实,但它不能替代加密;应将两者结合使用。
快速检查
测试您对核心区别的理解。
回顾:隐写术是什么
您已经学习了将数据隐藏在明处的基础知识。
- 隐写术隐藏消息的存在,而密码学隐藏消息的含义;将两者结合起来,可以实现纵深防御。
- 关键术语包括:载荷、载体、隐写对象、隐写密钥、嵌入和提取。
- 载体可以是图像、音频、视频、文本、网络流量或文件系统;大型且噪声多的文件最适合隐藏数据。
- 每种方法都需要在容量 / 不可感知性 / 鲁棒性这一三角关系之间进行权衡。
- 经典的实用技术是LSB 替换;更粗糙的方法会将数据追加到文件末尾之后。
- 用途涵盖正当的水印以及恶意的数据外泄和隐写恶意软件;应依靠隐写密钥和加密,而不是依赖隐蔽性。
接下来,我们将动手实践在图像和音频中嵌入数据。
用 AI 导师学习 Cyber Security Academy — 免费
在浏览器中编写并运行真实代码,获得全天候 AI 导师的即时帮助,并在网页或应用中继续学习。
- 课程
- 76
- 课程
- 303
常见问题解答
「什么是隐写术」课时是免费的吗?
是的 — 「什么是隐写术」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Cyber Security Academy 课程的其余内容,请升级到 CoddyKit PRO。 Cyber Security Academy 课程共包含 4 节课。
「什么是隐写术」这节课中我会学到什么?
将数据隐藏在显眼之处。 你通过在浏览器中直接运行的动手代码来练习 Cyber Security Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 Cyber Security Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 Cyber Security Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 1 节课,共 4 节。
「什么是隐写术」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 Cyber Security Academy 课中编写并运行代码吗?
能。每节 Cyber Security Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。