信息隐写--1998年出版高被引论文--exploring steganography: seeing the unseen

基础知识

隐写的基本知识

信息隐写是一种古老的技术,因为数字技术的发展,隐写技术可以在多个领域使用隐藏信息,比如隐藏数字图像的信息。

Steganography源于古希腊,字面意思是covered writing隐藏的文字,也就是将信息隐藏的通信方式,传统的隐写技术通信方式包括隐写墨水、微粒(microdots)、字符排列、数字签名、隐蔽通道、扩频通道等。

隐写和加密是间谍行业的近亲——加密打乱了信息,使得难以理解原本的内容;隐写技术隐藏了信息,所以看不到原本的信息。但是密文很容易被人看出来信息被加密了,而隐写技术可以把信息隐藏,从而使得其他人轻易不会认为信息被加密了。

图像文件

对计算机而言,图像是一个数组,其中包含多个数值表示多个点(像素)的光强度(light intensity),这些数据构成了图像的栅格数据(raster data栅格数据,也就是把空间按照一定的规则划分成有规律的网格,对每个网格赋予一定的属性)。常见的图像大小一般为 640 × 480 640\times480 640×480,因为每个像素包含8bit,所以包含256种颜色。这样的图像大约 300 K B 300KB 300KB大小(原文说包含300 kilobits???是我有问题还是他写错了)。

数字图像一般使用24bit或8bit存储(这里应该是只图像深度为24bit和8bit,前面说了8bit可以表示 2 8 = 256 2^8=256 28=256种颜色,而图像深度为24bit的图像可以表示 2 24 = 16777216 2^{24}=16777216 224=16777216,可以通过图像深度和图像的尺寸计算图像的大小: 图 像 宽 度 ∗ 图 像 高 度 ∗ 图 像 深 度 = 图 像 文 件 大 小 图像宽度*图像高度*图像深度=图像文件大小 =)。24bit图像可以提供更多的空间来存储隐藏信息,但是空间可能过于大了(JPEG图像除外)。像素的所有颜色变化都来自三原色:红、绿、蓝。每个原色用1个Byte表示;24bit图像每个像素使用3Byte来表示颜色。这3个Byte可以表示为十六进制、十进制和二进制值。在许多Web页面中,背景颜色由一个六位数的十六进制数字表示——实际上是三对代表红、绿、蓝。白色背景的值为FFFFFF: 100%红色(FF), 100%绿色(FF)和100%蓝色(FF)。它的十进制值是255,255,255,二进制值是11111111,11111111,11111111,这是组成白色的三个Byte。

这种白色背景的颜色表示方法可以推广到图像中单个像素的颜色表示。像素的表示将会影响图像文件的大小——假设有一个 1024 × 768 1024\times768 1024×768的24bit图像,这样一个图像大约包含2百万以上个字节(原文说has more than two million pixels包含200万以上像素???),大小为2.25MB。因为这样的24位图像在互联网上仍然相对少见(注意,这是1998年的论文),它们的大小会在传输过程中引起注意。因此,如果不需要传输这样的文件,文件压缩将是有益的。

文件压缩

压缩分为两种:无损压缩和有损压缩。两种方法都可以节省存储空间,但节省的效果不同,在信息未被压缩之前会影响隐藏信息。

无损压缩让我们可以准确的重建原始信息,因此在需要保持原始信息的完整性时,该压缩方法比较好,图像的无损压缩比较典型的就是GIF格式、8bitBMP格式的保持。

有损压缩可以节省存储空间,但是不能保证原始图像的完整性,比较典型的方法有:JPEG格式。因为是有损压缩,JPEG只能提供近似高质量的数字图像而不是绝对准确的图像。

嵌入数据

嵌入的数据也就是被隐藏在另一个文件的数据,因此需要两个文件。

第一个文件是一个看上去没有什么特别的图像,用于隐藏信息,被称为cover image。

第二个文件是需要被隐藏的信息。这个文件可能是明文、密文、其他图像或任何可以被嵌入比特流的东西。

进行合并时,cover image和嵌入信息会形成一个隐写图像;隐写密钥也可以被用来隐藏信息,随后可以对信息进行解码。

大部分的隐写图像软件不支持使用JPEG图像,但是可以支持无损的图像深度为24bit的图像,如BMP,一些类似8bit彩色图像或灰度图像也被支持。网上比较常见的是GIF图像。

在8bit的彩色图像中,如GIF图像,每个像素都是一个单独的Byte,每个像素都是256色中的一个,像素的值在0-255之间。

