­

隱藏在水印的秘密

最近今天在測試火山引擎的ImageX處理的時候發現提供一種能力叫盲水印;

看盲水印介紹內容:

image.png

使用方法測試:

image.png

在放訪問某個url時候會自動添加上盲水印;添加完畢後,會重新提取圖片裡面的資訊;

我在其他公眾號上看到這麼一個文章,我猜測他們是一個原理,畢竟火山引擎屬於字節跳動的業務,但演算法是否一個就不知道了;

相關文章:

————————————————

一、前言

1.1、暗水印是什麼

廣義來說,暗水印可以理解為,在一些載體數據中添加隱藏標記,這些標記在人類和機器可輕易感知的範圍之外。相較於常見的明水印,比如圖片和影片中的公司logo、紙幣中的水印紋理等。暗水印對大部分感知系統來說是透明的,不可見的。下面通過兩個例子來說明。

1.1.1隱藏在白紙中的符號

比如下圖是中科院上海某化學所的隱寫耐火紙,可以看到在一張看似普通的白紙之中,卻隱藏了一個圖案和字母。這個圖案和字母就屬於暗水印。它可以用來隱秘傳輸資訊、做防偽標識等。

image.png

1.1.2隱藏在圖片中的二維碼

下面這個例子可能就比較少見了。它是 2020 ByteCTF(字節跳動網路安全攻防大賽) Misc 的一道隱寫題目。通過隱藏水印的方法,將一個有意思的二維碼嵌入到下面這幅彩圖中,而這個二維碼是肉眼不可見的。

加有暗水印的影像:

image.png

影像中的隱藏資訊:

image.png

1.2常見的暗水印技術

這個分類是基於傳輸載體進行分類的。一般來說暗水印可以隱藏在大部分多媒體傳輸和存儲載體中,比如圖片、影片、音頻、郵件、文檔等都是不錯的載體。

1.2.1影像水印

基於影像的暗水印技術是暗水印裡面最成熟的一種,嵌入方法也多種多樣。根據嵌入維度不同,又可以細分為空域水印和變換域水印。空域水印可以簡單的理解為直接對解碼後的影像像素值進行編輯和嵌入資訊;變換域水印是將影像的像素資訊轉換到變換域,然後在變換域添加資訊後再轉換到空域,這個過程中空域資訊也會被修改。所以變換域水印也可以理解為間接的空域水印。

1.2.1.1空域水印

直接選取空域特定位置的像素值進行修改來嵌入資訊。空間域水印的難點在於如何在空域選擇水印區域和在水印塊中如何嵌入數據。根據水印區域選取方式不同可分為下面幾種。

  • Least Significant Bits(LSB)水印

這個方法簡單粗暴,直接在影像的像素值上進行修改。假設水印載體為顏色深度8bit的RGB影像,水印資訊為二值化影像。

  1. 加水印過程

對原始影像的最後1bit(最低位)置零,將用二進位表示的版權資訊,賦值給原始影像的最後1bit,實現版權資訊寫入。(寫入後原始影像像素值改變幅度為1)

  1. 解水印過程

將影像的前7bits(高7位)置零,提起最後1bit(最低位),得到版權資訊。

  1. 演算法簡評

此演算法計算複雜度相對較低;對影像視覺效果影響很小;魯棒性較低,難以抵抗常見的水印攻擊手段。

1.2.1.2變換域水印

變換域水印最終也會修改空域的數據,與上面不同的是並不是直接修改像素值,而是將影像的空域數據轉換到變換域,然後按照一定方法寫入水印資訊,最後再將變換域數據轉換回空域的值並重新生成影像資訊。

常見的變換域水印用到的基礎演算法有 DCT、DFT、DWT,這三個演算法特點各不相同,可單獨使用也可以交叉使用。

  • 基於 DCT 的水印演算法

DCT 離散餘弦變換屬於一種特殊的 DFT 離散傅里葉變換,在暗水印領域有非常相似的使用手法。所以這裡僅對基於 DCT 變換的水印進行展開。下圖為對「蒲公英」灰度圖做 DFT 和 DCT 變換後的頻譜分布,可見峰值分布是不同的。

image.png

  1. 什麼是頻域變換

下圖可以通俗理解頻域變換的邏輯。左下角「時間域」(可以粗略理解為空域)的一維波形,可以由右上角 f1 f2 f3 f4…等多個規則波形疊加而成,而這些波形都對應一個固定頻率,那麼將他們投影到右下角的「頻率域」中,形成另一幅坐標圖。這個過程就可以簡單理解為傅里葉變換的過程。

image.png

那麼它在影像處理領域有何作用呢?

下面四幅圖分別是 原圖 >> DCT 變換後的頻域的灰度圖 >> 將頻域左上角數據清零 >> 再次轉換成空域的圖片。

image.png

