【密码学】一文读懂隐写术(Steganography)
首先,来看下面段文字。
图中的内容节选自印度文学家拉宾德拉纳特·泰戈尔的诗歌,生如夏花(Let Life Be Beautiful like Summer Flowers)[1],当然,诗歌的内容不在本文的讨论范围之内,感兴趣的读者,可以自行去看一看。
乍一看,这确实是一首诗歌,实际上,这确实是一首诗歌,读者不禁发问了,你这不是废话吗,听君一席话,如听一席话,不要急,仔细来看。
你会发现,这些文字的基线不是对齐的,如果我们把起伏的文字,映射为0和1,那么我们可以得到。
01010011010101000100010101000111010000010100111001001111010001110101001001000001010100000100100001011001
这里,我们利用ASCII码来解码一下,就会得到。
也就是,本篇文章的主题,「隐写术」(信息隐藏技术)。
定义
「隐写术」是一门关于信息隐藏的技巧与科学,所谓信息隐藏指的是不让除预期的接收者之外的任何人知晓信息的传递事件或者信息的内容。隐写术的英文叫做Steganography,来源于特里特米乌斯的一本讲述密码学与隐写术的著作Steganographia,该书书名源于希腊语,意为“隐秘书写”[2]。简单来说,就是信息隐藏的技术,我们把一个信息隐藏到另一个信息的载体之中。
案例
其实,这个,我们应该并不陌生,从广义来讲,自古至今,我们应该见到过非常多的例子,古希腊历史学家希罗多德,在其著作中讲了这么一个故事[3],希斯塔亚乌斯剃光了他的一个信使的头发,将信息写在其头皮上,再等信使的头发重新长起来,然后将这个人派出去送“信”,这应该算是出现最早的隐写术了。当然,还有一些其他的技术,比如使用书记板的腊封隐藏信息,理由微缩照相的方式吧胶卷放到某个杂志的某个字上,使用隐形墨水书写,等等,有关于基于物理、化学的方法来实现消息的隐写,对于这些,有兴趣的读者,可以自行查询相关资料,这里不展开来讲解了。
其实,还有一种另一类形式的隐写,比如通过不同的角度来看某个艺术作品,比如绘画作品,或者雕塑作品,可以看到不同的景象,比如下面这张图[4]
大家,看到的是一个杯子,还是两个妹子呢,读者可以自行探索。大自然,其实也会隐写术,比如苏轼的题西林壁一诗中写到
❝
横看成岭侧成峰,远近高低各不同。—苏轼【宋】 题西林壁
❞
这何尝不是大自然带给我们天然的隐写术呢?
对于,文学作品,我们也可以实现隐写的目的,比如在水浒传里面,智多星巧妙的藏头诗[5],
❝
「芦」花丛里一扁舟,「俊」杰俄从此地游。「义」士若能知此理,「反」躬逃难可无忧。
❞
里面,就暗藏一些信息。当然,还有很多有关于隐写的例子,介于篇幅有限,这里不再过多的举例了。
和密码学的关系
这里,我们反复的提到了信息,其实上面这些例子,在密码学当中,也经常见到,密码学,我们的一个作用,也是来保护我们的信息,那么,它和本文讲的隐写术直接,有什么联系呢?
他们的共同目标,都是来保护信息的安全性和隐私性,防止未授权的攻击者获取敏感内容。接下来,我们来看一下他们的区别,当然,这些区别也不是绝对的,仅供参考。
|
|
|
---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
由此来看,我个人理解,也可以把隐写术划分到广义的密码学之中,只不过是另一种形式的呈现,之前我们讲解过的视觉密码[6],也可以看做是一种信息的隐藏技术。
和密码学一样,虽然,古典密码已经出现的非常早了,但是现代密码学的开端,其实还是密码学的新方向一文[7],对于现代隐写术的开端,应该是1992年,正式提出对于信息隐藏技术的研究,到1996年,第一节信息隐藏研讨会(IHW)。
基于图片的信息隐藏技术
我们来看一个经典的例子,这里,读者就不要下载图片来尝试了,因为,上传图片之后会被压缩,导致信息的丢失,这就牵扯到另外一个问题了,我们稍后再聊。
这里,我们回忆一下,我们是如何来表示图片的,我们知道,图片实际上是由一个一个的像素点组成,为了简单起见,这里,我们采用灰度的图像,也就是图片当中只有黑白灰三种颜色,我们可以用一个字节来表示,范围是0~255
,注意到一个事实,人眼的分辨率是有限的,因此,没有办法区分细小的差异。
上面这两个,只差了1,通过肉眼,我们是很难进行分辨的,因此,我们有了利用这一点,来隐藏信息的方法。
在回过头来,看上面的这一张图,我们来标记一下,具体的像素的值,这里,我们用16进制来表示。
这里,我们可以把最低位的信息,提取出来,然后,我们便可以得到一张新的图片。
这里,就是大名顶顶的LSB隐写。当然,这个方式,不仅仅能够应用在图片当中,对于音频,我们也能这么干,人耳对于声音也不是那么敏感的,这里就不给大家搞一个例子了,有兴趣的读者,可以自行尝试。
局限性
这里,似乎,我们已经可以正常的隐藏信息了,但是,实际上,这种方式如果公开,那么隐藏的内容也就随之公开了,对于密码学而言,这个是一个不太好的现象,那么我们有没有办法来避免这一点呢,有的,兄弟,有的,我们可以利用伪随机数生成算法,来确定我们修改的位置,这样在不泄漏种子的前提下,分析者就没有办法还原具体的信息了。
这里,只是解决了,信息的可还原性,但是,实际上,判断一个图片或者说一个信息的载体,有没有被隐写数据,也是一个值得研究的内容,这里,就不得不搬出来,密码学家和统计学家,都比较喜欢的东西了,也就是,概率和统计规律。
我们知道,无论是汉字,还是英文,或者说我们所用的所有的信息,他都不是完全随机的,比如英文字母出现的概率,就服从某个统计规律。
但是,对于图片的最低像素,其实他是一个随机的,他和感光原件有着密切的关系,因此,在嵌入足够多的信息之后,我们便可以通过,统计学的规律来分析出来,里面是否暗藏玄机。当然,这个成立的前提是嵌入的信息足够多,否则就好比,大海当中融入一滴水,就很难被发现了。
其他的隐写技术
当然,对于图片还有一些其他的隐写的方式,比如基于频域的F5隐写[9],或者基于调色板的调色板隐写等等。
隐写技术的其他应用
数字版权,大家应该都不陌生,对于数字媒体,有如下几个特定
-
极易无失真的复制和传播 -
容易修改 -
容易发表
因此,数字版权保护,对于技术和法律层面会有一些难题,
-
如何鉴别一个数字作品的作者 -
如何确定数字版权作者的版权和声明 -
如何公证这个声明
等等,目前一般存在两个手段来在技术上进行标记,分别是数字水印和数字指纹,这两者都利用数字产品可以添加冗余信息来实现版权保护盒追踪盗版者的目的,因此,对于这个技术,一般我们会有如下几个要求
-
版权所有者可以进行嵌入,并且可以宣称自己有所有权,而其他人无法宣称 -
具有不可察觉性,稳健性,唯一性的要求 -
可以抵抗一些对于数字媒体的处理和恶意攻击(比如,截图,压缩,变形,裁剪等等)
那这里,就可以利用隐写技术来实现这一点,比如盲水印技术,等等。
总结
最后,我们来总结一下,本文我们主要聊了一下有关于隐写术的相关知识,当然,这里没有聊过多具体的细节,对于隐写术,不仅仅可以用于信息的隐藏,个人看法,更多的应用还是在于数字版权保护之上,有关于其他的隐写技术的实现方式,有机会我们再来聊,感觉,咋又给自己挖了个大坑,溜了溜了,好了,快乐的时光过得特别快,又到了说再见的时候了,咱们下次再见~~
参考资料
-
https://baike.baidu.com/item/%E7%94%9F%E5%A6%82%E5%A4%8F%E8%8A%B1/7123858 -
https://zh.wikipedia.org/zh-cn/%E9%9A%90%E5%86%99%E6%9C%AF -
https://www.sca.gov.cn/sca/zxfw/2017-04/25/content_1011716.shtml -
https://www.thepaper.cn/newsDetail_forward_15182875 -
https://baike.baidu.com/item/%E8%8A%A6%E8%8A%B1%E4%B8%9B%E9%87%8C%E4%B8%80%E6%89%81%E8%88%9F/6650419 -
https://mp.weixin.qq.com/s/hnoi8XAbWYn1vNlMSmtLeA -
https://www-ee.stanford.edu/~hellman/publications/24.pdf -
https://zh.wikipedia.org/zh-cn/%E5%AD%97%E6%AF%8D%E9%A2%91%E7%8E%87 -
https://link.springer.com/chapter/10.1007/3-540-45496-9_21
原文始发于微信公众号(Coder小Q):【密码学】一文读懂隐写术(Steganography)
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论