LSB算法的基本原理是:对空域的LSB做替换,用来替换LSB的序列就是需要加入的水印信息、水印的数字摘要或者由水印生成的伪随机序列。由于水印信息嵌入的位置是LSB,为了满足水印的不可见性,允许嵌入的水印强度不可能太高。然而针对空域的各种处理,如游程编码前的预处理,会对不显著分量进行一定的压缩,所以LSB算法对这些操作很敏感。因此LSB算法最初是用于脆弱性水印的。
文献[1]提出了第1个水印模型,它把N×M大小的原始图像Z分解为n个8×8块Zi(1≤i≤n),把Zi的LSB部分置零,对各个块做数字摘要。同时把作为水印的logo图像A变换为N×M,进行同样的分块,数字摘要和Ai对应异或,得到嵌入水印的数字摘要。然后对它用私钥加密,结果嵌入到相应块的LSB部分。检验过程要用到A,并且用户得到的图像有任何的改变,水印都不可能检测出来。
由于联合摄影专家组(Joint Photographic Experts Group,JPEG)是一种常用的图像压缩算法,当把这种处理看成是合法时,文献[2]对LSB算法做了改进,提出了抵抗JPEG的半脆弱水印系统。该系统基于公钥密码系统和hash函数特点,能反映彩色图像在红色(R)、蓝色(B)、绿色(G)层的哪部分受到攻击。RGB图像在B部分对应的频率响应最低,所以把原始图像分为R、G、B三部分,对于R、G的LSB部分用一个公钥密码系统以外的密钥(简称k1)加密,再和原始水印W作XOR运算,得到的M用公钥密码系统加密,得到E。同时把B部分的LSB部分清零。最后,把E加入到B的LSB部分。