越是刻意隐藏的信息往往越是容易吸引人的注意。
人们总是对编辑过或是刻意隐藏的信息充满好奇,并且会试图还原编辑和解码隐藏信息。
法国电视台曾在2017年播出过一部关于比特币的纪录片。
片中采访了被称为比特币耶稣(Bitcoin Jesus)的Roger Ver,他决定赠送1000美元的比特币给观众,先(看)到先得。
然而,纪录片在播出的时候,由于电视台没有获得电视转播赠送金钱奖品的授权,分享的比特币钱包二维码和私钥被打了码。
△电视节目播出画面△被打码的二维码
故事本来到这里就结束了——这1000美元可能没有观众拿到,唯一有机会领取的只有录制采访的工作人员。
但或许是不想让观众失去这1000美元。在采访的最后,节目中展示了清晰的二维码的一小部分。
△露出一部分的二维码
两名研究人员通过不同摄像机镜头透露的微小信息,结合关于二维码编码方案的知识,经过16小时的手动逆向工程,成功恢复了被模糊掉的私钥并领取了奖金。
虽然这种二维码的破解比较特别,并且结合了不同的技术,但更多通用的恢复模糊信息的方法也已经公布了。
比如人工智能领域。早在2016年,就有研究提出一种基于GAN的超分辨率和文本识别算法TextSR,用来识别低分辨率的文本。
杜克大学也提出了一种新型超分辨率算法PULSE,可以从低分辨率的图像中恢复高分辨率的人脸图像。
该算法根据输入的模糊图像,使用GAN生成人脸,并对其进行调整(downscale,降频),直到调整后的版本与输入图像相匹配。
由于模糊的图像也可以看作是低分辨率的图像,任何基于人工智能的图像“超分辨率算法”都可能适合用来做模糊图像还原处理。(例如ISR或TecoGAN(具有时序一致性的GAN))
△TecoGAN(第1行:参考,第2行:TecoGAN输出,第3行:TecoGAN输入)
这些算法的表现看上去都很好,但由于涉及到了人工智能的创造力,它们生成的结果并不完全可信。杜克大学在PULSE算法的介绍中也明确表示了这一点:
“我们注意到很多人担心PULSE将被用于识别脸部被模糊的个人。我们想强调的是,这是不可能的——PULSE做出不存在的人的假想脸,不应该与真实的人相混淆。它不会帮助识别或重建原始图像。”
但是对于黑客来说,他们仍然可以通过这种方式发现编辑过的二维码或信用卡号码,并通过校验检查其有效性。
所以,目前我们常用和常见的一些信息打码的方式其实是不安全的,比如马赛克。
下面是两种常见的模糊信息的方式。
1)马赛克/像素化/线性盒滤波:多个像素被合并成一个更大的像素,其颜色是原始像素值的平均值。这种方法处理后的信息都是像素化的方块。
2)高斯模糊(或类似的):使用一个特定的内核,每个像素的新颜色都受到其周围像素的影响(通过加权平均)。这种方法处理后的信息看起来就像隔着一层毛玻璃一样模糊。
这里主要讨论第一种方式。
先说结论,用马赛克模糊信息并不可靠,隐藏的信息极易被泄露。
由于线性盒滤波是一种确定的算法,对相同的数值进行像素化,所以会产生相同的像素化块。
基于该算法的特性,对相同的文本进行像素化,使用相同位置的块,将产生相同的块值。利用这一点可以尝试对文本进行像素化以找到匹配的模式。
这样一来,还原像素化信息的核心就在于,对潜在的输入数据进行像素化处理,然后比较结果。与字典攻击(Dictionary Attack)类似,只对可能的输入进行比较,大大提高了暴力破解的效率。
这些方法还利用了马赛克“哈希函数”的缺失雪崩效应。当输入图像中的一个细节发生变化时,这只会影响到输出图像中的一个小区域。
因此,可以将问题划分为更容易解决的子问题,只搜索较小区域的匹配。
GitHub上一个还原像素化图像信息的工具Depix,用的就是这种方法来恢复文本的。
使用Depix需要一个具有预期字符的De Bruijn序列,其字体设置与被模糊图像相同(如文字背景、大小和颜色)。
△De Bruijn序列
其破解过程是:取一个预期字符的De Bruijn序列,将其粘贴在同一个编辑器中,并对其截图。该截图被用作类似区块的查询图像,通过比较和匹配,一步步还原文本。
对于大多数像素化的图像,该工具似乎能找到单一匹配块的结果。
它假定这些结果是正确的,然后比较周围多匹配块的匹配结果,使其与像素化图像中的几何距离相同。这些匹配结果也被视为正确。
在正确的块没有更多的几何匹配后,它将直接输出所有正确的块。对于多重匹配的块,它输出所有匹配的平均值。
虽然这种方法还原的文本大多数字符都可以辨认,但其限制条件较多,还原的效果也并不是很好,很多地方还是糊的。
Jumpsec Labs的一位研究员指出,由于现实世界中的例子总是有一些细微的变化和噪音,很容易给识别带来麻烦,所以实际上Depix并没有想象中的好用。
于是,他们发起了一个挑战,如果能够破解下面被打码图片中的信息,就可以领取奖励。
网络安全公司Bishop Fox的首席研究员Dan Petro接受了这个挑战。他开发了一个名为Unredacter的工具,仅用了几分钟就成功破译了图片中模糊掉的信息。
Unredacter输出的结果(已做模糊处理)
再把输出的结果打码(见下图)。
△上图:挑战赛原始图片(按灰度处理,底排固定) 下图:Unredacter的猜测结果
可以看到,这个结果跟原始的图片是非常接近的。
Jumpsec Labs的回复也证实了Unredacter输出的结果是正确的。
△Jumpsec Labs回复Dan的邮件
值得注意的是,Dan的算法相较Depix更具有通用性。无论是在GiMP、Photoshop或其它编辑器中,用类似涂抹的方式打马赛克,其结果都是一样的。
最后,在Dan的帖子中,他提出了一种相比马赛克更安全的打码方式,那就是用黑色条来遮挡重要信息。
上一篇
下一篇