一般情况下推荐在灰度图像中嵌入隐写信息,因为灰度值之间的变化比较平缓,越是平缓,信息隐藏效果越好。

在这里插入图片描述

灰度图像或许会得到较好的信息隐写效果,但是具有细微颜色变化的图像同样可以得到比较好的信息隐写效果(比如下图,因为它的颜色很‘杂’,一旦在其中嵌入信息,会造成一定的噪点,但是因为原图颜色很杂,所以很难被发现;可以想象,如果一个纯黑的图像被嵌入信息,会造成部分噪点,那么和原纯黑图像相比就很明显,一看就有问题)。

在这里插入图片描述

当考虑一个图像是否可以被用来隐藏信息,你必须先考虑图像的色彩变化。很明显,如果一个图像中含有色彩相同的大面积区域,这就是一个不好的选择,因为一旦在其中嵌入隐藏信息,会很明显,很容易被识别出来,这违背了隐写的根本目的——尽可能的让他人察觉不到当前图像有问题(如果很容易被看出来,还不如直接进行加密)。

在数字图像中隐写信息

信息可以通过多种不同的方式隐藏在图像中。为了隐藏信息,信息的直接嵌入可以编码为对图像的每个bit进行信息嵌入,或是选择在一些看起来像噪声的区域进行信息嵌入,这样的话因信息嵌入而产生的噪点不会那么引人注意。

信息也可以随机地散布在图像各处。比如使用冗余图像编码(redundant pattern encode)、扩频技术(spread spectrum technology)可以在cover image上散布隐藏信息。

现在有很多方法可以在数字图像中隐藏信息,主要包括:

  1. 最低有效位插值LSB;
  2. 遮蔽和滤波mask and filter;
  3. 算法和转化algorithm and transformations;

上述的方法对不同格式的图像得到的效果也不同。

least significance bit inserting最低有效位(LSB)插值

最低有效位插值是最常见、最简单的信息嵌入方法,但是嵌入后的图像非常脆弱,即便只是进行简单的图像变化就会出问题。把无损压缩图像转换为有损压缩图像(如从GIF、BMP等转化为JPEG),其中的隐藏信息可以保持完整性,但是反过来的话,存储在最低有效位的隐藏信息会被损坏。

在图像深度为24bit的图像中嵌入隐藏信息

在一个图像深度为24bit的图像中嵌入信息的话,每个像素可以存入3bit 的信息,对于一个1024×768的图像深度为24bit图像,大约可以存储2359296bits(294912Bytes)的隐藏信息,如果在嵌入之前对隐藏信息进行压缩,那么可隐藏的信息可能更多。而对于人眼观察,嵌入前后的图像看起来完全一样。

比如把A嵌入图像深度为24bit的图像中,因为A的Ascii编码的二进制表示为0100 0001,共需要8Byte的空间进行存储,所以使用3个像素的空间来存储。假设3个像素的栅格数据为:

( 00100111 11101001 11001000 ) ( 00100111 11001000 11101001 ) ( 11001000 00100111 11101001 ) \begin{aligned}(&00100111& &11101001& 11001000&) \\ (&00100111& &11001000& 11101001&) \\ (&11001000& &00100111& 11101001&)\end{aligned} (((001001110010011111001000111010011100100000100111110010001110100111101001)))

嵌入结果为:

( 0010011 0 ‾ 1110100 1 ‾ 1100100 0 ‾ ) ( 0010011 0 ‾ 1100100 0 ‾ 1110100 0 ‾ ) ( 1100100 0 ‾ 0010011 1 ‾ 11101001 ) \begin{aligned}(&0010011\underline{0}& &1110100\underline{1}& 1100100\underline{0}&) \\ (&0010011\underline{0}& &1100100\underline{0}& 1110100\underline{0}&) \\ (&1100100\underline{0}& &0010011\underline{1}& 11101001&)\end{aligned} (((001001100010011011001000111010011100100000100111110010001110100011101001)))

划线部分为隐藏信息的存储位置。LSB在一般情况下可以在最低有效位和次最低有效位存储隐藏信息,这样的话人眼也是很难分辨出来的。

在图像深度为8bit的图像中嵌入隐藏信息

因为颜色数量的限制,导致图像深度为8bit的图像对LSB方法的适用性不太好。隐写软件的开发者设计了一些算法可以使隐藏信息更好的存储在图像深度为8bit的图像内——cover image必须要严格选择,这样的话可以使嵌入信息后不会那么明显,被人轻易看穿图像内嵌入了信息。

