你还在用马赛克掩盖密码吗?小心可能会被揭穿。
像素化,常被称为马赛克,是一种常见的遮挡方法,通常通过降低图像特定区域的分辨率来隐藏重要信息。


然而,正当你试图隐藏信息时,一些技术却能逆转这一过程,将图片还原为原始状态。
最近,一个名为 Depix 的 GitHub 项目迅速走红,上线仅三天便获得了近 7000 颗星。项目的创作者是信息安全顾问 SIPke MelleMa。

项目链接:https://Github.coM/beuRtschIPpeR/Depix
Depix 能够从像素化的图像中恢复出隐藏的文字密码,特别是适用于使用线性方框滤波器创建的像素化图像。

即使马赛克处理得再严密,Depix 也能基本解读出被遮挡的信息。
使用方法
使用 Depix 恢复像素化图像中的文字密码的步骤相对简单:
首先,从截图中提取出矩形的像素化块;
接着,在具有相同字体设置(如文本大小、字体、颜色、HSL)的编辑器中,粘贴待处理字符的德布鲁因序列(De Bruijn sequence)。
然后,对这一序列进行截图,尽量使用与像素化图像相同的截图工具。
执行命令:
Depix 算法会单独对每个块进行处理,利用线性方框滤波器对图像中的每一个块执行像素化,以寻找匹配。
对于大多数像素化图像,Depix 会尽力寻找单一匹配,并假设这些匹配是准确的。而对于周围有多个匹配的块,算法也会将这些看作是同一几何距离的匹配,认为它们是正确的。此过程会反复进行。
在没有更多几何匹配的正确块后,Depix 会直接输出所有正确的块。对于多个匹配的块,则会输出所有匹配的平均值。
Depix 背后的算法原理
像素化通常通过线性方框滤波器来实现,这种方法简单且速度快,能够并行处理多个块。
由于线性方框滤波器是一种确定性算法,对于相同的输入值执行像素化时,通常会产生相同的像素化块。使用相同位置的块对相同文本进行像素化会得到一致的块值,我们可以尝试对文本进行像素化以找出匹配模式。这一原理同样适用于秘密值的一部分。我们可以将每个块或块组合视为一个子问题。
项目作者没有创建潜在字体的查找表。该算法要求在相同背景下,保持相同的文本大小和颜色。现代文本编辑器可能会添加色调、饱和度和亮度,因此存在大量潜在字体。
作者提供的简单解决方案是:使用待处理字符的德布鲁因序列,将其粘贴到相同的编辑器中,然后进行截图。该截图可以用作类似块的查找图像。

德布鲁因序列包含待处理字符的所有双字符组合,这一点非常重要,因为某些块可能会重叠两个字符。找到正确匹配需要在图像中搜索相同像素配置的块。
在下面的测试图像中,Depix 算法未能找到「o」的一部分。这是因为在搜索图像中,该块还包含下一个字母(「d」)的一部分,而原始图像中此处有一个空格。

在创建字母的德布鲁因序列时添加空格显然会带来类似的问题:算法无法找到后续字母的正确块。包含空格和字母的图像需要更长的搜索时间,但结果也更好。
对于大多数像素化图像,Depix 似乎能找到块的单一匹配,并假设这是正确的。随后,它将周围的多个匹配块视为在像素化图像中处于相同几何距离,并认为这些匹配也是正确的。
当没有更多几何匹配的正确块后,Depix 会直接输出所有正确的块。对于多个匹配块,Depix 会输出所有匹配的平均值。尽管 Depix 的输出并不完美,但已经相当不错。
下图展示了包含随机字符的测试图像的去像素化结果,大多数字符被正确识别:
对这个项目感兴趣的读者,可以自行尝试。
今后在截图时,对敏感信息进行马赛克处理,显然不再是简单的选择。
