最近新浪又和人闹出了抄袭新闻(http://tech.sina.com.cn/i/2011-06-08/15345623475.shtml),姑且不说谁对谁错,其中一个关键的问题是,谁也没法证明自己说的东西。或者说,缺乏铁证。

这种情况下,贝壳想起photoshop的一个功能,水印。你可以向图片内加入水印,但是图片上本身看不出来。当图片被打印,再扫描后,也可以部分的(一定概率,具体看变形程度)获得水印信息。这是版权证明的利器,你做的图片上怎么会有别人的水印?同样,文字应当也可以加入水印功能。原理上说,这属于隐写术的范畴。图片而言,是替换细节的颜色等低维信息。文字的话,通常是修改同义词,标点,等等。我们假定一篇1000字的文章内,大约有100个标点和常用同义词。通过在标点和同义词里面二选一,大约能放置100bit的信息,合12字节。不考虑其他细节问题,这已经足够写一些水印信息了。

水印需要考虑的问题一,是需要考虑盗版者也使用水印检查程序。如果盗版者同样使用水印检查程序,那么水印就会被发现,并且移除——这就失去了使用水印的意义。因此,水印信息必须被重编码,并且需要使用密码才能解开。在未知密码的情况下,水印编码后的信息要接近白噪声。

水印需要考虑的问题二,是当有了一个编码后,找出密码的难度。这决定了证据的效用和盗用者的攻击成本。而对于任意一段编码,要找出能够生成另一段水印内容的密码的计算过程,其计算难度应当尽量接近NP问题。越难计算,盗用者越难决定其中是否带有水印。同时对水印“是否可以通过寻找密码来从文章中找出一段根本没有被预先植入的内容”的质疑就越小。

水印需要考虑的问题三,是需要考虑水印的信息被复制破坏的问题。尤其是当水印信息被重编码加密的情况下,一些简单的修改和段落移动就可以让水印信息失效。因此水印必须有一定的冗余能力,即水印的编码应当在段落移动和内容编辑后也可以一定程度的还原数据。

当一个算法满足以上三个条件后,就可以用来向文字内植入另一段文字。未知密码者无法检查出其中是否包含水印,简单的修改无法移除。拥有密码者可以通过公开密码,让所有人看到文章内的水印。这样就完成了抄袭验证的整个过程。当然,水印的用途还不止于此。这种技术同样可以被用来检查盗版。对某篇具体的小说段落,生成一个随机密码,一同存放在数据库中。在显示内容的时候,用密码加密用户名,加入到文章水印中。这样当盗版文被公开后,具体付钱复制出文字的用户名就可以被检出,然后处理。盗版者既无法检测水印,也无法移除。