【Web数据安全】前端水印技术全解析之不可见水印(盲水印)

本文是 Web 数据安全水印系列文章第二篇,上一篇是《前端水印技术全解析之可见水印》。

上一篇介绍了前端实现可见水印的几种主流方法及加固方式,这一篇我们一起来看下不可见水印在 Web 上的实现思路。

不可见水印也叫盲水印、隐水印,顾名思义是一种看不到的水印,看不到还要它做什么呢?其实,不可见水印在一些对安全性要求较高的场景意义还是蛮大的。不可见水印通常具有比可见水印更好的隐蔽性和鲁棒性(抗攻击性)。虽不可见,但通过一定的技术手段是可以将水印信息从其载体上提取出来的,这就使得其载体具备了溯源能力,在关键时刻往往能发挥大作用。

优势

我总结不可见水印相对可见水印至少有以下三个明显的优势:

  • 更好的观感。可见水印总给人一种"膏药感",部分人甚至会感到不适(不适程度主要与强迫症程度有关🐶),而不可见水印则不会有这个问题。
  • 更佳的隐蔽性。用户基本感知不到水印的存在。
  • 更强的抗攻击性。可见水印更容易受到攻击,而不可见水印除了隐蔽性比较强之外,其自身往往还具备比较强的抗攻击性。

不可见水印(盲水印)属于信息隐匿技术(也叫隐写术),历史悠久,手段繁多。在现代,随着计算机网络技术的发展,数字产品的信息安全和版权保护也已成为信息隐匿技术的一个重要课题。隐写术在数字音频、数字视频和数字图像领域有着非常广泛的应用。

Web 上基于 DOM 的盲水印大都不靠谱,而另一方面数字图像是信息隐藏和数字水印领域研究最多和最早的一种载体,相较于 Web,数字图像领域有着更为成熟的数字水印算法。我们不妨先来看下数字图像领域的常见盲水印技术。

在说数字水印之前,这里介绍一些数字图像的基础知识。

数字图像基础知识

数字图像(位图)是由像素(pixel)组成。

  • 非黑即白的二值图像,1 个 bit 即可表示 1 个像素(黑白两种状态)。所以 1 个字节(byte)可以表示 8 个像素。

  • 灰度图,1 个像素有 256 种状态(2 的 8 次方),需要 8 个 bit,即 1 个字节。

  • 彩色的 RGB 图,有 R/G/B 三个通道,每个通道 256 种状态,使用 1 个字节表示,共需 3 个字节表示 1 个像素。

  • RGBA 图,在 R/G/B 三个通道基础上增加了一个透明度通道,256 种状态,额外需要 1 个字节,共需要 4 个字节表示一个像素。

通常,考虑到计算速度和性能,图像处理和图像识别大都会将图像转成灰度图或者选择其中一个通道进行。

LSB 水印

如上文所述,灰度图像的一个像素有 256 种状态,通常用灰度值( 0-255 )表示,0 表示黑色,255 表示白色,灰度值越大表示亮度越高。

灰度可用一个字节,即 8 比特二进制数表示,其中最高位对图像的贡献最大,最低位对图像的贡献最小,称为最低比特位(Least Significant BitLSB)。

如果将一个图像所有像素的比特位抽出来,就构成了 8 个不同的位平面,从 LSB(最低有效位 0)到 MSB(最高有效位 7)。位平面从低位到高位,图像的特征逐渐变得复杂,细节不断增加,相邻比特的相关性也越强。而比特位越低包含的图像信息就越少,最低位平面类似于随机噪声。因此,改变低位对图像的成像质量影响不大。

LSB 水印就是利用了这一点,用水印信息替换载体图像的最低比特位,这样原图像的 7 个高位平面就与表示水印信息的最低位平面组成了新的图像。

LSB 水印鲁棒性较差,水印信息很容易被抹去。

频域水印

将数字图像用一个矩阵来表示,是图像的空间域表示方法,LSB 就是在图像的空间域隐藏信息,鲁棒性较差。而在图像信号的频域(变换域)中隐藏信息要比在空间域中隐藏信息具有更好的鲁棒性。那么如何把图像信号从空间域转换到频域呢?这里就需要用到大名鼎鼎的 傅里叶变换 了。

