只用几行代码,原本被加密为一串数字的图片便“原形毕露”,可以看清其大致轮廓。
要知道,谷歌、Facebook、Twitter等大平台对图像加密,用的都是微软这一方法。
如今这么轻松就能逆向?让人细思极恐啊。
而无独有偶,此前苹果号称不会被逆向的图像加密算法,也曾被“破解”。
前不久,Facebook搞出了让用户上传果照保护隐私的“清奇方法”,用到的也是类似原理。
这不禁让人深思,Facebook上传的果照,还安全吗……
目前这一方法已经在GitHub上开源。
利用泄露编译码破解
这一方法是微软与达特茅斯学院Hany Farid教授共同研发,以识别删除网络上流传的儿童受害的照片。
通过将图片数据打乱混合、重新创建一个哈希值(hash values),它可以给每张照片匹配一个独特的“数字指纹”。
由此,系统只需将已经标记为儿童被侵害图片的哈希值与其他图片的值对比,一旦找到相同的数字串,便可判别其为非法图片。
这种手段一方面可以很好保护用户的隐私,同时还能快速甄别出网络上流传的违规图片。
但其关键就在于:该方法不可逆向,否则所有图片信息其实都在“裸奔”。
为此,微软一直未透露PhotoDNA的算法细节。
不过随着前段时间苹果NeuralHash算法被逆向,一个可计算PhotoDNA哈希值的编译库也被泄露了。
在此基础上,MIT的这位小哥提出了名为“Ribosome (核糖体)”的逆向方法。
它将PhotoDNA看作一个黑盒,然后用机器学习的方法攻击哈希函数。
因为编译库已经被泄露,所以可以生成图像与哈希值对应的数据集。
在这一数据集上训练神经网络后,该方法便能根据哈希值来逆向图像了。
小哥表示,PhotoDNA的哈希值是144元素的字节向量,他使用了类似于DCGAN和Fast Style Transfer的神经网络,在缩小卷积步长后使用残差块,从而转换出100×100的图像来。
在开源项目中,小哥已经上传了4个预训练模型。
现在只需通过一行训练命令,就能实现从哈希值到图像的转换。
python infer.py [--model MODEL] [--output OUTPUT] hash
具体结果如何?
小哥在不同数据集上都试验了一下,可以看出大部分情况下都能还原出图像轮廓。
而且先验越好,结果就会越好。比如在CelebA人脸数据集中,还原人脸的效果明显最好(第二行第一个),而它在还原别的图像时,也会倾向于给出类似于人像的结果(如第一行第一个)。
不过此方法也有失败的时候,比如Reddit数据集中,有些生成图像会存在伪影。
One More Thing
事实上,除了微软之外,还有不少科技巨头都在用哈希算法来加密图像。
比如我们前文提到的苹果。
前段时间,他们推出了一种叫做NeuralHash的加密技术来远程扫描用户照片,以此来控制色情、虐童照片的传播。
彼时苹果一再强调该技术的安全性和隐私性。
前段时间,Facebook声称要让用户上传果照保护隐私,用到的也是这种方法。
Facebook表示,他们会将你自己上传果照的哈希值标记,如果在网上发现了相同的数值,就会对该图片做删除处理。
但随着这类方法不断被成功逆向,其安全系数或许还有待人们考证。
网友们还开了个脑洞,认为Ribosome输出的结果足以再用在分辨率提升的模型上。
难道说还原高清图像也不是难题了???
不过,大家马上想到此前曾把奥巴马的低分辨率照片还原成白人面孔的算法。
嗯,这么看来,从哈希值得到原画图像,似乎还无法实现(doge)。
所以这一波破解等于是泄露,但没有完全露?