隱藏在水印的祕密

七脈神劍發表於2021-07-02

最近今天在測試火山引擎的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 壓縮上。

三、結束語

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

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

相關文章