神奇的隱形水印

今天來聊聊隱形水印這個神奇的東西。

浮水印 watermark 大家應該都聽過,為了防盜圖什麼的很常看到這個,而隱形水印就是「看不見的浮水印」,invisible watermark,明明加了浮水印在圖片上但肉眼看不到。

大家要知道肉眼能辨識出來的東西是有限的,例如說許多圖片的壓縮可以從 2MB 壓到 200KB,大小變成 10% 但是肉眼看到的幾乎一樣。而隱形水印也是在肉眼看起來幾乎相同的前提下,把一些資訊塞到圖片中,你人看是絕對看不出來有這東西的。

隱形水印的應用最常見的有幾個,第一個是追蹤外洩資料的來源,例如說漫畫 APP 想知道盜版網站的圖片是從誰流出去的,就能根據隱形水印找到 user id,第二個是 AI 標記,例如說從 Google 那邊產生的 AI 圖片都會用一個叫做 SynthID 的技術加上隱形水印,你把圖片丟給 Gemini 問他是不是 AI 產生的,他就會檢查。

厲害的隱形水印必須要對抗許多東西,例如說防壓縮,你壓縮完之後隱形水印還在。也要防 resize,你圖片換了個尺寸或是裁切過後也還在。當然,並不是說水印永遠不會消失,還是有可能不見的,但至少保證正常使用下,水印都會在。

除了圖片,影片也可以加隱形水印。

Meta 去年就發了一篇文《Video Invisible Watermarking at Scale》,講他們是怎麼做的,而主要的應用情境是在「誰第一個發這個影片」,這個應用滿不錯的,可以防止那種二次轉發想賺流量的,你把別人影片偷過來重發,就算剪輯了,還是能辨識出原始的上傳者是誰。

雖然圖片跟影片都行,但文字呢?文字要怎麼藏東西在裡面?

有種做法是用零寬字元,藏幾個看不見的字元在裡面,但問題是如果文字流出的方式是截圖就看不出來。也可以些微更改標點、排版或是同義字等等,來對抗這種截圖流出的方式,但這個就是肉眼可見了,你拿發給不同人的內容來看就會看到差異,不過這也沒辦法。

而針對 LLM 所產生的文字,Google 的 SynthID 技術也有 cover 到(真的好強,趕快多買一點 GGLL,我都直接兩倍槓桿),LLM 的原理就是不斷去預測下一個 token 是什麼嘛,然後每一次都會有多個候選,例如說「我喜歡吃」後面可能接「鳳梨」、「牛肉麵」、「章魚燒」等等,而 SynthID 就是在這個階段介入,用你想藏的文字算出一個 random seed,再搭配這個隨機亂數,讓每次的選擇都偏移一點,在文字越長的狀況下,統計來看就會越明顯。

簡單來講,就是讓 LLM 在選擇文字時會有特定偏好,但這個偏好小到你人類幾乎看不出來。跟「不是…而是…」這種被講到爛的 pattern 不一樣。

這個做法真的滿有趣的,可以做到人看不出來但是又根據 LLM 的特性塞了額外資訊在裡面。

評論