像素化(又称马赛克或「打格仔」)是一种常见的打码方式,通过降低图像中部分区域的分辨率来隐藏某些关键信息,但是,在你想隐藏讯息的同时,有一些技术却反其道而行之,试图将图片还原为原始状态。
最近,一个名为Depix的GitHub项目爆火,上线三天star量已经高达6.9k。项目作者Sipke
Mellema是一名资讯安全顾问。Depix能够从像素化图像截图中恢复原图中包含的文字密码。该项目适用于使用线性方框滤波器(linear
box
filter)创建的像素化图像。如下图所示,项目作者给出了像素化图像、恢复之后的效果和原图的对比结果(点击放大浏览)▼▼▼
使用Depix从像素化图像截图中恢复文字密码,操作也比较简单:从截图中分割出矩形像素化block;在具有相同字体设置(包括文本大小、字体、颜色、hsl)的编辑器中,粘贴待处理字符的德布鲁因(De
Bruijn sequence);给该序列截图,尽可能使用和像素化图像相同的截图工具。
Depix算法利用线性方框滤波器单独处理每一个block这一事实。它对搜索图像中的每一个block执行像素化以寻找直接匹配。对于大部分像素化图像,Depix尽量寻找单匹配结果,并假设这些匹配是正确的。至于周围多匹配block的结果被看作像素化图像中相同的几何距离,并认为这些匹配也是正确的。该过程重複多次。在正确的block没有更多几何匹配后,Depix将直接输出所有正确的block。对于多匹配block,Depix将输出所有匹配的平均值。
Depix背后的算法
像素化常使用线性方框滤波器实现。线性方框滤波器的实现很简单,速度很快,可以并行处理多个block。由于线性方框滤波器是一种确定性算法,对同样的值执行像素化通常会产生同样的像素化block。使用同样位置的block
对相同文本执行像素化,会得到同样的block值。我们可以尝试像素化文本来找出匹配的模式。幸运的是,这对于秘密值的一部分同样奏效。我们可以把每个block或block组合看作一个子问题。
项目作者没有选择创建潜在字体的查找表。该算法要求在相同背景上具备相同的文本大小和颜色。现代文本编辑器还会添加色调、饱和度和亮度,也就是说存在海量潜在字体。项目作者给出的解决方案也很简单:使用待处理字符的德布鲁因序列,将其粘贴到相同的编辑器中,然后截图。该截图可以用作相似block的查找图像,例如:
待处理字符的德布鲁因序列截图。(github.com)
德布鲁因序列包括待处理字符的所有双字符组合。这很重要,因为一些block会重叠两个字符。找出恰当的匹配需要搜索图像中具备相同像素配置的block。创建字母的德布鲁因序列时加上空格显然会带来同样的问题:算法无法找到后续字母的恰当block。有空格又有字母的图像需要更长的搜索时间,但结果也更好。
对于大部分像素化图像而言,Depix似乎能够找到block的单匹配结果,并假设这是正确的。然后将其周围多匹配block
的匹配结果看作在像素化图像中处于相同的几何距离,并假设这些匹配也是正确的。在正确的block没有更多几何匹配后,Depix直接输出所有正确的block。对于多匹配block,Depix将输出所有匹配的平均值。虽然Depix的输出并不完美,但已经算不错了。
对这个项目感兴趣的读者,可以自行尝试。以后截图时给敏感信息打码,看来不能简单地用「马赛克」了。
声明:该文观点仅代表作者本人,加国头条 属于信息发布平台,加国头条 仅提供信息存储空间服务。
0 Comments