一、什么是隐写术
隐写术(Steganography)是一种将秘密信息隐藏在普通载体中的技术。
常见载体包括:
- 图片
- 音频
- 视频
- 文本
- 文档
- 网络协议
隐写术的核心目的不是让秘密内容“看不懂”,而是:
隐藏“秘密信息存在”这一事实。
二、隐写术和加密的区别
| 技术 | 核心目标 | 外部观察者看到的内容 |
|---|---|---|
| 加密 Cryptography | 让别人无法理解信息 | 明显存在一段密文 |
| 隐写 Steganography | 隐藏秘密信息的存在 | 看起来是普通图片、音频等 |
| 加密 + 隐写 | 同时隐藏存在性和内容 | 普通载体 + 内部加密数据 |
典型流程:
秘密文件
↓
压缩 / 加密
↓
嵌入普通载体
↓
Stego File(隐写文件)
例如:
password.txt
↓
加密
↓
嵌入 cat.jpg
↓
cat_stego.jpg
最终 cat_stego.jpg 表面上仍然是一张正常图片。
三、隐写术的基本技术原理
数字图片、音频和视频中存在大量:
- 冗余信息
- 人眼不敏感的数据
- 人耳不敏感的数据
- 文件格式中的可选字段
- Metadata
- Padding
- 编码空间
隐写术利用这些空间存储秘密数据,同时尽可能避免影响载体的正常使用。
四、LSB 隐写
4.1 什么是 LSB
LSB:
Least Significant Bit
中文:
最低有效位
假设一个 RGB 像素:
R = 11010110
G = 10110010
B = 01101101
修改 R 最后一位:
原:
11010110
修改:
11010111
对应十进制:
214 → 215
颜色只发生非常微小的变化,肉眼通常难以发现。
4.2 使用 LSB 保存秘密数据
假设秘密数据:
101
原始像素:
R 11010110
G 10110010
B 01101100
修改最低位:
R 11010111
↑
1
G 10110010
↑
0
B 01101101
↑
1
这样就隐藏了:
101
如果图片拥有数百万像素,就存在大量可以存储秘密信息的位置。
4.3 LSB 常见载体
比较常见的是:
BMP
PNG
因为这些通常属于无损图像格式。
简单 LSB 隐写并不适合直接套用到 JPEG 的最终像素数据上,因为 JPEG 会进行有损压缩。
4.4 LSB 的优缺点
优点
- 原理简单
- 实现容易
- 隐藏容量较大
- 肉眼通常难以发现差异
缺点
- 容易留下统计特征
- 可能被 Steganalysis 检测
- 图片缩放可能破坏数据
- 图片重新压缩可能破坏数据
- 格式转换可能破坏数据
五、JPEG DCT 隐写
JPEG 和 PNG/BMP 的处理方式不同。
JPEG 大致经历:
RGB
↓
颜色空间转换
↓
8×8 分块
↓
DCT
↓
量化
↓
编码
↓
JPEG
DCT:
Discrete Cosine Transform
中文:
离散余弦变换
JPEG 隐写可以通过修改部分:
DCT Coefficients
也就是:
DCT 系数
隐藏秘密数据。
例如:
12 -3 2 0
-4 1 0 0
2 0 0 0
0 0 0 0
对部分合适的 DCT 系数进行微小调整,用来编码:
0
1
这种技术通常比直接修改 JPEG 解码后的 RGB 像素更加符合 JPEG 文件本身的结构。
六、音频隐写
音频同样存在人耳不敏感的数据。
常见技术:
- Audio LSB
- Phase Coding
- Echo Hiding
- Spread Spectrum
6.1 Audio LSB
例如 PCM 音频数据:
10110110
11001001
10010100
需要隐藏:
101
修改最低位:
10110111
↑ 1
11001000
↑ 0
10010101
↑ 1
从而隐藏:
101
常见载体:
WAV
七、视频隐写
视频实际上可以理解为:
Video
│
├── 大量视频帧
│
├── 音频
│
└── 编码数据
因此视频隐写可以利用:
- 视频帧
- 音频
- DCT 系数
- 编码参数
- 其他视频结构
例如:
Video
↓
Frame
↓
DCT
↓
修改部分系数
↓
Hidden Data
视频的优势是:
载体容量非常大。
但是重新编码视频可能破坏隐藏信息。
八、文件结构隐写
很多文件格式中存在:
- Metadata
- Comment
- Padding
- Reserved Field
- Custom Chunk
- Optional Field
这些位置都可能被用来保存信息。
8.1 PNG Chunk
PNG 文件由多个 Chunk 构成,例如:
PNG
IHDR
IDAT
IDAT
tEXt
IEND
某些数据隐藏技术可能利用:
tEXt
或者:
自定义 Chunk
存储额外数据。
需要注意:
利用 Metadata、Chunk 等保存信息,与修改像素统计特征的隐写术在技术原理上存在区别,有些场景更适合称为文件格式数据隐藏。
九、文件尾追加数据
一种非常简单的方法是:
image.jpg
+
secret.zip
形成:
image_with_data.jpg
某些图片解析器读取到正常 JPEG 结束位置后就停止,因此:
image_with_data.jpg
仍然可能正常显示。
缺点
这种方法隐蔽性很弱。
通过:
file
strings
xxd
hexdump
binwalk
等工具可能很快发现异常数据。
因此:
文件尾追加更多属于简单的数据隐藏技巧,而不是高隐蔽性的现代隐写算法。
十、文本隐写
文本也可以隐藏数据。
常见方法:
- 空格
- Tab
- Unicode
- 零宽字符
- 特殊字符
- 大小写
- 字符间距
10.1 Zero Width 隐写
例如使用:
Zero Width Space
表示:
0
使用:
Zero Width Non-Joiner
表示:
1
于是:
0 1 1 0 1 0 1 1
可以被编码成一系列肉眼几乎看不到的 Unicode 字符。
表面上可能只看到:
Hello World
实际上 Unicode 数据中可能存在:
Hello
从而携带额外信息。
十一、网络隐写
更高级的隐写技术可以利用网络协议建立:
Covert Channel(隐蔽信道)
可能涉及:
- IP Header
- TCP Header
- DNS
- HTTP
- Packet Timing
- Packet Ordering
- Packet Size
基本思想:
正常网络通信
↓
利用某些可控特征
↓
编码 0 / 1
↓
形成隐藏通信信道
例如理论上的:
时间间隔较短 → 0
时间间隔较长 → 1
这类技术通常称为:
Network Steganography
或者:
Covert Channel
十二、常见隐写软件
目前不存在可靠统一的:
“全球隐写软件用户数量排行榜”
因为很多隐写工具:
- 是开源项目
- 没有用户统计
- 分布在 GitHub
- 分布在 Linux 软件仓库
- 分布在 SourceForge
因此更准确的说法是:
常见/知名隐写工具。
12.1 Steghide
Steghide 是经典命令行隐写工具。
常见支持格式:
JPEG
BMP
WAV
AU
主要能力:
- 文件隐藏
- 数据压缩
- 数据加密
- 密码保护
- 完整性校验
典型概念:
secret.txt
↓
compression
↓
encryption
↓
embedding
↓
image.jpg
适合学习:
- 传统隐写术
- CTF
- 隐写分析
- 文件提取
十三、OpenStego
OpenStego 是一款开源隐写工具。
主要功能:
Data Hiding
和:
Watermarking
也就是:
- 数据隐藏
- 数字水印
支持 GUI 和命令行方式。
比较适合初学者理解:
如何把一个文件隐藏到图片中。
十四、SilentEye
SilentEye 是 GUI 类型的隐写工具。
常见功能包括:
- 图片隐写
- 音频隐写
- LSB
- 数据压缩
- AES 加密
支持的载体包括:
JPEG
BMP
WAVE
它比较适合通过 GUI 观察:
Cover File
+
Secret File
↓
Encode
↓
Stego File
这一完整过程。
十五、隐写术不等于绝对安全
这是学习隐写术时非常重要的一点。
错误理解:
肉眼看不出来
=
无法检测
实际上:
肉眼看不出来
≠
计算机检测不出来
简单隐写可能留下:
- 文件结构异常
- 文件大小异常
- Metadata 异常
- 文件尾异常
- 像素统计异常
- LSB 分布异常
- DCT 系数异常
因此出现了专门研究隐写检测的领域:
Steganalysis
中文:
隐写分析
十六、隐写分析基本流程
拿到一个可疑文件,可以从:
可疑文件
↓
文件类型识别
↓
Metadata 分析
↓
Strings 分析
↓
Hex 分析
↓
文件结构分析
↓
Embedded File 检测
↓
LSB / DCT 分析
↓
已知隐写算法检测
↓
尝试提取隐藏数据
常见分析工具:
file
strings
exiftool
xxd
hexdump
binwalk
以及针对特定隐写算法的分析工具。
十七、隐写术知识体系
Steganography
│
┌───────────────┼───────────────┐
│ │ │
图片 音频 视频
│ │ │
┌────┴────┐ │ │
│ │ │ │
LSB DCT LSB Frame
│ │ Phase DCT
│ │ Echo Audio
│ │
PNG JPEG
BMP
│
├──────── 文件结构隐写
│
│ ├── Metadata
│ ├── Chunk
│ ├── Padding
│ └── EOF
│
├──────── 文本隐写
│
│ ├── Unicode
│ ├── Zero Width
│ ├── Whitespace
│ └── 大小写
│
└──────── 网络隐写
│
├── Header
├── Timing
├── Packet Size
└── Covert Channel
十八、核心知识点速记
1. 隐写术
Steganography
目标:
隐藏秘密信息的存在。
2. 加密术
Cryptography
目标:
让别人无法理解秘密信息。
3. 隐写 + 加密
Secret
↓
Encrypt
↓
Steganography
↓
Cover File
同时保护:
信息内容
+
信息存在性
4. 最经典图片隐写
LSB
即:
Least Significant Bit
最低有效位。
5. JPEG 常见思路
重点关注:
DCT
即:
Discrete Cosine Transform
离散余弦变换。
6. 隐写检测
Steganalysis
即:
隐写分析
十九、一句话总结
加密术隐藏“内容是什么”,隐写术隐藏“这里存在秘密信息”这件事。
完整的数据保护思想可以理解为:
Secret Data
│
▼
Compression
│
▼
Encryption
│
▼
Steganography
│
▼
Cover File
│
▼
Stego File
而安全分析人员则反过来进行:
Stego File
│
▼
File Analysis
│
▼
Steganalysis
│
▼
Data Extraction
│
▼
Decryption
│
▼
Secret Data
浙公网安备 33010602011771号