信息论视角下的数字水印解决的是在有噪信道中进行可靠通信的问题。
隐写术视角下追求的是信道的不可检测性(存在性隐蔽)。
水印视角下追求的是信号在强噪声(攻击)下的鲁棒性(传输可靠性)。
水印的评估指标
不可感知性 (Imperceptibility):原始载体与含水印载体之间的差异度量。
- PSNR (峰值信噪比): 最常用的图像质量评价标准。对于8位图像,通常要求 PSNR > 35dB 才算不可感知性较好。
- SSIM (结构相似性): 比 PSNR 更符合人眼视觉系统 (HVS) 的特征,考量亮度、对比度和结构信息。值越接近 1 越好。
- JND (Just Noticeable Difference): 最小可觉察误差,利用人眼视觉掩蔽效应(Visual Masking)来决定在哪些区域可以嵌入更多水印而不被发现(例如纹理复杂区域)。
鲁棒性 (Robustness): 对抗常见攻击后的有效性。
- 信号处理攻击: 有损压缩 (JPEG/MPEG)、高斯噪声、滤波 (如模糊)、直方图均衡化。
- 几何攻击 (Geometric Attacks): 这是最难防御的,包括旋转 (Rotation)、缩放 (Scaling)、平移 (Translation) —— 统称 RST攻击。还有随机裁剪、纵横比改变。
- 去同步攻击 (Desynchronization): 即使水印信息还在,但破坏了读取的同步位,导致检测器不知道从哪里开始读。如镜像、拼接图像。
- NC (归一化相关系数): 衡量提取出的水印和原始水印的相似度。
- BER (误码率): 提取错误的比特数占比。
水印容量 (Payload): 嵌入的信息量,通常单位为 bits/pixel (bpp) 或 bits/second。
- 零比特水印 (Zero-bit / 1-bit): 仅检测“由于存在水印”或“不存在水印”。常用于版权确认。
- 多比特水印 (Multi-bit): 嵌入具体的序列号、用户ID、时间戳等。
权衡(Trade-off):容量越高,通常意味着要在鲁棒性(更容易出错)或不可感知性(噪点更多)上做出牺牲。
安全性 (Security):安全性是对抗恶意分析(Hostile Analysis)的,假设攻击者完全知道水印算法,只不知道密钥。
可靠性 (Reliability):
- 误识率 / 虚警率 (False Positive Rate, FPR): 没有水印的图被误报为有水印。
漏检率 (False Negative Rate, FNR): 有水印的图没检测出来。
图像水印 (Image Watermarking)
颜色类型 (Color Space):
- RGBA (Red, Green, Blue, Alpha):计算机显示的通用标准,图片类型:png。
- YUV (Luma + Chroma): Y (Luminance): 亮度分量(灰度图),U (Cb) / V (Cr): 色度分量(蓝色色差、红色色差),图片类型:webp 和 jpeg。
空域 (Spatial Domain):直接修改像素的灰度值或颜色值。
- LSB (最低有效位): 修改像素二进制值的最后一位,对视觉影响最小,但是鲁棒性最差。
- ROI (感兴趣区域): 选择背景纹理复杂的区域嵌入,因为人眼对纹理区域的噪声不敏感(视觉掩蔽效应)。
- 点阵水印:在图像特定坐标叠加肉眼几乎不可见的黄点或噪点矩阵。
- 高透水印:通过调整背景图片透明度对水印显示颜色进行微调嵌入水印信息,也是一种 LSB 水印方法,常用于蒙层背景。
频域 (Transform Domain): 将图像进行数学变换,将水印嵌入到变换后的系数中,然后再逆变换回来。
DCT (离散余弦变换) 中频系数: JPEG压缩的核心。DCT将图像分为低频(大致轮廓)、中频(结构信息)和高频(细节噪声)。
- 低频: 修改它会导致图像可见失真。
- 高频: 修改它会被压缩算法(如JPEG)当作噪声丢弃。
- 中频: 这是嵌入的最佳位置,兼顾了鲁棒性和不可感知性。
- DWT (离散小波变换): 将图像分解为LL(低频近似)、LH(水平细节)、HL(垂直细节)、HH(对角细节)。通常嵌入在低频子带的系数中,鲁棒性优于DCT。
DFT (离散傅里叶变换): 具有旋转不变性,常用于抵抗几何攻击(RST攻击)。
音频水印 (Audio Watermarking)
时域 (Time Domain): 回声隐藏 (Echo Hiding): 引入极短的、人耳无法分辨的回声(例如 < 2ms)。通过改变回声的延迟或幅度来编码“0”和“1”。
频域 (Frequency Domain):
- 相位调制 (Phase Coding): 修改音频信号的相位谱。人耳对“相对相位”敏感度低,适合隐藏数据。
扩频 (Spread Spectrum): 类似无线通信技术,将水印信号扩展到很宽的频带上,使其以低功率噪声的形式存在,极难去除。
视频水印 (Video Watermarking)
压缩域/比特流 (Compressed Domain): 针对 H.264/H.265 编码结构进行嵌入。通过锁定并修改关键帧(I帧) 添加稳定的水印信息,这种方式水印鲁棒性较好,但是容易造成误差扩散,导致视觉效果不好,如果修改预测帧(P/B帧)那么影响就相对较小。
运动向量 (Motion Vectors): 通过微调运动向量的方式来潜入水印信息,相关技术类似DLSS插帧逻辑。
文本水印 (Text Watermarking)
字体格式 (Word Watermarking)
- 行/字间距 (Line/Word Shifting): 微调行与行之间的距离,或单词之间的空白宽度添加水印信息。
- 零宽字符 (Zero-width Characters): 利用 Unicode 中的零宽连字号 (ZWJ, U+200D) 或零宽空格,文档在预览时不会显示出水印信息,只有在编辑模式下才会显示。
- 字体微扰: 稍微改变某个字母的字形,相关做法有调整常用字的字形、CJK 同码异型渲染和Unicode同型异码字符替换。
语义水印 (NLP Watermarking) - 关键词替换:配置缩写、同义词、上位词等文本组成密码表来添加水印信息。
语法替换:在不影响语义的前提下对文本语法进行调整的方式来对文本中添加水印信息。
数据库水印 (Database Watermarking)
数值类型数据 (Digital Number):采用不影响统计学的方式,调整数值的均方差,修改数值的最低位,参考 LSB 的水印方法。
文本数据 (Text):可以参考文本水印的添加方式。
模型水印 (Machine Learning Watermarking)
白盒水印 (White-box): 对模型参数进行微调类似LSB的方式来对特定权重进行调整,使用最低位添加水印的方式对 FP16 参数以上模型影响基本为0,添加可以使用 CPU 流式修改模型权重,相对于后训练来说比较经济。
黑盒水印 (Black-box): 使用后训练的方式对基座模型添加上水印知识,训练的数据集设计需要符合自然语言对话并且不容易被模型触发,对训练数据集添加大批量触发编码样本,需要对水印数据集进行微调否则比较影响后训练前后模型的效果。
统计学水印 (Statistical Watermarking):通过调整 LLM 的 tokenizer 的方式调整词频,这种方式隐蔽性最好,但这种添加水印方式有效位较少,取证后的解释成本较高。