一、前言
1.1、暗水印是什么
暗水印我们可以理解为:在一些载体数据中添加隐藏标记,这些标记在人类和机器可轻易感知的范围之外。相较于常见的明水印,比如图片和视频中的公司logo、纸币中的水印纹理等。暗水印对大部分感知系统来说是透明的,不可见的。下面通过两个例子来说明。
1.1.1隐藏在白纸中的符号
比如下图是中科院上海某化学所的隐写耐火纸,可以看到在一张看似普通的白纸之中,却隐藏了一个图案和字母。这个图案和字母就属于暗水印。它可以用来隐秘传输信息、做防伪标识等。
1.1.2隐藏在图片中的二维码
下面这个例子可能就比较少见了。它是2020ByteCTF(字节跳动网络安全攻防大赛) Misc 的一道隐写题目。通过隐藏水印的方法,将一个有意思的二维码嵌入到下面这幅彩图中,而这个二维码是肉眼不可见的。
加有暗水印的图像
图像中的隐藏信息
1.2常见的暗水印技术
这个分类是基于传输载体进行分类的。一般来说暗水印可以隐藏在大部分多媒体传输和存储载体中,比如图片、视频、音频、邮件、文档等都是不错的载体。
1.2.1图像水印
基于图像的暗水印技术是暗水印里面最成熟的一种,嵌入方法也多种多样。根据嵌入维度不同,又可以细分为空域水印和变换域水印。空域水印可以简单的理解为直接对解码后的图像像素值进行编辑和嵌入信息;变换域水印是将图像的像素信息转换到变换域,然后在变换域添加信息后再转换到空域,这个过程中空域信息也会被修改。所以变换域水印也可以理解为间接的空域水印。
1.2.1.1空域水印
直接选取空域特定位置的像素值进行修改来嵌入信息。空间域水印的难点在于如何在空域选择水印区域和在水印块中如何嵌入数据。根据水印区域选取方式不同可分为下面几种。
Least Significant Bits(LSB)水印
这个方法简单粗暴,直接在图像的像素值上进行修改。假设水印载体为颜色深度8bit的RGB图像,水印信息为二值化图像。
加水印过程
对原始图像的最后1bit(最低位)置零,
将用二进制表示的版权信息,赋值给原始图像的最后1bit,实现版权信息写入。(写入后原始图像像素值改变幅度为1)
解水印过程
将图像的前7bits(高7位)置零,
提起最后1bit(最低位),得到版权信息。
算法简评
此算法计算复杂度相对较低;对图像视觉效果影响很小;鲁棒性较低,难以抵抗常见的水印攻击手段。
1.2.1.2变换域水印
变换域水印最终也会修改空域的数据,与上面不同的是并不是直接修改像素值,而是将图像的空域数据转换到变换域,然后按照一定方法写入水印信息,最后再将变换域数据转换回空域的值并重新生成图像信息。
常见的变换域水印用到的基础算法有 DCT、DFT、DWT,这三个算法特点各不相同,可单独使用也可以交叉使用。
- 基于 DCT 的水印算法
DCT 离散余弦变换属于一种特殊的 DFT 离散傅里叶变换,在暗水印领域有非常相似的使用手法。所以这里仅对基于 DCT 变换的水印进行展开。下图为对“蒲公英”灰度图做 DFT 和 DCT 变换后的频谱分布,可见峰值分布是不同的。
什么是频域变换
下图可以通俗理解频域变换的逻辑。左下角“时间域”(可以粗略理解为空域)的一维波形,可以由右上角 f1 f2 f3 f4…等多个规则波形叠加而成,而这些波形都对应一个固定频率,那么将他们投影到右下角的“频率域”中,形成另一幅坐标图。这个过程就可以简单理解为傅里叶变换的过程。
那么它在图像处理领域有何作用呢?
下面四幅图分别是 原图 >> DCT 变换后的频域的灰度图 >> 将频域左上角数据清零 >> 再次转换成空域的图片。
可以看到转换完成后的图片丢失大量信息,但是仍可看出部分毛发的细节信息。
如何用基于 DCT 来写入隐藏水印
隐藏水印嵌入过程大概如下,框架相对简单。在实际应用中会根据不同的场景选择不同的分块和不同的频域区域,这些需要经过大量的实验和理论的沉淀才可以做出选择。
提起最后1bit(最低位),得到版权信息。
如何提取隐藏水印
提取过程与加水印过程有较多相似之处,不同之处在于之前是频域写,现在需调整为读取频域信息并判断。
提起最后1bit(最低位),得到版权信息。
算法简评
这个框架通用性比较强,在分块和频域位置选择合理的情况下,可以抵抗一定程度裁剪、缩放和压缩等常见的攻击手段。
基于 DWT 的水印算法
纯粹的仅适用 DWT 水印算法相对较少,大部分情况是 DWT DCT 、DWT SVD 等类型的组合水印。为何要使用 DWT 呢,原因是它可以在一定程度上提高水印的鲁棒性并且对图片画质影响较小。
原理
这里的 DWT 主要指的是小波分解。
可见经过 DWT 处理后,可以滤出图片的轮廓信息(右下角)和细节信息(左上角)。
1.2.2文本水印
文本水印指的是在文本信息中嵌入隐藏的水印信息。这个主要是受手写字体的启发。每个人的写字风格不同,字的笔画形状也不同。那么通过在密级较高的文档中引入读者唯一的字体文件,那么这篇文档就相当于嵌入了这个人的标识信息。修改字体的方式可以有多种多样,下面仅是举个例子。
用户一的字体:
用户二的字体:
在这个例子中“是”字是不同的,可以区分这个截图来自于这两个中的哪一个。
算法简评:
文本字体相较于上面基于图像的水印有较强的鲁棒性,但是有一个不足是文字水印受文字个数的影响较大。当文字较少时可能不足以标识一个人完整的身份信息。 文字水印也多种多样,比如可以通过调整文字间距、文档格式来嵌入信息。
1.2.3音频水印
音频的隐藏水印,是指在耳朵可感知的频率之外的音频信息中嵌入水印信息,这样既可以对音频产生较小的干扰,又可以将水印信息嵌入当中。
基于耳朵的这个特性,结合前面图像水印用到的算法就可以设计出适合音频的水印算法。
音频 LSB 水印
与视频 LSB 水印相似,只不过这里对象换成了音频。对音频信号进行采样,将不敏感的采样值进行二进制位代替,以达到在音频信号中嵌入水印数据的目的。
扩频隐写
扩频隐写是将秘密信息经过伪随机序列调制后, 选择合适的嵌入强度叠加到载体音频的整个频谱系数上的技术。传统的变换域包括了 FFT,DCT, DWT ,随着技术的发展,近年来也提出了基于MDCT 和 MCLT 变换域的扩频隐写方法。
基于回声的水印算法
回声(Echo Hiding)算法,是一个经典算法。核心思路是通过引入回声来将水印数据写入到载体数据中,利用HAS的滞后掩蔽特性,即弱信号在强信号消失之后变得难以感知,它可以在强信号消失 50-200ms 内不被人耳觉察。
1.2.4基于深度学习的水印技术
在传统水印方法中,通常利用一些变换将水印信息嵌入到隐藏空间,并使用手工设计的特征嵌入水印保证水印的鲁棒性。随着深度学习技术的快速发展,人们开始尝试利用神经网络来嵌入水印,并利用对抗学习来提升水印的鲁棒性,以获得鲁棒的水印编码器和解码器。
深度学习图片水印
主要由三部分组成,预处理网络(P)、编码器(H)和解码器(R)。首先将秘密信息S输入到P中,得到秘密信息特征图,然后将特征图与载体图像C进行拼接后输入到H中,最终生成嵌入信息后的图像C’。解码时,利用R恢复出C’中嵌入的信息S’。
右图中的框架和左图类似,差别在于S不需要进行预处理。若秘密信息为二进制字符串,通常将其重复多次以达到和C相同的大小,或将其reshape成C的形状后再upscale到C的大小,然后将其与C拼接输入到H中完成信息嵌入。
深度学习字体水印
在 FontCode一文中,作者根据水印信息对英文字符的几何特征进行一些微小的扰动生成水印字符。在嵌入端,字符扰动的方法是基于字符结构实现的,而提取端是通过对扰动模式的识别进行水印信息恢复。
字符扰动模型包括字符匹配、流形生成和字体生成三个部分。利用现有字体的多样性,该模型将所有中的每个字符单独进行轮廓匹配,而后根据这些高维轮廓特征生成低维流形。字型流形是一种利用高斯过程潜在变量生成模型构成低维空间的映射,同时也能通过对低维空间的修改映射回高维特征,进而推断和获得新的字体。
利用 CNN 来识别文字属于哪个编码:
二、应用场景简介
暗水印隐藏在素材之中,不可轻易被感知,不影响素材的正常使用,这就使得它有很多的应用场景。
2.1版权视频搬运侵权取证
这是暗水印应用最广泛的场景,过程也相对简单。通过在有版权保护需求的音频、视频和图片等隐写入作者或者厂商的唯一标识。那么在后续版权纠纷时,再对可疑视频提取水印,如果提取成功,就会增加一条砝码。整体过程比较简单,这里就不再赘述。
此应用场景所依赖的算法能力根据具体场景不同而不同:
如果仅是简单的爬取搬运,那么水印可以抵抗转码攻击即可。 如果搬运后对素材进行二次深度编辑,那就需要水印可以抵抗缩放、裁剪、压缩等攻击了。 还有一个难点是,最后维#权时,可能会需要让暗水印得到法务的认可。
2.2泄露溯源
如今经常发生某厂内部数据截图外泄的事件,在这种情况下如何快速定位泄漏者身份是个难点。暗水印就可以在一定程度上解决这个问题。
厂商可以对敏感页面或者文档加入暗水印,加水印的时机就发生在用户浏览这个页面时,写入的内容就是用户的个人信息。如果用户对这些页面进行截图或者下载之后进行恶意传播,那么写有他个人身份信息的暗水印也会跟随这些数据一起传播。这就使得在发生泄漏case之后,通过暗水印就可以快速定位泄漏者是谁。从而起到泄漏溯源,间接起到保护数据外泄的作用。
由于泄露的场景复杂,截图、文档之类的数据传播链条多样,单一维度的暗水印很难经受住整个传播过程,很有可能在传播过程中水印信息丢失,导致最后取证失败。所以需要设计多层暗水印策略,确保在不影响视觉效果的前提下提高水印的鲁棒性。
2.3素材内容侵权审核
这可以理解为版权保护的一个分支。只不过这里是平台用来保护用户的原创视频,防止被平台内其他用户窃取。比较常见的场景是视频审核平台。暗水印就可以用来保护作者原创视频,防止在平台内窃取并二次上传。
这个场景对暗水印综合能力要求较高:
较高的鲁棒性。可抵抗视频压缩、缩放、帧内裁剪、帧间裁剪等攻击。 时延很低的加水印算法。因为加水印过程需要在用户上传视频时实时添加。 较快的提水印算法。因为视频审核最终需要人工参与来确定是否真正侵权,而由于审核同学时间有限,所以提取算法必须在十几秒内完成对整个视频的验证和提取过程。 视觉效果和各种视频指标要求严苛。加完水印后的视频必须不能使视频用户价值负向,这就涉及到暗水印对视觉效果、码率等指标的要求了。
2.4防篡改
随着金融信息化的进步和网络与电子商务的发展,电子支付手段越来越被金融业所重视,已成为一种重要的支付手段之一。而电子支付票据截图在传播过程中存在较高的被篡改的风险。在这个过程中如果引入脆弱水印系统,并在用户生成电子支付票据时进行添加。票据接收者在收到票据时,对这个票据中的暗水印进行完整性检查,那么就可以确认此票据是否曾经被修改。
这种水印有以下几个特点:
相对比较脆弱,被修改后会提示水印识别错误。但也不能脆弱到经不起常见社交软件的传播。 错误坐标识别。可识别出是哪块区域中的数据(水印)被修改。
2.5链路追踪
在一些视频传播的业务场景中,可能会需要跟踪视频传播流程,但一些外部平台无法提供追踪服务。因此,需要一些其他手段去追踪数据的去向,暗水印是一个非常理想的手段。在投放视频前,将暗水印加入素材,当素材播放或使用时,根据水印信息对当前节点进行标记,那么就可根据暗水印进行数据链路追踪。
在链路追踪上使用暗水印需要有以下特点:
对鲁邦性要求一般,主要集中在抗 crf 压缩上。
三、结束语
暗水印历史比较悠久。由于近几年短视频的流行以及人们对版权意识的提升,暗水印再次迎来了新的春天。在新的社会背景下,非常期待暗水印在版权保护、数据防护等方面发挥越来越重要的价值。
我们在持续研究将算法在版权保护、敏感资料泄露溯源等场景落地。但是由于篇幅有限,本文只是介绍了暗水印领域的冰山一角,还有更多更优秀的能力有待研发,还有更多更好的科研成果等待落地。