阿里根據截圖查到洩露者,這樣的技術是如何做到的?

發表於2016-09-22

【導讀】:在月餅事件中,阿里開除了 5 位用指令碼秒殺月餅的技術人員。後有員工對外洩露了內網通報的截圖,洩露者已被查出並處理。後續有媒體報導提到,阿里對員工的訪問介面加了一層肉眼無法識別的東西。有網友對這個技術好奇,在知乎提問:

在月餅事件中的新聞中提到。阿里對員工訪問的介面做了一定的處理。貌似這不是簡單的水印。這種處理是什麼,是怎麼做到的呢?
阿里根據截圖查到洩露者,這樣的技術是如何做到的?

伯小樂整理了 2 位知乎網友的回答分享。(均已獲授權)

一、liu fuqiang 的分享,3800+ 頂

本文通過一個的實驗,簡要介紹頻域手段新增數字盲水印的方法,並進一步驗證其抗攻擊性。在上述實驗的基礎上,總結躲避數字盲水印的方法。(多圖預警

本文分為五個部分,第一部分綜述;第二部分頻域數字盲水印製作原理介紹;第三部分盲水印攻擊性實驗;第四部分總結;第五部分附錄(原始碼)。

一、綜述

本文提供的一種實現“阿里通過肉眼無法識別的標識碼追蹤員工”的技術手段。通過看其他答主的分析,阿里可能還沒用到頻域加水印的技術。

在原答案中,存在措辭欠妥之處,對此表示由衷的歉意

相對於空域方法,頻域加盲水印的方法隱匿性更強,抵抗攻擊能力更強。這類演算法解水印困難,你不知道水印加在那個頻段,而且受到攻擊往往會破壞影象原本內容。本文簡要科普通過頻域手段新增數字盲水印。對於web,可以新增一個背景圖片,來追蹤截圖者。

所謂盲水印,是指人感知不到的水印,包括看不到聽不見(沒錯,數字盲水印也能夠用於音訊)。其主要應用於音像作品、數字圖書等,目的是,在不破壞原始作品的情況下,實現版權的防護與追蹤。

新增數字盲水印的方法簡單可分為空域方法和頻域方法,這兩種方法新增了冗餘資訊,但在編碼和壓縮情況不變的情況下,不會使原始影象大小產生變化(原來是10MB新增盲水印之後還是10MB)。

空域是指空間域,我們日常所見的影象就是空域。空域新增數字水印的方法是在空間域直接對影象操作(之所以說的這麼繞,是因為不僅僅原圖是空域,原圖的差分等等也是空域),比如將水印直接疊加在影象上。

我們常說一個音有多高,這個音高是指頻率;同樣,影象灰度變化強烈的情況,也可以視為影象的頻率。頻域新增數字水印的方法,是指通過某種變換手段(傅立葉變換,離散餘弦變換,小波變換等)將影象變換到頻域(小波域),在頻域對影象新增水印,再通過逆變換,將影象轉換為空間域。相對於空域手段,頻域手段隱匿性更強,抗攻擊性更高

所謂對水印的攻擊,是指破壞水印,包括塗抹,剪下,放縮,旋轉,壓縮,加噪,濾波等。數字盲水印不僅僅要敏捷性高(不被人抓到),也要防禦性強(抗打)。就像Dota的敏捷英雄往往是脆皮,數字盲水印的隱匿性和魯棒性是互斥的。(魯棒性是抗攻擊性的學術名字)

二、頻域製作數字盲水印的方法

訊號是有頻率的,一個訊號可以看做是無數個不同階的正弦訊號的的疊加。

阿里根據截圖查到洩露者,這樣的技術是如何做到的?

上式為傅立葉變換公式,ƒ(t) 是指時域訊號(對於訊號我們說時域,因為是與時間有關的,而影象我們往往說空域,與空間有關),ω 是指頻率。想要對傅立葉變換有深入瞭解的同學,建議看一下《訊號與系統》或者《數字訊號處理》的教材,裡面系統介紹了傅立葉變換、快速傅立葉變換、拉普拉斯變換、z變換等。

簡而言之,我們有方法將時域訊號轉換成為頻域,同樣,我們也能將二維訊號(影象)轉換為頻域。在上文中提到,影象的頻率是指影象灰度變換的強烈情況。關於此方面更系統的知識,參見岡薩雷斯的《影象處理》。

下面以傅立葉變換為例,介紹通過頻域給影象新增數字盲水印的方法。注意,因為影象是離散訊號,我們實際用的是離散傅立葉變換,在本文采用的都是二維快速傅立葉變換,快速傅立葉變換與離散時間傅立葉變換等價,通過蝶型歸併的手段,速度更快。下文中傅立葉變換均為二維快速傅立葉變換。

阿里根據截圖查到洩露者,這樣的技術是如何做到的?

上圖為疊加數字盲水印的基本流程。編碼的目的有二,一是對水印加密,二控制水印能量的分佈。以下是疊加數字盲水印的實驗。這是原影象,尺寸300*240 (不要問我為什麼不用Lena,那是我前女友),

阿里根據截圖查到洩露者,這樣的技術是如何做到的?

之後進行傅立葉變換,下圖變換後的頻域影象,

阿里根據截圖查到洩露者,這樣的技術是如何做到的?

這是我想加的水印,尺寸200*100,

阿里根據截圖查到洩露者,這樣的技術是如何做到的?

這是我編碼後的水印,編碼方式採用隨機序列編碼,通過編碼,水印分佈到隨機分佈到各個頻率,並且對水印進行了加密,

阿里根據截圖查到洩露者,這樣的技術是如何做到的?

將上圖與原圖的頻譜疊加,可見影象的頻譜已經發生了巨大的變化,

阿里根據截圖查到洩露者,這樣的技術是如何做到的?

之後,將疊加水印的頻譜進行傅立葉逆變換,得到疊加數字水印後的影象,

阿里根據截圖查到洩露者,這樣的技術是如何做到的?

肉眼幾乎看不出疊加水印後的影象與原圖的差異,這樣,數字盲水印已經疊加到影象中去。實際上,我們是把水印以噪聲的形式新增到原影象中。下圖是在空域上的加水印圖與原圖的殘差(調整了對比度,不然殘差調小看不見),

阿里根據截圖查到洩露者,這樣的技術是如何做到的?

可以看出,實際上上述方法是通過頻域新增冗餘資訊(像噪聲一樣)。這些噪聲遍佈全圖,在空域上並不容易破壞。

最終,均方誤差(MSE)為0.0244

訊雜比(PSNR)為64.2dB那麼,為什麼頻譜發生了巨大的變化,而在空域卻變化如此小呢?這是因為我們避開了影象的主要頻率。下圖是原圖頻譜豎過來的樣子,其能量主要集中在低頻。

阿里根據截圖查到洩露者,這樣的技術是如何做到的?

水印提取是水印疊加的逆過程,

阿里根據截圖查到洩露者,這樣的技術是如何做到的?

經提取後,我們得到如下水印,問:為什麼水印要對稱呢?嘿嘿,大家想想看。

阿里根據截圖查到洩露者,這樣的技術是如何做到的?

三、攻擊性實驗

本部分進行攻擊性實驗,來驗證通過頻域手段疊加數字盲水印的魯棒性。

1.進行塗抹攻擊,這是攻擊後的圖片:
阿里根據截圖查到洩露者,這樣的技術是如何做到的?

再進行水印提取:

阿里根據截圖查到洩露者,這樣的技術是如何做到的?

2.進行剪下攻擊,就是網上經常用的截圖擷取一部分的情況:

阿里根據截圖查到洩露者,這樣的技術是如何做到的?

進行迴圈補全:

阿里根據截圖查到洩露者,這樣的技術是如何做到的?

提取水印:

阿里根據截圖查到洩露者,這樣的技術是如何做到的?

3.伸縮攻擊(這個實驗明碼做的,水印能量較高,隱匿性不強):

阿里根據截圖查到洩露者,這樣的技術是如何做到的?

提取水印(水印加的不好,混頻挺嚴重的):

阿里根據截圖查到洩露者,這樣的技術是如何做到的?

4.旋轉攻擊(明碼):

阿里根據截圖查到洩露者,這樣的技術是如何做到的?

提取水印:

阿里根據截圖查到洩露者,這樣的技術是如何做到的?

5.JPEG壓縮後(這個實驗我好像是拿明碼做的,能量主要加在了高頻):

阿里根據截圖查到洩露者,這樣的技術是如何做到的?

提取結果:

阿里根據截圖查到洩露者,這樣的技術是如何做到的?

6.PS 4畫素馬賽克/均值濾波等,攻擊後影象(這是我女朋友嗎?醜死了):

阿里根據截圖查到洩露者,這樣的技術是如何做到的?

提取水印後影象:

阿里根據截圖查到洩露者,這樣的技術是如何做到的?

7.截圖,

截圖後我手動摳出要測試的影象區域,並且抽樣或者插值到原圖尺寸:

阿里根據截圖查到洩露者,這樣的技術是如何做到的?

測試結果:

阿里根據截圖查到洩露者,這樣的技術是如何做到的?

8. 亮度調節(明碼):

阿里根據截圖查到洩露者,這樣的技術是如何做到的?

水印提取:

阿里根據截圖查到洩露者,這樣的技術是如何做到的?

9.色相調節(明碼):

阿里根據截圖查到洩露者,這樣的技術是如何做到的?

水印提取:

阿里根據截圖查到洩露者,這樣的技術是如何做到的?

10.飽和度調節(明碼):

阿里根據截圖查到洩露者,這樣的技術是如何做到的?

水印:
阿里根據截圖查到洩露者,這樣的技術是如何做到的?

11.對比度(明碼):

阿里根據截圖查到洩露者,這樣的技術是如何做到的?

水印:

阿里根據截圖查到洩露者,這樣的技術是如何做到的?

12.評論區用waifu2x去噪後圖片:

阿里根據截圖查到洩露者,這樣的技術是如何做到的?

解水印:

阿里根據截圖查到洩露者,這樣的技術是如何做到的?

13.美圖秀秀,我對我女票一鍵美顏,美白,磨皮,加腮紅,加脣彩(有一種很羞恥的感覺,捂臉):

阿里根據截圖查到洩露者,這樣的技術是如何做到的?

提取水印:

阿里根據截圖查到洩露者,這樣的技術是如何做到的?

14.對於背景純色的圖其實也是無所謂的

阿里根據截圖查到洩露者,這樣的技術是如何做到的?

能量係數為10時加水印圖片:覺得太顯噪就把能量係數調低,不過水印的隱祕性和魯棒性是互斥的

阿里根據截圖查到洩露者,這樣的技術是如何做到的?

最終提取出的水印:

阿里根據截圖查到洩露者,這樣的技術是如何做到的?

15.我用將RGB>600的畫素設定成為(0,255,0)來模擬PS魔術手,

阿里根據截圖查到洩露者,這樣的技術是如何做到的?

提取水印為:

阿里根據截圖查到洩露者,這樣的技術是如何做到的?

16.屏攝,好吧,這個實驗我做哭了

屏攝圖:

阿里根據截圖查到洩露者,這樣的技術是如何做到的?

實驗結果:

阿里根據截圖查到洩露者,這樣的技術是如何做到的?

我把水印能量係數調整到2000都沒有用。

屏攝之後與原圖訊雜比為4dB左右,我用多抽樣濾波的方式試過,濾不掉屏攝引入的噪聲。屏攝不僅引入了椒鹽噪聲,乘性噪聲,還有有規律的雪花紋理(摩爾紋)。

四、總結

基於頻域的盲水印方法隱藏性強,魯棒性高,能夠抵禦大部分攻擊。但是,對於盲水印演算法,健壯性和隱匿性是互斥的

本文方法針對屏攝不行,我多次實驗沒有成功,哪位大神可以做一下或者討論討論。還有二值化不行,這是我想當然的,覺得肯定不行所以沒做實驗。其他的我試了試,用給出的方法調整一下能量係數都可以。我想大家最關心的是什麼最安全,不會被追蹤。

不涉及影象的都安全,比如拿筆記下來。涉及影象的屏攝最安全,截圖十分不安全。

=====彩蛋====
阿里根據截圖查到洩露者,這樣的技術是如何做到的?

我在上圖明碼寫入了資訊。為了抵抗jpg壓縮,我水印能量較高,並且因為沒有編碼,能量分佈不均。圖中規律性紋路,就是你懂的。嘿嘿,你懂的,解開看看吧。

@楊一丁 在答案中給出了上圖隱寫的內容,(霧)。

五、附錄

二、shotgun 的回答分享,254 頂

其實如果防禦做得好,想繞過還真的沒那麼容易。按照DLP,也就是資料防洩密的思路:

1.重要的圖片或者文件內加水印,檔案裡面再加上全息數字水印(這個大家都說得很全面了)

然而這就足夠了嗎?或者說只有這些防護?乃義務!

2.所有終端監控敏感操作:另存、截圖、剪貼簿、對敏感文件的操作等等,上述行為一律上傳到審計伺服器上備份待查。

3.禁止未授權(未安裝終端防護程式)的終端接入內網和業務系統。

4.有敏感操作或者跨終端登入的時候通過攝像頭拍攝人臉(知道為什麼祖克伯要貼攝像頭了吧)

5.定期對硬碟進行檔案掃描,關鍵字、相似度、OCR等方法識別出可能是敏感或者涉密的檔案,並提取特徵,進行標定。

6.同樣採用雜湊值、關鍵字、相似度匹配等方法檢查所有網路出口:郵件、聊天、網站、網盤等,對傳輸內容全部解碼進行審計並且記錄。

7.檢查或者關閉所有物理出口,USB、Wi-Fi、藍芽、音訊口(防止通過耳機口盜竊資料)。

8.所有檔案落地加密(檔案加密或者全盤加密),偷硬碟也沒用。

9.所有電子裝置進出辦公區域全部稽核檢查。

10.核心機密文件不落地,存放於核心伺服器,採用遠端終端或者虛擬視窗方式查閱/編輯。

別笑,富士康和華為基本上就是這麼幹的。

相關文章