根据前面的介绍,我们已经了解到,LSB方法是在最低有效位存储隐藏信息,所以原图像的bit信息也有可能随之发生改变,指向的颜色信息随之发生变化。比如一个图像只包含红(00)、黄(01)、蓝(10)、绿(11)四种颜色,对于的向量栅格数据为

( 00 01 ) ( 10 11 ) \begin{aligned}(&00 &01)\\ (&10 & 11) \end{aligned} ((001001)11)对应 ( 红 黄 ) ( 蓝 绿 ) \begin{aligned}(&红 &黄)\\ (&蓝 &绿) \end{aligned} (()绿)

嵌入隐藏数据1010后,栅格数据变为 ( 01 00 ) ( 11 10 ) \begin{aligned}(&01 &00)\\ (&11 & 10) \end{aligned} ((011100)10)对应 ( 黄 红 ) ( 绿 蓝 ) \begin{aligned}(&黄 &红)\\ (&绿 &蓝) \end{aligned} ((绿))变化非常显眼,这就是为什么在8bit图像深度为8bit的图像息比较困难的关键点——易产生剧烈的颜色变化。

选择图像时还需要注意一点,要选择颜色变化平缓的图像,如上面的灰度值色卡,这样的话即便颜色发生了改变也不会显得特别突兀和明显。

实现LSB的几种方法

隐写软件可以使得包含隐藏信息的文件不那么明显。

  1. 如在插值前改变色彩的排列以减少相似颜色的聚集在一起,避免插值前后的图像对比过于明显。这种方式在灰度图像的隐写效果比较好,在一些彩色图像的隐写效果也比较好。

  2. 对于类似24bit的图像,当最低有效位发生改变后可能会生成新的颜色(同样的改变在图像深度为8bit的图像上可能不会发生,因为颜色种类的限制),为了避免出现这种情况,可以减少颜色的数量来保证在LSB发生改变后不会出现剧烈的颜色变化;

    简单来说,就是把一个图像深度为24bit的图像看作一个图像深度为8bit的图像处理,可以在24bit产生颜色变化的LSB插值在图像深度为8bit的图像未必会产生变化,因此减少了插值前后的图像视觉差异。

    举个例子(这一段看的比较迷,按照自己的理解写了一下,后期学习过程中发现有问题再来修改):

    因为图像深度为24bit的图像的每个像素的存储空间是3Byte,每个像素可能是 2 24 = 16777216 2^{24}=16777216 224=16777216种颜色之一,在原本的LSB方法中,如果存储一个000-111的隐藏信息,三个Byte的信息都会发生变化,因此颜色可能发生变化,此时把每个像素的颜色范围看作 2 8 = 256 2^{8}=256 28=256种,因为颜色的数量少了,即便三个字节的信息发生变化,颜色变化的概率也减少了(原本3Byte的信息决定16777216种颜色,现在只决定256种颜色,即便发生细微的改变,颜色发生变化的概率自然减少了),因此插值前后的视觉差异相应减少。

mask and filter 印记和滤波

印记和滤波通常在图像深度为24bit的图像和灰度图上使用,像水印一样在图像上嵌入隐藏信息。因为水印技术可以很好的融合到图像中,所以不用担心有损压缩会对水印信息造成破坏。

可见的水印在定义上并不是一种隐写方法,区别主要是使用的意图不同:

  1. 传统的隐写方法的目的是隐藏信息;
  2. 水印是用来展示信息的,并成为源图像的一部分。

数字水印主要包括版权、作者、许可等。

隐写技术的主体是隐藏信息,cover image并不重要;水印技术的主体是cover image,水印信息没有那么重要。

在这里插入图片描述

为了显示上图中的印记,刻意把亮度提升了15%,如果仅仅提升少量亮度,肉眼是无法发现印记信息的,所以可以使用印记来隐藏明文或编码信息。

印记技术的优点:使用mask技术比LSB的鲁棒性更强,面对裁剪、压缩等图像变换操作。并且mask技术会把隐藏信息嵌入到比较重要的区域,所以隐藏信息对于covee image至关重要,而不仅仅是“噪音”,所以处理JPEG等有损压缩时比LSB更合适。

算法和转换

虽然LSB方法可以简单快捷的进行隐藏信息的嵌入,但是因为其在图像发生压缩或简单的变换后会非常的脆弱,隐藏的信息也会受损,所以不适合处理JPEG等有损压缩的格式。

