選擇性兼容格式的 JPEG 加密?
我正在努力為圖片建構一個格式兼容的加密系統。它的目的是能夠模糊圖片的特定區域(即面部、車牌號碼……),同時保持其餘部分不變。例如,目標是能夠在任何給定的社交網路上發布圖片,使“敏感”區域僅對有限數量的人可見,可能是您的朋友的一部分,他們已獲得許可。
我對像素排列和 BMP 有一些(有爭議的)想法,但我在大多數社交網路只使用 JPEG 並且任何其他格式都被壓縮的事實中偶然發現,這基本上破壞了該方案。
所以現在我被困在試圖找到一個新的加密方案。理想情況下,它應該具有以下屬性:
- 格式兼容:圖像應該仍然是有效的 JPEG,可打開和查看。
- 不顯眼:加密圖像在加密區域上不應該有一大塊隨機顏色的像素,但要稍微接近它“應該”的樣子——比如模糊或像素化,但可逆。圖像的其餘部分應保持不變。
- 安全:除了密碼學的觀點,從感知的角度來看,圖像應該足夠模糊,以使例如一張臉在沒有解碼的情況下無法辨識。
2 和 3 有點相反,所以我的目標是在它們之間找到一些可接受的中間立場。
我一直在嘗試使用 Droogenbroeck 和 Benedett 的“未壓縮和壓縮圖像的選擇性加密技術”,該技術建議對於每個 8x8 方格,保持 DCT 的 DC(又稱最重要)係數,並對其餘部分進行編碼。然而,它對中大圖像效果很差:因為加密是在小方塊上完成的,並且保持大部分能量的 DC 係數保持不變,圖像越大,那些 8x8 變得“更小”比例,最終對於超過 500x500 的圖像變得無用。除此之外,我發現的大多數論文都使用 JPEG2000 - 這顯然會使一切變得更容易,但基本上沒有任何東西支持,所以它現在似乎不是一個合理的解決方案。
我知道這有點開放式問題,所以具體來說,我的問題是:對於這個問題或其他類似問題,是否有以前的工作或任何已經討論過的解決方案?您對如何解決此問題有任何想法嗎?
感謝您抽出寶貴時間,如果有我可以澄清的,請告訴我 - 理想情況下,我應該連結我的意思的圖片,但我認為我不允許低於某個代表門檻值:(
編輯
正如 fgrieu 所指出的,這還有一個額外的問題
$$ please see below $$. 例如,Facebook 在上傳時顯然會解壓縮並重新壓縮圖像,這意味著額外的、不可避免的質量損失。這意味著帶有係數的“細粒度”技巧——尤其是最不重要的——將不起作用。(也感謝 Ilmari Karonen 連結本文!) fgrieu 指出的問題在其他社交網路中是可以避免的——例如,Google+ 不會重新壓縮圖像,所以那裡沒有問題。
雖然我還沒有聽說過關於這個確切問題的先前工作,但將一些標準解決方案拼接到其他一些問題上幾乎可以解決這個問題。
鴿巢原理有一個漏洞:如果輸出文件比輸入圖像大,則有可能儲存“額外”資訊。
從您希望每個人都看到的模糊圖像開始,您想以某種方式向其中添加更多資訊,以便適當的人可以提取未模糊的圖像。
鏡框
也許您可以保持該模糊圖像的每個像素不變,並在圖像上方、下方或一直添加類似相框的內容來儲存額外數據,例如無點二維碼儲存額外數據而不修改圖像的中心部分。在設計條碼方面做了大量工作,以便可以恢復所有原始數據,即使條碼的失真比簡單地解壓縮 JPEG 然後以更差的質量設置重新壓縮要糟糕得多。如果您有一個非常寬的邊框圖片框架,則可以以標準條碼的形式在框架中對整個(未模糊)原始圖像文件進行編碼(加密版本)。如果您創建“殘差圖像”,即(未模糊的)原始 JPEG 文件與幀中間的模糊 JPEG 圖像之間的差異,則該殘差圖像應該全為零,除了被模糊的區域,
無邊界
如果您想要隱寫術並且您認為該幀太過分了,那麼似乎有大量關於數字水印的研究被設計成足夠健壯,可以在解壓縮 JPEG、對其進行微小修改和重新壓縮時存活下來。也許您可以調整此類水印和隱寫術技術以儲存(壓縮然後加密的版本)殘差圖像。 “使用簡單的隱寫工具隱藏文件中的數據”; “如何在 jpg 或 gif 照片中隱藏資訊?”; 等等如果這不能給你足夠的儲存空間來儲存整個殘差圖像,也許你可以放大圖像(模糊原始圖像的每個像素擴展為擴展圖像的 4 個像素),為編碼數據提供更多區域. 或者,也許您可以放大模糊圖像,然後應用DataGlyph 半色調之類的東西來創建從遠處看起來像模糊 JPEG 文件的圖像,但Dataglyph 數字半色調包含(壓縮然後加密的版本)殘留文件或整個(未模糊)原始文件。
選擇兼容格式的 JPEG 加密,因為您正在嘗試這樣做是一個好主意,但它不會工作……不像這樣。
為了保持簡短的原因:
JPEG 使用有損壓縮(甚至有損重新壓縮)。如果你真的想創建一個格式兼容的實現,你必須注意你獨立於任何“(重新)壓縮”問題,這可能會破壞你有價值的加密數據。
這意味著您必須解決無法在圖像中儲存與加密一樣多的數據的問題……用更簡單的話來說:您的算法本質上也是有損的,您將無法恢復將“加密”資訊還原為原始資訊。
事實上,這有點像一個反向的魚缸問題:你必須看看在有人關閉了未知數量的魚缸後你能恢復多少個魚缸。無論你做什麼,它都不會與你原來的種群數量相同。回到您的圖像問題,這意味著您將無法恢復與加密一樣多的像素……這是 JPEG 有損壓縮的結果。
唯一的替代選擇是創建適合您需求的新圖像格式。然而,如果有人會採用您的新圖像格式,就會出現問題。看看aPNG(動畫PNG)發生了什麼,我不太樂觀你會有機會 - 除非一些社交網路推動並開始支持它。然後你仍然需要看看它是否真的傳播到那裡的幾個程序和工具中(想想:Photoshop 支持等)。
請不要誤會我的意思:我喜歡你的想法 - 但與許多好想法一樣,我沒有看到它出於技術原因發生。很抱歉這麼說。