打馬賽克就安全了嗎?GitHub熱榜的“AI消除馬賽克”,上線三天收穫近萬star

推薦閱讀:

還在用馬賽克的方式隱藏密碼?小心被「看穿」。

像素化(又稱馬賽克)是一種常見的打碼方式,通過降低圖像中部分區域的分辨率來隱藏某些關鍵信息,比如:

再比如:

看圖找馬賽克!(找不到請看右側原圖)

但是,在你想隱藏信息的同時,有一些技術卻反其道而行之,試圖將圖片還原爲原始狀態。

最近,一個名爲 Depix 的 GitHub 項目爆火,上線三天 star 量已經高達 6.9k。項目作者 Sipke Mellema 是一名信息安全顧問。

項目地址:https://github.com/beurtschipper/Depix

Depix 能夠從像素化圖像截圖中恢復原圖中包含的文字密碼。該項目適用於使用線性方框濾波器(linear box filter)創建的像素化圖像。如下圖所示,項目作者給出了像素化圖像、恢復之後的效果和原圖的對比結果:

馬賽克打得夠嚴實了,不過 Depix 還是基本解讀出了被隱藏的信息。

如何使用

使用 Depix 從像素化圖像截圖中恢復文字密碼,操作也比較簡單:

從截圖中分割出矩形像素化 block;

在具有相同字體設置(包括文本大小、字體、顏色、hsl)的編輯器中,粘貼待處理字符的德布魯因(De Bruijn sequence)。

給該序列截圖,儘可能使用和像素化圖像相同的截圖工具。

執行命令:

Depix 算法利用線性方框濾波器單獨處理每一個 block 這一事實。它對搜索圖像中的每一個 block 執行像素化以尋找直接匹配。

對於大部分像素化圖像,Depix 儘量尋找單匹配結果,並假設這些匹配是正確的。至於周圍多匹配 block 的結果被看作像素化圖像中相同的幾何距離,並認爲這些匹配也是正確的。該過程重複多次。

在正確的 block 沒有更多幾何匹配後,Depix 將直接輸出所有正確的 block。對於多匹配 block,Depix 將輸出所有匹配的平均值。

Depix 背後的算法

像素化常使用線性方框濾波器實現。線性方框濾波器的實現很簡單,速度很快,可以並行處理多個 block。

由於線性方框濾波器是一種確定性算法,對同樣的值執行像素化通常會產生同樣的像素化 block。使用同樣位置的 block 對相同文本執行像素化,會得到同樣的 block 值。我們可以嘗試像素化文本來找出匹配的模式。幸運的是,這對於祕密值的一部分同樣奏效。我們可以把每個 block 或 block 組合看作一個子問題。

項目作者沒有選擇創建潛在字體的查找表。該算法要求在相同背景上具備相同的文本大小和顏色。現代文本編輯器還會添加色調、飽和度和亮度,也就是說存在海量潛在字體。

項目作者給出的解決方案也很簡單:使用待處理字符的德布魯因序列,將其粘貼到相同的編輯器中,然後截圖。該截圖可以用作相似 block 的查找圖像,例如:

德布魯因序列包括待處理字符的所有雙字符組合。這很重要,因爲一些 block 會重疊兩個字符。找出恰當的匹配需要搜索圖像中具備相同像素配置的 block。

在以下測試圖像中,Depix 算法無法找到「o」的一部分。這是因爲在搜索圖像中,搜索 block 還包含下一個字母(「d」)的一部分,但在原始圖像中這裏有個空格。

創建字母的德布魯因序列時加上空格顯然會帶來同樣的問題:算法無法找到後續字母的恰當 block。有空格又有字母的圖像需要更長的搜索時間,但結果也更好。

對於大部分像素化圖像而言,Depix 似乎能夠找到 block 的單匹配結果,並假設這是正確的。然後將其周圍多匹配 block 的匹配結果看作在像素化圖像中處於相同的幾何距離,並假設這些匹配也是正確的。

在正確的 block 沒有更多幾何匹配後,Depix 直接輸出所有正確的 block。對於多匹配 block,Depix 將輸出所有匹配的平均值。雖然 Depix 的輸出並不完美,但已經算不錯了。

下圖展示了包含隨機字符的測試圖像的去像素化結果,大部分字符被正確讀取:

對這個項目感興趣的讀者,可以自行嘗試。

以後截圖時給敏感信息打碼,看來不能簡單地用「馬賽克了」。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章