可以看到轉換完成後的圖片丟失大量資訊,但是仍可看出部分毛髮的細節資訊。

  1. 如何用基於 DCT 來寫入隱藏水印

隱藏水印嵌入過程大概如下,框架相對簡單。在實際應用中會根據不同的場景選擇不同的分塊和不同的頻域區域,這些需要經過大量的實驗和理論的沉澱才可以做出選擇。

image.png

  1. 如何提取隱藏水印

提取過程與加水印過程有較多相似之處,不同之處在於之前是頻域寫,現在需調整為讀取頻域資訊並判斷。

image.png

  1. 演算法簡評

這個框架通用性比較強,在分塊和頻域位置選擇合理的情況下,可以抵抗一定程度裁剪、縮放和壓縮等常見的攻擊手段。

  • 基於 DWT 的水印演算法

純粹的僅適用 DWT 水印演算法相對較少,大部分情況是 DWT + DCT 、DWT + SVD 等類型的組合水印。為何要使用 DWT 呢,原因是它可以在一定程度上提高水印的魯棒性並且對圖片畫質影響較小。

  • 原理

這裡的 DWT 主要指的是小波分解。

image.png

可見經過 DWT 處理後,可以濾出圖片的輪廓資訊(右下角)和細節資訊(左上角)。

image.png

1.2.2文本水印

文本水印指的是在文本資訊中嵌入隱藏的水印資訊。這個主要是受手寫字體的啟發。每個人的寫字風格不同,字的筆畫形狀也不同。那麼通過在密級較高的文檔中引入讀者唯一的字體文件,那麼這篇文檔就相當於嵌入了這個人的標識資訊。修改字體的方式可以有多種多樣,下面僅是舉個例子。

用戶一的字體:

image.png

用戶二的字體:

image.png

在這個例子中「是」字是不同的,可以區分這個截圖來自於這兩個中的哪一個。

演算法簡評:

  • 文本字體相較於上面基於影像的水印有較強的魯棒性,但是有一個不足是文字水印受文字個數的影響較大。當文字較少時可能不足以標識一個人完整的身份資訊。

  • 文字水印也多種多樣,比如可以通過調整文字間距、文檔格式來嵌入資訊。

1.2.3音頻水印

音頻的隱藏水印,是指在耳朵可感知的頻率之外的音頻資訊中嵌入水印資訊,這樣既可以對音頻產生較小的干擾,又可以將水印資訊嵌入當中。

基於耳朵的這個特性,結合前面影像水印用到的演算法就可以設計出適合音頻的水印演算法。

  • 音頻 LSB 水印

與影片 LSB 水印相似,只不過這裡對象換成了音頻。對音頻訊號進行取樣,將不敏感的取樣值進行二進位位代替,以達到在音頻訊號中嵌入水印數據的目的。

  • 擴頻隱寫

擴頻隱寫是將秘密資訊經過偽隨機序列調製後, 選擇合適的嵌入強度疊加到載體音頻的整個頻譜係數上的技術。傳統的變換域包括了 FFT,DCT, DWT ,隨著技術的發展,近年來也提出了基於MDCT 和 MCLT 變換域的擴頻隱寫方法。

  • 基於回聲的水印演算法

回聲(Echo Hiding)演算法,是一個經典演算法。核心思路是通過引入回聲來將水印數據寫入到載體數據中,利用HAS的滯後掩蔽特性,即弱訊號在強訊號消失之後變得難以感知,它可以在強訊號消失 50-200ms 內不被人耳覺察。

1.2.4基於深度學習的水印技術

在傳統水印方法中,通常利用一些變換將水印資訊嵌入到隱藏空間,並使用手工設計的特徵嵌入水印保證水印的魯棒性。隨著深度學習技術的快速發展,人們開始嘗試利用神經網路來嵌入水印,並利用對抗學習來提升水印的魯棒性,以獲得魯棒的水印編碼器和解碼器。

  • 深度學習圖片水印

主要由三部分組成,預處理網路(P)、編碼器(H)和解碼器(R)。首先將秘密資訊S輸入到P中,得到秘密資訊特徵圖,然後將特徵圖與載體影像C進行拼接後輸入到H中,最終生成嵌入資訊後的影像C』。解碼時,利用R恢復出C』中嵌入的資訊S』。

右圖中的框架和左圖類似,差別在於S不需要進行預處理。若秘密資訊為二進位字元串,通常將其重複多次以達到和C相同的大小,或將其reshape成C的形狀後再upscale到C的大小,然後將其與C拼接輸入到H中完成資訊嵌入。

image.png

  • 深度學習字體水印

在 FontCode一文中,作者根據水印資訊對英文字元的幾何特徵進行一些微小的擾動生成水印字元。在嵌入端,字元擾動的方法是基於字元結構實現的,而提取端是通過對擾動模式的識別進行水印資訊恢復。

