LSB算法的基本原理是:對空域的LSB做替換,用來替換LSB的序列就是需要加入的水印信息、水印的數(shù)字摘要或者由水印生成的偽隨機(jī)序列。由于水印信息嵌入的位置是LSB,為了滿足水印的不可見性,允許嵌入的水印強度不可能太高。然而針對空域的各種處理,如游程編碼前的預(yù)處理,會對不顯著分量進(jìn)行一定的壓縮,所以LSB算法對這些操作很敏感。因此LSB算法最初是用于脆弱性水印的。
文獻(xiàn)[1]提出了第1個水印模型,它把N×M大小的原始圖像Z分解為n個8×8塊Zi(1≤i≤n),把Zi的LSB部分置零,對各個塊做數(shù)字摘要。同時把作為水印的logo圖像A變換為N×M,進(jìn)行同樣的分塊,數(shù)字摘要和Ai對應(yīng)異或,得到嵌入水印的數(shù)字摘要。然后對它用私鑰加密,結(jié)果嵌入到相應(yīng)塊的LSB部分。檢驗過程要用到A,并且用戶得到的圖像有任何的改變,水印都不可能檢測出來。
由于聯(lián)合攝影專家組(Joint Photographic Experts Group,JPEG)是一種常用的圖像壓縮算法,當(dāng)把這種處理看成是合法時,文獻(xiàn)[2]對LSB算法做了改進(jìn),提出了抵抗JPEG的半脆弱水印系統(tǒng)。該系統(tǒng)基于公鑰密碼系統(tǒng)和hash函數(shù)特點,能反映彩色圖像在紅色(R)、藍(lán)色(B)、綠色(G)層的哪部分受到攻擊。RGB圖像在B部分對應(yīng)的頻率響應(yīng)最低,所以把原始圖像分為R、G、B三部分,對于R、G的LSB部分用一個公鑰密碼系統(tǒng)以外的密鑰(簡稱k1)加密,再和原始水印W作XOR運算,得到的M用公鑰密碼系統(tǒng)加密,得到E。同時把B部分的LSB部分清零。最后,把E加入到B的LSB部分。