法国数学家傅里叶大家一定不陌生,高数里就有傅里叶级数。

傅里叶提出的傅里叶变换(Fourier transform)理论,表示能将满足一定条件的某个函数表示成三角函数(正弦和/或余弦函数)或者它们的积分的线性组合,可用于把信号从时间域(或空间域)变换到频率域。

在此之前人们对信号的分析主要集中在空间域,傅里叶变换的提出为频域分析奠定了基础,有助于解决许多图像的问题。

傅里叶变换在数字图像处理领域有着极为重要的应用,图像领域变换的实质是把图像函数展开成具有不同空间频率的正、余弦信号的叠加,也就是说任何图像都可以分解为若干个频率不同的亮度呈正弦变化的图像之和。把图像从空间域变换到频率域后,就能够实现对图像数据进行不同频率成分的提取。对于图像信号来说,可以把灰度(亮度)看做频率,傅里叶变换可作为图像灰度值形成的空间域与其频率域的桥梁。

在频域中隐藏信息就是傅里叶变换在数字图像处理领域的一个典型应用场景。通常多选择在图像频域的中频部分嵌入信息,因为高频部分易于被各种信号处理方法破坏,而人的视觉又对低频部分比较敏感,容易察觉低频部分的变化。

在图像频域嵌入水印信息的大致流程为:把原始图像通过离散傅里叶变换转换到频域(变换域),把水印文字信息混入,再经过离散傅里叶变换的逆变换,便得到了载有水印信息的图像。水印信息隐匿性较好。

小试牛刀

光说不练假把式,操练起来。

下图是我随手拍的鹅厂北京总部大楼一角。

对上图的一个通道进行离散傅里叶变换,在其变换域(频域)加入水印文字(fransli)后,再进行离散傅里叶变换的逆变换,便得到了下图。怎么样,看不到水印信息吧?

对上图进行离散傅里叶变换,将图片转换到频域(变换域),我们可以清楚的看到嵌入的水印文字(下图)。

频域盲水印具有比较好的防攻击性,我们来测试一下。

我们截取图像中的一部分并重新采样,然后尝试提取水印信息。

可以看到还是有很大概率可以提取到有效水印信息的。

总结

有远道而来的杠精指出:"文章的主题是 Web 盲水印,为什么大部分篇幅都在谈图片的盲水印呢?"

本文介绍了几种常见的不可见水印(盲水印)实现方式,其中鲁棒性比较好的是基于频域的数字图像盲水印,但这种水印主要是针对数字图像,而 Web 上的内容载体并不一定都是图片,常见的需要加水印的载体除了图片还有文本、表格等,这些场景该如何应用频域盲水印呢?

或许,Canvas 就是答案(之一)。

Reference

相关推荐
newxtc3 分钟前
【AiPPT-注册/登录安全分析报告-无验证方式导致安全隐患】
人工智能·安全·ai写作·极验·行为验证
?crying5 分钟前
蓝队基础1 -- 企业信息架构与安全基础
安全·架构
找藉口是失败者的习惯6 分钟前
HTTP vs. HTTPS:从基础到安全的全面对比
安全·http·https
网络安全工程师老王7 分钟前
web3+web2安全/前端/钱包/合约测试思路——尝试前端绕过直接上链寻找漏洞
安全·web安全·网络安全·信息安全·web3
清云随笔8 分钟前
axios 实现 无感刷新方案
前端
小_太_阳9 分钟前
hadoop_yarn详解
大数据·hadoop·yarn
鑫宝Code10 分钟前
【React】状态管理之Redux
前端·react.js·前端框架
忠实米线18 分钟前
使用pdf-lib.js实现pdf添加自定义水印功能
前端·javascript·pdf
pink大呲花20 分钟前
关于番外篇-CSS3新增特性
前端·css·css3
少年维持着烦恼.24 分钟前
第八章习题
前端·css·html