字元擾動模型包括字元匹配、流形生成和字體生成三個部分。利用現有字體的多樣性,該模型將所有中的每個字元單獨進行輪廓匹配,而後根據這些高維輪廓特徵生成低維流形。字型流形是一種利用高斯過程潛在變數生成模型構成低維空間的映射,同時也能通過對低維空間的修改映射回高維特徵,進而推斷和獲得新的字體。

image.png

利用 CNN 來識別文字屬於哪個編碼:

image.png

二、應用場景簡介

暗水印隱藏在素材之中,不可輕易被感知,不影響素材的正常使用,這就使得它有很多的應用場景。

2.1版權影片搬運侵權取證

這是暗水印應用最廣泛的場景,過程也相對簡單。通過在有版權保護需求的音頻、影片和圖片等隱寫入作者或者廠商的唯一標識。那麼在後續版權糾紛時,再對可疑影片提取水印,如果提取成功,就會增加一條砝碼。整體過程比較簡單,這裡就不再贅述。

此應用場景所依賴的演算法能力根據具體場景不同而不同:

  1. 如果僅是簡單的爬取搬運,那麼水印可以抵抗轉碼攻擊即可。
  2. 如果搬運後對素材進行二次深度編輯,那就需要水印可以抵抗縮放、裁剪、壓縮等攻擊了。
  3. 還有一個難點是,最後維權時,可能會需要讓暗水印得到法務的認可。

2.2泄露溯源

如今經常發生某廠內部數據截圖外泄的事件,在這種情況下如何快速定位泄漏者身份是個難點。暗水印就可以在一定程度上解決這個問題。

廠商可以對敏感頁面或者文檔加入暗水印,加水印的時機就發生在用戶瀏覽這個頁面時,寫入的內容就是用戶的個人資訊。如果用戶對這些頁面進行截圖或者下載之後進行惡意傳播,那麼寫有他個人身份資訊的暗水印也會跟隨這些數據一起傳播。這就使得在發生泄漏case之後,通過暗水印就可以快速定位泄漏者是誰。從而起到泄漏溯源,間接起到保護數據外泄的作用。

由於泄露的場景複雜,截圖、文檔之類的數據傳播鏈條多樣,單一維度的暗水印很難經受住整個傳播過程,很有可能在傳播過程中水印資訊丟失,導致最後取證失敗。所以需要設計多層暗水印策略,確保在不影響視覺效果的前提下提高水印的魯棒性。

2.3素材內容侵權審核

這可以理解為版權保護的一個分支。只不過這裡是平台用來保護用戶的原創影片,防止被平台內其他用戶竊取。比較常見的場景是影片審核平台。暗水印就可以用來保護作者原創影片,防止在平台內竊取並二次上傳。

這個場景對暗水印綜合能力要求較高:

  1. 較高的魯棒性。可抵抗影片壓縮、縮放、幀內裁剪、幀間裁剪等攻擊。
  2. 時延很低的加水印演算法。因為加水印過程需要在用戶上傳影片時實時添加。
  3. 較快的提水印演算法。因為影片審核最終需要人工參與來確定是否真正侵權,而由於審核同學時間有限,所以提取演算法必須在十幾秒內完成對整個影片的驗證和提取過程。
  4. 視覺效果和各種影片指標要求嚴苛。加完水印後的影片必須不能使影片用戶價值負向,這就涉及到暗水印對視覺效果、碼率等指標的要求了。

2.4防篡改

隨著金融資訊化的進步和網路與電子商務的發展,電子支付手段越來越被金融業所重視,已成為一種重要的支付手段之一。而電子支付票據截圖在傳播過程中存在較高的被篡改的風險。在這個過程中如果引入脆弱水印系統,並在用戶生成電子支付票據時進行添加。票據接收者在收到票據時,對這個票據中的暗水印進行完整性檢查,那麼就可以確認此票據是否曾經被修改。

這種水印有以下幾個特點:

  1. 相對比較脆弱,被修改後會提示水印識別錯誤。但也不能脆弱到經不起常見社交軟體的傳播。
  2. 錯誤坐標識別。可識別出是哪塊區域中的數據(水印)被修改。

2.5鏈路追蹤

在一些影片傳播的業務場景中,可能會需要跟蹤影片傳播流程,但一些外部平台無法提供追蹤服務。因此,需要一些其他手段去追蹤數據的去向,暗水印是一個非常理想的手段。在投放影片前,將暗水印加入素材,當素材播放或使用時,根據水印資訊對當前節點進行標記,那麼就可根據暗水印進行數據鏈路追蹤。

在鏈路追蹤上使用暗水印需要有以下特點:對魯邦性要求一般,主要集中在抗 crf 壓縮上。

三、結束語

暗水印歷史比較悠久。由於近幾年短影片的流行以及人們對版權意識的提升,暗水印再次迎來了新的春天。在新的社會背景下,非常期待暗水印在版權保護、數據防護等方面發揮越來越重要的價值。

文章為原創文章,若有侵權請聯繫;