系列之路:
数字水印技术在前端落地的思考[0] - 概念篇
数字水印技术在前端落地的思考[1] - 方案篇
引子
少说硕士毕业了也已经三年多了,遥想6年前进入到研究领域学习,在当时数据挖掘、人工智能等技术领域林立的背景下,全班只有我一人毅然选择了这个比较偏门的技术领域去研究,只能说自己是够硬气的,至于选择数字水印研究的原因,在文末再以小彩蛋的形式写一下吧,引子不宜太长。
关于这个系列
关于这个文章系列,其实我更希望把着重点放在“前端”上,想通过整理思考,看看能不能把这样的一门技术放到我们的前端中去,因此下面几个section我会简单地介绍一下什么是数字水印,然后就会开始对前端加入数字水印的可行性方案进行猜想。
什么是水印
水印技术其实是历史悠久的技术了,早在宋朝时期的交子上就已经有显性水印的出现,而这门技术现在更是深入我们的生活每个角落,不说远的,可以看到我们的红色毛爷爷身上也是有着美丽的水印存在。
那么水印有什么作用呢?主要作用就是标记版权和检测版权(辨认真伪),这两个作用其实也是一个功能。
显性水印的优点在于容易处理,显性水印的嵌入相当于在载体层上再加一层水印层来达到标记水印的目的,有点PS基础的人都会怎么去加水印,相当简单。缺点在于它是每个人都可视的,攻击者就可以通过裁剪、模糊等操作对水印进行攻击消除,同时显性水印也会破坏图片的完整性。
什么是数字水印
上面一个section中,有两个关键词,“显性”和“看到”,这就说明原有的显性水印技术其实是我们肉眼可见,可以直接在载体上看得到的。针对其优缺点,在1995年一位xx教授(这个实在忘了,大大不好意思)就提出了一个崭新的水印技术,数字水印。
数字水印核心概念就在于“数字”两个字,对载体和水印分别做数字化处理,然后在空间域或者频域通过特定的算法将水印数据加入到载体数据中,同时保证不会破坏载体的完整性,提高抗攻击能力(衡量值是鲁棒性)。
有点抽象对不对?这里举个简单的例子。
PS: 为了更易懂,我就用了一个非常非常简单,性能上却是很差的算法来做讲解,大家领会核心就好。
嵌入水印步骤
1. 先预处理载体和水印对象(图片)
假设我们有一张灰色的刘德华图片,将它的每一个像素转换成一个灰度值,得到一个灰度值矩阵,然后再把每个灰度值转成二进制,全部合并一起以后就得到一个二进制序列。(当然并非所有水印算法都是按照这套,像我有的算法就是在灰度矩阵就能进行嵌入)
对水印图像进行同样的预处理
2. 特定算法嵌入数据
这个就是各家发挥想象,通过自己研究的算法把水印图像数据嵌入到载体图像数据中。例如,这里讲一个简单的空间域(大部分算法分为空间域嵌入或频域嵌入)算法,假设我们的水印图像是32x32的大小,那么序列数据长度就是8 x 32 x 32 = 8192,那么我们就在载体图像序列中每隔四个位的那个位就对水印序列的一个位进行异或处理:
当然了,选择插入位置其实也是一个可以研究的算法,这里就按最简单的来。通过这样简单的操作,水印数据就嵌入到载体数据中了(当然,这个简陋的异或处理对原有图像的完整度也是破坏甚高的,如何在嵌入的时候保证完整度是其中一个研究点)。
3. 逆处理
跟步骤1相反,把最后得到的序列按八位转换为灰度值,然后再输出为一张图片。那么这张图片就是嵌入了水印的图片了。
水印检测步骤
有嵌入,就当然要有提取和检测,要判断这张图片中是不是有我们的水印在里面。在说步骤之前,有两个概念要分清:
盲水印算法 盲水印并不是概括地指数字水印技术,实际上它是数字水印中的一种,意思就是在水印提取/检测的阶段中,不需要原有的图片或者原有的水印图片参与的算法,就叫做盲水印算法。
非盲水印算法: 顾名思义,非盲水印就是在提取/检测的阶段中,需要原有的图片或者原有的水印图片参与的算法,就是非盲水印算法。
可以看得出,我们例子的算法是非盲水印算法,需要拿原有的图片进行比对才能得出我们的水印图像。
1.预处理
跟嵌入步骤一样,分别对已嵌入水印的图片和原有的图片进行预处理,得到两个二进制序列。
2. 选择嵌入位进行逆算法
我们的选块算法是:每隔四个位的那个位就是我们的嵌入位,嵌入算法是:异或算法。
那么如上图,我们就能得出我们的水印二进制序列。
3. 逆处理
把水印二进制序列进行逆处理,看看能不能得到我们之前嵌入的水印图片?
几个关于数字水印需要知道的点
有人说,不截图用手机拍照不就可以了吗?这是大错特错,数字水印嵌入载体对象以后,实际上就是载体对象的一部分,通过手机拍照可以看到图片的一切都能够用算法把水印提取出来,例如我们电影院的电影,实际上就是嵌入了数字水印,如果盗摄的话是可以查到盗摄来源的。
裁切可以破坏水印吗?抵抗攻击能力中就包含裁切,模糊等攻击,目前绝大部分的水印算法都有能力抗拒这些攻击。
数字水印能带给前端什么
终于把数字水印的概念用了最简单的方式讲述了一遍,后面关于数字水印的算法将只会一笔带过(或者其他系列再细谈),我会把着重点放回到前端上。
那么,在前端领域上我们为什么会需要数字水印呢?或者说在什么场景下我们可以用到数字水印呢?
阿里巴巴公司根据截图查到泄露信息的具体员工的技术是什么?
这个经典的案例就是其中一个使用场景,把当前用户的数据加入到水印中再嵌入到前端页面,那么当这个用户对当前屏幕截屏或者拍照的时候,就会把水印信息也截取了下来,之后在网上看到这张图片的时候就能追溯源头了。
总结
第一篇就主要讲一下数字水印的基本概念和数字水印可以在前端怎么应用,下一篇就开始来研究下可行的方案和优缺点。
谢谢观看!
======= 小彩蛋 =======
为什么我当初会选择数字水印领域?
起源是我刚开始读硕的时候看到一篇新闻,一个摄影师控告某个公司盗用自己的摄影作品,但是却无法证明作品是自己拍的。。这就有点证明不了自己是自己的感觉了。。因此当时就想把这门技术落地,做成云服务,那么以后作品的拥有者就能通过服务来添加他们的独有水印,然后当需要认证的时候就可能有证据证明这是属于他们的作品了。当然,不是免费的,0.1元嵌入一张的话,利润都是相当可观的,但是当时跟两个投资人谈过,他们的兴趣都不大。。所以最后只能不了了之了哈哈哈。