信息隐藏

内容大部分都来自于这个知乎话题:阿里巴巴公司根据截图查到泄露信息的具体员工的技术是什么?

图片中的信息隐藏

JS实现隐写术

https://www.cnblogs.com/kingthy/p/imagemask.html

频域数字水印

https://www.zhihu.com/question/50735753

如果想详细了解实现原理和基础知识,请阅读《数字图像处理》这本书籍。

这种具有一定抗攻击能力的水印技术,我们又称之为鲁棒水印

具体的技术实现参考:ImageSigner,一款基于傅里叶变换的鲁棒频域水印。

这是一款由作者开发的图像水印程序,作为一个演示的DEMO程序,它仅仅支持256*256大小的图片,您可以通过查阅源代码,来了解频域水印的具体算法及过程,它使用C++与Qt Framework 4.8.6编写完成,遵循GPLv3开源协议。

非图片的信息隐藏

思路就是通过页面不同的排版、样式、字体等等,来标注用户信息。

我们目前的用户id是4亿多,接近2^29,如果用二进制的话,那么需要至少29行才能表示一个userid,保险起见,应该要至少30行(1073741824)。

这个信息太长了,考虑到我们当前活跃的收费用户人数不多(2018年11月,财富先锋4680,金融大师4926,大研究998,加起来总共11000不到),因此我们可以做一个映射关系,对收费用户的userid做一个短映射。

我们以10W大额收费用户来算,需要131072=2^17,也就是17位长度的一个标记。感觉还是太长了。

考虑到用分组标记来表示,一个分组表示0-9的数字的话,那么需要5个分组。

比如:

  • 文字中插入伪随机空格,空格的位置可以定位到个人身份
  • 内容位置横轴、纵轴浮动几个像素,几个元素之间的相对位置关系,都可以传达信息
  • 每个人看到的页面用不同的元素、背景、字体组合
  • 一行满20字就强行换行表示0,不是20字表示1
  • 以汉语词汇来表示。比如用“规则”和“规矩”作为0和1。我们总能找到高频词汇,然后找一组同义词。甚至可以用“的得地”来表示编码
  • 找 5 个位置,每个位置用 css 分别左右上下,各两个 px,表示 0-9 的数字,然后这样最多可以表示 99999 的工号,然后拿截图,进行像素级比对,就能知道工号了。

参考资料

隐写术的wiki介绍:https://zh.wikipedia.org/wiki/%E9%9A%90%E5%86%99%E6%9C%AF