但是JPEG等格式的优点就是可以把一些高质量的彩色图像进行压缩,在尽可能维持其观感的同时以大幅减少其大小,便于其在网络上的传播,所以JPEG等格式的图像开始在网络上盛行,导致LSB方法逐渐变得不再适用。

Jpeg-Jpeg工具根据隐藏信息的输出创建了一个无损的cover image和一个JPEG隐写图像。根据独立的JPEG Group,这个JPEG软件已被修改为JFIF输出文件的1bit隐写,该文件由有损和无损两部分构成。该软件利用JPEG算法结合隐藏信息和cover image,最终输出一个有损的JPEG隐写图像。

JPEG通过使用DCT(discrete cosine transform离散余弦变换)来实现压缩。DCT是一种有损压缩变换,因为余弦值无法实现完全精确,并且受限于最终结果要求的精度。原始的数据值和压缩后存储的数据值的差异取决于计算DCT的方法。

除了使用DCT外,也可以使用快速傅里叶变换(fast Fourier transformation)和小波变换(wavelet transformation)处理图像。

其他的图像属性,如亮度也可以被用来隐藏图像。拼接(patchwork,一种在图像区域进行标记或打补丁的技术)和近似(similar)技术使用冗余图像编码或扩频技术在整个cover image上散列嵌入隐藏信息。这些方法或许可以在图像发生变换后,比只进行mask方法更能保证隐藏信息的完整性。

在使用冗余图像编码时需要权衡信息的大小和隐写图像的鲁棒性——如果信息过小但是在整个图像上被重复嵌入了无数次(如上面的水印图像),那么在图像被裁剪后,该信息有很大的概率照样存在于隐写图像上;但是如果信息过大的话,它可能需要占用大面积的图像区域,面对图像裁剪,可能会发生信息的损坏和丢失。

其他的方法是在图像中加密和散布隐藏数据。分散信息会让它看起来更像噪音。这种方法的支持者认为,即使提取了消息bit,如果没有算法和隐写密匙来解码它们,也是没用的。

例如,白噪声风暴工具(white noise storm)是基于扩频技术(spread spectrum)和跳频技术(frequency hopping)的,它将信息分散到整个图像中。与使用固定公式和密钥改变x通道的通信不同,White Noise Storm根据之前的窗口大小和数据通道生成的随机数传播8个通道。每个通道代表1位,所以每个图像窗口包含1Byte的信息和许多未使用的bit。这些通道在它们自己之间旋转、交换和交错以产生不同的位排列。例如,第1位可能与第7位交换,或者两个位都可能向右旋转一个位置。交换规则由隐写密钥和前一个窗口的随机数据决定(类似于DES块加密)。

散射和加密有助于防止隐藏的信息提取,但不能防止通过图像处理的信息破坏。图像LSB中的零散消息仍然像插入到LSB中的明文消息一样容易受到有损压缩和图像处理的破坏。

隐写术在安全领域的作用是补充密码学,而不是取代它。如果一个隐藏的信息是加密的,那么如果被发现,它也必须被解密,这提供了另一层保护。

测试案例

为了展现集成了隐写功能的软件的可用性和灵活性,对以下三个软件进行评估:

  1. StegoDogs;
  2. White Noise Storm;
  3. S-Tools for Windows;

首先选择合适的信息和cover field。在一些测试中,因为软件和隐写方法的限制,不得不使用一些特定标准的cover field和信息。一共测试了25个文件作为cover field,为了展现效果,这里只放置使用两个信息和两个cover filed的实验结果。

第一个信息文件是一个明文,具体信息如下:

Steganography is the art and science of communicating in a way which hides the existence of the communication. In contrast to cryptography, where the “enemy” is allowed to detect, intercept and modify messages without being able to violate certain security premises guaranteed by a cryptosystem, the goal of steganography is to hide messages inside other “harmless” messages in a way that does not allow any “enemy” to even detect that there is a second secret message present [Markus Kuhn 1995-07-03].

第二个信息为一个机场图片:

在这里插入图片描述

两个cover field是两张图像,分别为:

在这里插入图片描述在这里插入图片描述

因为第二个cover image——莎士比亚画像过小,所以不能在其中隐藏机场图片信息,但是可以隐藏文本信息。

上述的几个软件经过测试发现都可以在莎士比亚画像中隐藏518bit的明文信息,但是一些软件不能把机场图片信息隐藏到第一个cover image——油画中。

StegoDogs

StegoDogs是一个开源软件,但是只能处理图像深度为8bit、大小为320×200的图像。消息编码和解码需要许多步骤,我们必须跟踪原始和修改的文件。解码消息需要一个第三方程序。

因为输入的限制,所以StegoDogs不能将机场图片信息嵌入图像,且在使用莎士比亚画像存储文本信息时,需要事先将图像裁剪为320×200的大小。

StegoDogs使用LSB方法嵌入信息,且在信息的最后增加了一个文件终止符。在把信息从图像中还原时会产生大量的垃圾信息,如原本的信息只有528Bytes,但是可以提取出8KB的信息,其中大部分都是垃圾信息。

White Noise Storm

White Noise Storm是一个非常有效的DOS隐写程序。可以很容易地将文本信息嵌入到cover image中,并且图像不会发生退化(图像退化就是因为某些原因使图像质量变差)。White Noise Storm可以将机场图片信息嵌入油画中。然而,存在干扰图像完整性的噪声问题,这严重改变了图像的调色板,详情见下图的对比,左侧为原始图像。
在这里插入图片描述在这里插入图片描述
White Noise Storm还包括一个加密程序,以随机化图像中的位。该软件采用LSB方法,并将此方法应用于IBM的Paintbrush (PCX)文件。该软件从封面图像中提取最低有效位(lsb)并存储在一个文件中。消息被加密并应用到这些位上,从而创建一组新的lbs,然后将修改后的比特重新嵌入cover image中,形成新的隐写图像。

将White Noise Storm的加密方法应用于隐写术的主要缺点是丢失了许多可用于保存信息的位元;相对较大的文件必须用来保存与其他方法提供的小得多的覆盖图像相同的信息量。

S-Tools for Windows

S-Tools for Windows是测试的几个软件中功能最全面的,版本3可以处理GIF、BMP、audio MAV文件。S-Tools for Windows同样可以在一些不重要的地方存储隐藏信息。版本4将图像和声音整合到一个文件中了。除了支持对24bit的图像进行处理,S-Tools for Windows同样可以使用多种方法进行加密操作。

S-Tools for Windows可以对图像和视频文件进行处理,比较好的是S-Tools for Windows使用起来比较简单,且在线文档比较完善。除此之外,S-Tools for Windows可以在打开cover field文件时提示其可以隐藏的信息的最大容量,这样可以有效避免将过大的图像嵌入cover field。

S-Tools for Windows软件在处理完成后会显示新生成的隐写图像,用户可以在原始图像和隐写图像之间进行转换,但是此时的隐写图像可能会看起来非常扭曲。扭曲的原因可能是因为内存限制或者是S-Tools for Windows软件内部的bug,但是存储起来的图像和原始图像基本看不出差别。但是有些时候存储的隐写图像是损坏的、不可读的。

S-Tools for Windows提供了非常多隐藏信息和加密数据的方法,效果最好的就是使用版本4的S-Tools for Windows在图像深度为24bit的图像隐藏信息。
在这里插入图片描述在这里插入图片描述

上图是在24bit图像内嵌入隐藏信息的结果(右图),肉眼观察和原图像没有区别,但实际上是从原图像195891种颜色增加到了312340种颜色。

当处理8bit图像时,有两种方法:

  1. 首先将cover image转换为图像深度为24bit的图像,然后可以得到上图的结果;
  2. 减少图像中的颜色数量——为了减少颜色数量,S-Tools通过在8bit的cover image中隐藏信息来创建一个8bit的隐写图像。在将消息“传播”到图像中的lsb之前,S-Tools会尝试减少图像中的颜色数量。减少过程允许颜色分布在几个字节范围内,这样lbs的移动对图像分辨率的影响很小。从视觉上区分256色图像和32色图像是很困难的。
    在这里插入图片描述在这里插入图片描述

首先,我们将原始图像(左侧图像)转换为GIF文件。这一转换将颜色从195,891种颜色减少到248种颜色。在将图像信息进行隐藏的过程中,将8位的cover image从248种颜色减少到32种颜色。即使经过这些明显的修改,最终得到的隐写图像仍然与原始图像非常相似。最终的GIF图像有256种颜色,而原始转换的GIF图像有248种颜色。

最后

隐写技术远不止简单地将文本嵌入图像。它也适用于其他媒体,包括语音、文本、二进制文件和通信通道。

隐写技术本身并不能保证保密性,但简单的加密技术也不能。但是,如果将这些方法结合起来,就会产生更强的加密方法。如果信息经过加密,然后嵌入到图像、视频或语音中,它就会变得更加安全。如果截获了加密的消息,拦截器就知道该文本是加密的消息。但是使用隐写术,拦截器甚至可能不知道隐藏的消息是否存在。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值