刘红英 杨江川
(南京理工大学紫金学院 江苏省南京市 210023)
信息隐藏方式分为多种,本设计针对图像的数据加解密技术进行研究与分析,以png格式的图像为载体对数据进行加密和恢复,采用LSB最低有效位隐写进行数据加密的设计与实现,并结合加密算法对数据进行处理,增强加密数据在嵌入图像后的安全性,Python语言支持的库较多,且相对实现简单,因此本实验基于python语言实现。
传统的密码学首先是利用某些加密算法将明文转化成密文,然后再进行传输。图像隐写技术的思想是将私密信息嵌入到图像中,这种思想的实现在实际应用中就是利用人体的感官局限性,隐藏了信息的载体在传输过程中不易被觉察。
基于图像的隐藏方式如图1所示,在载体图片中,将文字“Ciphertex”隐写到图片中,隐写之后的图片在视觉上与前者看不出来差别,但是这种方式一旦被他人截获后,容易被解析出隐写的文字。
图1:图像隐藏技术示意图
为了使传输更加安全,在实际中可以与传统密码学相结合,如先把秘密信息按照密码学的方式进行编码,再结合隐写技术将编码成功后的秘密信息再次嵌入到多媒体载体中。
隐写术与密码学结合方式如图2所示,同样的一张载体图片,我们先将隐写文字“Ciphertex”进行加密,加密之后的文字再进行隐写,这样即使中间被他人截获,没有密钥的情况下也很难得到明文隐写文字。
图2:传统密码学与隐写术结合示意图
在图像隐写算法中,LSB算法是一种较为典型的隐藏方法。它将秘密信息嵌入载体图像像素值的不显著位以此对载体视觉影响降到最低,然后通过修改量化表来镶嵌数据的基于小波变换[4]的有损压缩嵌入技术,这种技术不仅可以嵌入更多的信息,还保证了载体具有更强的抗压缩性。随着图像隐写技术的不断发展,近年来出现了许多新的隐写算法,可以维持更复杂的图像特性。本系统基于经典的LSB算法进行研究与分析。
Python语言是一种面向对象的高级编程语言,具有集成的动态语义,相对简单,易于学习。Python支持使用模块和包,这意味着程序可以以模块化的方式设计,代码可以在各种项目中重用。一旦开发了所需的模块或软件包,就可以对其进行扩展以便在其他项目中使用,并且可以轻松导入或导出这些模块。
本系统主要包括以下模块,如图3所示。
图3:系统模块设计
隐写模块主要包括两部分:文字的隐写以及图像的隐写。
(1)文字隐写:选取一张图像作为隐写载体,对文字进行预处理,如采用md5方式进行加密,并隐写到载体中,生成一张具有隐写信息的图像,此图像在肉眼下与原载体无差别。
(2)图像隐写:选取一张图像作为隐写载体,对要隐藏的图像进行加密处理并隐写到载体中,生成一张具有隐写信息的图像,此图像在肉眼下与原载体无差别。
解密模块主要包括两部分:文字的解密以及图像的解密。即将隐写在载体中的文字或图像解密出来。
图8:文字隐写与解密结果
用户可以通过工具对隐写之后的图像进行查看,测试信息隐藏效果,本实验中使用StegSolve进行分析,可分析明文加密前后的隐写效果。
安装python以及pycharm,并安装PIL以及skimage库。
明文数据处理模块如图4所示。
图4:明文数据处理流程
加密数据可预先存储在文件中,首先我们将数据从文件中读取,并采用utf-8方式进行编码,使用readlines()函数将文件中的所有数据依次按行读取,由于读取出来的每行数据会有换行符:“ ”,所以需要将数据中的换行符“ ”替换为空“”,在for循环中创建一个data列表,再将每行数据添加到data列表中,同时为每一行数据配一个隐写图片路径用来存放相应的隐写图片,将这个路径也添加到data列表中。每次循环过后产生的data列表都存入datalist列表中去。经过以上操作便完成了明文数据处理。
4.2.1 加密信息
首先将需要隐藏的信息进行加密操作,如:MD5加密:hashlib.md5(b'ciphertext').hexdigest();如果是对中文字符进行加密则需要先将数据转换成UTF-8或GBK格式进行操作。在此加密模块中亦可采用其他的数据加密算法。
4.2.2 隐写技术
数字图像的像素在二维空间中对应着单个的点,即像素,像素的值表示颜色强度。例如在图像矩阵中每个色彩都有相对应的数值,0代表黑,255就代表白。图像用颜色合成的方式来表达,即它的一个像素值往往用R,G,B三个分量表示。
由于jpg格式的图像进行了压缩,隐藏的信息可能在压缩中被破坏,故本设计采用png格式图像作为载体,此格式是一种无损压缩的位图像格式。png图像的像素一般由三种颜色(RGB)构成,每个颜色占居八位,一共有256的三次方种颜色,如图5所示。
图5:RGB色彩向量
隐写技术采用最低有效位算法(LSB算法),即修改每一个颜色值的最低位,用我们想要嵌入的信息的内容替换它,以实现数据的隐藏。每种颜色修改最后一位,这样一个单位的像素就可以通过隐写隐藏三比特的信息,如图6所示。
图6:RGB最低有效位
对图像来说,把秘密图像的每个色彩空间转为八位的二进制数,并将切割成四个部分,每块分别加入到载体图像上去,这样能够保证当载体图像的长宽分别为水印图像的长宽的两倍的时候,水印图像的信息不会丢失。
本系统的隐写载体是彩色图像,为了良好的构建系统功能先把秘密信息先转化为二进制,最后在图像的像素序列中按照行列有规则的顺序嵌入二进制信息,实现图像中最低位平面的信息互换。
成功载入后如果接收者想提取隐秘信息,可以通过提取图像最低有效位信息这样直接的方式来实现。
4.2.3 隐写实现模块
该模块借助第三方PIL库的image模块读取图像的像素信息,像素读取代码如下:
读取像素的RGB值,R减去R除以2的模再加上密文二进制字符串中的单个字符“1”或“0”,这样就完成了密文二进制字符串嵌入到RGB三个值中。嵌入代码如下所示:
R = R - mod (R,2) + int(str2[count])
图像处理关键代码如下:
数据加密模块的逆过程,使用random库中的randint模快进行异或处理,得到的数值就是明文二进制字符串每8位二进制对应的十进制值,只需要将这些值转换为二进制再以16位二进制为单位恢复成十进制,再将十进制数值用chr()函数转换为字符后进行拼接就可以得到明文。
(1)加解密文字过程:运行效果以及结果如图7-8所示。
图7:文字隐写展示界面
(2)加解密图像过程中隐写图像尺寸不得大于载体图像尺寸。若加密图像过大,则会出现无法正常解析的情况,在本设计中选取尺寸小于原载体图片的加密图像,解析后的结果如图9所示。
图9:图像隐写与解密结果
StegSolve是一个图像分析软件,可对图像中的信息进行深度挖掘分析,选中RGB通道,可以看到隐含的信息。使用本系统加入了加密算法的图像隐写程序进行秘密隐写,隐写完成后使用StegSolve查看图像数据,有加密算法的隐写图像数据如图10所示。解析出来的结果横线乱码,可看出加密之后隐写的数据不易被解析。
图10:StegSolve对加密隐写进行分析
若信息没有加密直接隐写在图像中,则结果如图11所示。解密的数据直接被解析出来。
图11:StegSolve对明文隐写进行分析
本课题对图像隐写技术进行设计和实现,对当前的隐写算法进行分析,并实现基于LSB的图像隐写与解密系统,该系统对明文数据进行预处理进行加密,并实现对文字以及图片的隐写,具有较好的隐蔽性,但是可携带的数据量不多,在后续研究中可将深度学习算法应用到图像隐写中。