类似 DRM 的“可逆水印”在技术上能实现吗?

2023-02-26 20:36:50 +08:00
 edis0n0
一个合作了很久的客户网站图片经常被爬让我帮他想个办法,最好能实现在自己网站上显示时没水印,被别人采集或者保存时满屏水印。我想到了我常看的日本电子书网站 melonbooks 、bookwalker 的 DRM ,浏览器下载到的都是洗牌后的图片,在前端还原成原始图片。有没办法现成的算法实现服务器传都是水印的图片,在前端通过预设密钥(水印原文一类的东西)把水印消掉?最好是 WASM ,逆向困难一些。截图拍屏这类非无损的做法就不用管了。
1712 次点击
所在节点    程序员
11 条回复
hoky
2023-02-26 20:42:57 +08:00
跟普通的防盗链一个原理呀,只要能判断是盗链就行。
edis0n0
2023-02-26 20:44:29 +08:00
@hoky #1 判断不了,采集者用的工具很高级,日志里完全看不出特征,WAF 的防 bot 已经拉满了,只能做前端解密。
dearmymy
2023-02-26 21:11:14 +08:00
没必要非要做水印处理阿。既然要防止爬,直接传加密图片就行,干嘛还想着加水印。
edis0n0
2023-02-26 21:31:56 +08:00
@dearmymy #3 客户觉得让别人爬到全是水印的图片效果更好
billccn
2023-02-26 22:21:00 +08:00
很大的一个问题是除非你可以控制客户端,要不然在经济利益的驱使下总是可以绕过的,你只能提高破解的成本。

我给客户设计过一个是把图片转换成视频然后用加上 HDCP ,这样可以抵御截图,最后研究的时候发现国内带解码功能的采集卡太多了,绕过成本比我们加密的成本还低,只好作罢。

你想做的可以用我这个思路的变体,就是你把图片挖一些透明的水印,在透明部分后面放加上版权保护的视频,正好把透明的部分填上(互补)。相对我本来的设计,这个视频像素和帧率都可以比较低,占用编码器时间少,应该还是比较经济的。(注 JPEG 不支持透明色,需要用 PNG/GIF/WEBP/HEIC)

这个视频还可以做高级一些,比如利用各种视觉暂留的技巧(dithering 、interlacing)让单帧截图都可以看出来水印,只有连续放映的时候才是原来的颜色,这样的话即使解密采集卡也没用,一定程度上还可以抵御拍照。你觉得这个技巧就足够的话也可以用 GIF 动画实现,不需要加密视频。
flyqie
2023-02-26 22:28:24 +08:00
有个问题,既然都上 wasm 了,为啥还要明文传输图片?

后端直接传加密后的图片然后前端用 wasm 解密后通过各种方式显示出来不就完事了?

显示的话可以直接全图或块拼接(块拼接需要额外写 css)。
flyqie
2023-02-26 22:35:15 +08:00
@flyqie #6

看到楼主回复了。。。

还有个办法,除了传有水印图片外,再传一个加密的无水印 diff 数据(怎么传看你心情)。

前端显示的时候,wasm 用 diff 生成一个新图层并覆盖在水印图片上,然后再合并输出成一个正常的无水印图片。
rus4db
2023-02-26 23:47:53 +08:00
模拟漏洞( Analog hole )是堵不了的
lianyue
2023-02-27 00:04:43 +08:00
生成两张图
a + b = 一张完整的图
a 图片 布满水印文字文字颜色:透明
b 图片 布满水印文字文字颜色:图片原来的颜色 其他都是透明

b 图片设置成 背景 底层 这样通过右键保存是 a 图片
litchinn
2023-02-27 08:46:31 +08:00
数字水印适合吗
kenvix
2023-02-27 22:49:46 +08:00
@litchinn 数字水印只能用来追溯,不能反爬

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/919329

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX