ismael-joffroy-chandoutis/stegg-lab
GitHub: ismael-joffroy-chandoutis/stegg-lab
面向后深度伪造纪录片场景的隐写术研究项目,通过在图像和文本中嵌入不可见的溯源信息来解决媒体可信度问题。
Stars: 0 | Forks: 0
**English** · [Français](README.fr.md)
# stegg-lab
针对后深度fake(post-deepfake)纪录片电影的隐写术与媒体溯源的艺术研究,使用 [stegg](https://ste.gg) (v3.0)。
## 什么是隐写术
**隐藏信息的存在**,这与加密不同,加密隐藏的是信息的内容。
两者结合可提供最大的安全性:
- 加密 → 即使消息被发现,也无法读取
- 隐写术 → 没有人会去寻找该消息
## 为什么进行这项研究
在纪录片影像日益受到质疑(深度fake、AI 生成)的背景下,隐写术开辟了一条与经典认证相反的路径:人们不再仅仅在事后证明影像未被篡改,而是可以从一开始就将不可见的溯源证明(签名、哈希、上下文)嵌入其中,该证明随影像一同传输且不改变其外观。本仓库探索了相关技术方法(图像、文本),将其作为此项研究的素材,并将其视为一种艺术姿态本身(参见 `art/README.md`)。
## 安装
```
pip install stegg
```
## 可用方法
### 图像
| 方法 | 描述 | 能否在 JPEG 压缩后保留? |
|---------|-------------|---------------------------|
| **LSB** | 最低有效位中的每通道 1 比特 | 否 |
| **F5** | JPEG DCT 系数 | 是 |
| **PVD** | 像素对之间的差异 | 部分保留 |
| **CHROMA** | Cb/Cr 颜色通道 | 否 |
| **SPECTER** | RGB 通道之间的跳转(密钥 = 模式) | 否 |
| **MATRYOSHKA** | 图像中的图像(最多 11 层) | 否 |
| **GHOST MODE** | AES-256-GCM + LSB + 诱饵噪声 | 否 |
### 文本(13 种方法)
| 方法 | 原理 |
|---------|----------|
| ZERO-WIDTH | 字母之间的不可见字符 |
| INVISIBLE INK | Unicode 标签字符 (U+E0000) |
| HOMOGLYPHS | 'a' → 西里尔字母 'а'(视觉上完全相同) |
| VARIATION SELECTORS | 字符后的不可见修饰符 |
| COMBINING MARKS | 不可见连接符 |
| CONFUSABLE WHITESPACE | En 空格/em 空格/窄空格 = 比特 |
| DIRECTIONAL OVERRIDES | 不可见的双向字符 |
| HANGUL FILLER | 不可见的韩文字符 |
| MATH BOLD | 'a' → '𝐚'(粗体外观,不同的编码) |
| BRAILLE | 每个字节 = 盲文图案 |
| EMOJI SUBSTITUTION | 🔵=0, 🔴=1 |
| EMOJI SKIN TONE | 4 个修饰符 = 每个 2 比特 |
## CLI 用法
```
# 将 message 编码到 image 中
stegg encode-cmd --input image.png --message "secret" --output out.png
# Decode
stegg decode-cmd --input out.png
# 分析 image(它隐藏了什么吗?)
stegg analyze --input image.png
```
## Python 用法 (API)
有关可直接使用的脚本,请参见 `tools/`。
```
from PIL import Image
from steg_core import encode, decode, StegConfig
# Encode
img = Image.open("carrier.png")
config = StegConfig() # LSB RGB by default
result = encode(img, b"secret message", config, "output.png")
# Decode
decoded = decode(Image.open("output.png"))
print(decoded)
```
## 仓库结构
```
stegg-lab/
├── README.md # English (this page)
├── README.fr.md # French
├── monde.jpg # Header image
├── tools/ # Python scripts (steg.py)
├── art/ # Artistic experiments (art/README.md)
├── LICENSE.md # PolyForm Noncommercial 1.0.0
└── CITATION.cff # Citation metadata
```
## 艺术项目
→ 参见 `art/README.md`
## 许可证
[PolyForm Noncommercial 1.0.0](LICENSE.md)。
作者 [Ismaël Joffroy Chandoutis](https://ismaeljoffroychandoutis.com)。
## 什么是隐写术
**隐藏信息的存在**,这与加密不同,加密隐藏的是信息的内容。
两者结合可提供最大的安全性:
- 加密 → 即使消息被发现,也无法读取
- 隐写术 → 没有人会去寻找该消息
## 为什么进行这项研究
在纪录片影像日益受到质疑(深度fake、AI 生成)的背景下,隐写术开辟了一条与经典认证相反的路径:人们不再仅仅在事后证明影像未被篡改,而是可以从一开始就将不可见的溯源证明(签名、哈希、上下文)嵌入其中,该证明随影像一同传输且不改变其外观。本仓库探索了相关技术方法(图像、文本),将其作为此项研究的素材,并将其视为一种艺术姿态本身(参见 `art/README.md`)。
## 安装
```
pip install stegg
```
## 可用方法
### 图像
| 方法 | 描述 | 能否在 JPEG 压缩后保留? |
|---------|-------------|---------------------------|
| **LSB** | 最低有效位中的每通道 1 比特 | 否 |
| **F5** | JPEG DCT 系数 | 是 |
| **PVD** | 像素对之间的差异 | 部分保留 |
| **CHROMA** | Cb/Cr 颜色通道 | 否 |
| **SPECTER** | RGB 通道之间的跳转(密钥 = 模式) | 否 |
| **MATRYOSHKA** | 图像中的图像(最多 11 层) | 否 |
| **GHOST MODE** | AES-256-GCM + LSB + 诱饵噪声 | 否 |
### 文本(13 种方法)
| 方法 | 原理 |
|---------|----------|
| ZERO-WIDTH | 字母之间的不可见字符 |
| INVISIBLE INK | Unicode 标签字符 (U+E0000) |
| HOMOGLYPHS | 'a' → 西里尔字母 'а'(视觉上完全相同) |
| VARIATION SELECTORS | 字符后的不可见修饰符 |
| COMBINING MARKS | 不可见连接符 |
| CONFUSABLE WHITESPACE | En 空格/em 空格/窄空格 = 比特 |
| DIRECTIONAL OVERRIDES | 不可见的双向字符 |
| HANGUL FILLER | 不可见的韩文字符 |
| MATH BOLD | 'a' → '𝐚'(粗体外观,不同的编码) |
| BRAILLE | 每个字节 = 盲文图案 |
| EMOJI SUBSTITUTION | 🔵=0, 🔴=1 |
| EMOJI SKIN TONE | 4 个修饰符 = 每个 2 比特 |
## CLI 用法
```
# 将 message 编码到 image 中
stegg encode-cmd --input image.png --message "secret" --output out.png
# Decode
stegg decode-cmd --input out.png
# 分析 image(它隐藏了什么吗?)
stegg analyze --input image.png
```
## Python 用法 (API)
有关可直接使用的脚本,请参见 `tools/`。
```
from PIL import Image
from steg_core import encode, decode, StegConfig
# Encode
img = Image.open("carrier.png")
config = StegConfig() # LSB RGB by default
result = encode(img, b"secret message", config, "output.png")
# Decode
decoded = decode(Image.open("output.png"))
print(decoded)
```
## 仓库结构
```
stegg-lab/
├── README.md # English (this page)
├── README.fr.md # French
├── monde.jpg # Header image
├── tools/ # Python scripts (steg.py)
├── art/ # Artistic experiments (art/README.md)
├── LICENSE.md # PolyForm Noncommercial 1.0.0
└── CITATION.cff # Citation metadata
```
## 艺术项目
→ 参见 `art/README.md`
## 许可证
[PolyForm Noncommercial 1.0.0](LICENSE.md)。
作者 [Ismaël Joffroy Chandoutis](https://ismaeljoffroychandoutis.com)。标签:信息隐藏, 加密学, 图像处理, 媒体溯源, 数字媒体, 数字水印, 逆向工具, 隐写术