基于隐写技术的气象数据安全保护研究
2019-08-22张子剑
郭 聪,马 强,张子剑
(国家气象信息中心,北京 100081)
0 引 言
随着技术的不断进步,信息媒体的数字化为信息的提取和存储带来了极大便利。数据的交换和传输简单给共享数据的信息安全防护、知识产权保护和数据认证取证带来困难,亟需采取有效措施予以解决。气象数据蕴含丰富的应用和研究价值,同时气象服务需求不断增加。气象部门响应政府号召,采用多种方式对外提供气象资源和数据服务,但笔者发现,当数据共享给授权者后,无法及时采取有效的技术手段阻止非授权用户的非法数据滥用、泄露等问题。这些给数据的管理和安全防护带来极大挑战。
信息安全随着技术的不断发展,受到越来越多研究者的青睐,数字水印已成为近年来信息安全领域关注的热点[1-6]。数字水印中的隐写技术是一种可以将秘密信息在不损坏载体质量的情况下,以用户不知情的形式嵌入到数字媒介,从而为数据提供安全标记来保护数据安全的技术。由于其隐蔽不易被发现,信息可以在开放的环境中安全传输而不易被影响。目前,隐写技术的经典算法——空域算法[7],应用十分广泛。它通过将必要信息嵌入到随机选择的图像点中最不重要的像素位(least significant bits,LSB)上,来保证嵌入的数字标记的不可见,但研究者通过分析发现,该方案技术鲁棒性不高。经典变换域算法应用也十分广泛,主要通过扩展频谱通信技术Patchwork算法,对像素亮度进行调整从而加入必要用户信息,从而保护数据安全。这两类算法虽然较易实现,但能够添加的信息十分有限,且没有将图像格式和文本格式同时考虑保护的尝试。根据笔者前期调研分析,气象数据的数据存量大,数据种类繁多,文本类数据和图片类数据又尤其重要,因此需要一种相应的数据隐写保护技术,以保护气象数据的安全。
基于上述考虑,提出了一种针对不同类型气象数据的有效信息隐写技术添加方案——INVIEN。该方案可针对不同气象数据的特点,在数据的不同位置添加隐形的数据授权使用信息。当数据共享服务后,可通过对数据中数字水印[8]的鉴定和分析来核实数据所有者信息,从而为气象数据的版权保护和鉴别提供依据,有利于保护气象数据的数据安全。
文中主要贡献如下:提出了一种新颖的隐写方案,该方案复用性强,适用于大数据量数据的使用;基于密码学的数字签名技术,能够对嵌入信息提供进一步的数据完整性保护;增加了对嵌入信息完整性的自定义校验CRC技术[9-10],能够有效保护数据传输过程中的数据安全。
据笔者了解,该方案是第一个针对批量气象数据进行数字标记添加的行业用户。通过对批量数据的集中多维度系统测试,结果表明该方案能够对不同类型的数据进行有效隐写水印添加,并能协助鉴别已共享数据的数据所有者权益。
1 加密系统概述
本节主要介绍系统模型,该系统模型基于数据隐写数字水印不可见加密方法,构建并设计了文中方案。
1.1 系统模型
文中设计的系统模型INVIEN包含两个主体:用户和服务器。该模型主要针对气象数据中最常见的两种数据格式PNG及TXT进行保护。用户需要将加密的数据提供给服务器,服务器可以批量完成对不同格式的用户信息的隐写添加。
加密方案可表示为:
π=(QueryEn,QueryDe)
Data←QueryEn:提交加密查询请求算法,服务器返回加密后的数据结果Data。
K←QueryDe:提交解密查询请求算法,服务器返回插入数据中的水印信息K。
系统模型如图1所示。
图1 系统模型
1.1.1 用 户
用户,即数据属主,负责向系统提出请求并提供需要加密的数据或请求对已加密数据进行解密,并接收从系统返回的结果。
1.1.2 服务器
接受用户的加密请求或解密请求。对用户提交的批量文件,根据不同类型采用不同模块接收请求。对加密请求返回加密后的数据,解密请求返回加密水印中的信息。
1.2 INVIEN的构建
INVIEN系统由两大部分构成:对PNG格式的加密;对TXT格式的加密。其中用到了多项技术,下面对系统中使用到的技术进行简单介绍。
chunk的构建描述如下:
这部分是关键,这里单独着重介绍。
针对插入的信息,设计了一个简单的加密消息结构chunk,约定消息长度40 Byte,加密内容在28 Byte以内。28 Byte能满足一般需求,如果需要扩大,可以后续修改。值得注意的是,还在结构中加入了CRC校验[9]防止错误出现。
在此基础上,在chunk里基于MD5和RSA的签名结构对消息进行保护。加密过程如下:
首先生成公钥、私钥并保存,长度均为512位。
(PK,SK)
用户信息定义为userinfo,使用MD5对userinfo摘要,摘要信息定义为md5_data。
md5_data=md5(uerinfo)
签名用RSA对md5_data加密,得到签名sign_ta。
sign_data=RSA(md5_data)
最后将userinfo和sign_data进行拼接,得到chunk_data,最后包装为chunk写入文件。
chunk=length+chunkname+CRC32(chunk_ data(userinfo+sign_data)+chunkname)+(chunk_data(userinfo+sign_data)+chunkname)加密消息结构如图2所示。
图2 加密消息结构
解密过程相对,将加密过程倒序执行即可。先拆解chunk_data得到userinfo,再用md5得到摘要,然后用RSA对sign_data进行解密,并与前面摘要比对,相同则验证通过,获得用户信息。
1.3 设计目标
设计目标是实现一个加密系统,能够对PNG及TXT格式的批量数据进行加密。加密内容可以自定义,并且对加密数据进行签名,能够进一步保护数据的安全。如果发生数据泄露等问题,可以通过鉴别数据的信息进行追踪溯源。
2 加密算法的思路及构建
2.1 PNG格式的加密实现
通过对PNG文件进行解析,增加包含加密信息的文件块程序模块。这里提出了两种加密思路,其一是文件头加密技术[11-12],另一种是像素点加工加密。
根据已知的PNG文件格式,可知PNG文件头位置总是由位固定的字节来描述的。其中第一个字节为了避免某些软件将PNG文件误认为文本文件来处理,值0x89超出了ASCII字符的范围用来标识。文件中剩余的部分由3个以上的PNG的数据块(chunk)按照特定的顺序组成,因此,一个标准的PNG文件结构由文件标识及众多chunk构成。
PNG定义了两种类型的数据块,一种称为关键数据块(critical chunk),这是标准的数据块,另一种叫做辅助数据块(ancillary chunks),这是可选的数据块。关键数据块定义了4个标准数据块,每个PNG文件都必须包含它们,PNG读写软件也都必须要支持这些数据块。虽然PNG文件规范没有要求PNG编译码器对可选数据块进行编码和译码,但规范提倡支持可选数据块。
文中提出的第一种加密思路—文件头加密,就是对PNG图片的文件头进行隐写,通过加入自己构建的信息块[13-15](chunk),达到加密效果。将加密信息封装成PNG结构的信息块,加入该chunk后对PNG文件对的数据块重新排序写入文件。
用算法1总结这个过程。
算法1:PNG文件头加密请求QueryEn。
输入:PNG格式文件,自定义加密信息;
输出:加入加密信息后的PNG文件。
(1)将待加密信息封装成固定格式的数据块;
(2)判断文件的可加密容量是否够用,不够则抛出异常;
(3)按字节读入图片,将图片划分为独立的数据块(PngChunk);
(4)将现有的数据块(含加密信息块),按照特定的顺序重新写入文件,并返回加密成功文件ΔData。
第二种加密思路是像素点加工加密[16-17],用java语言中的image类对PNG图片的像素点rgb值进行读写,将加密信息每3 Byte组成一个像素点,写入到图片中,实现嵌入有意义的信息,同时不影响PNG的使用,保护了文件的完整性,用对图片最小的破坏,换取最大的加密效果。
算法2:像素点加密请求QueryEn[18-20]。
输入:PNG格式文件,自定义加密信息;
输出:加入加密信息后的PNG文件。
(1)将待加密信息封装成固定格式的数据块;
(2)判断文件的可加密容量是否够用,不够则抛出异常;
(3)按像素读入图片,按特定的间隔取出对应的像素;
(4)将加密数据块按3 Byte每组进行划分,对每一组字节,前面添加0xff,然后转换成32 bit的int;
(5)将int值写入前面取出的像素值中,然后将像素重新写回文件,并返回加密成功文件ΔData。
2.2 TXT格式的加密实现
文本文件是基于字符编码的文件,常见的编码有ASCII、UNICODE等等。首先,读取文件上的二进制比特流,然后按照所选择的解码方式来解码,最后显示结果。一般来说,选取ASCII码作为解码形式。
根据文本文件的特点,构建了两种加密思路。第一种,在TXT文件的每行的行尾加密[21-22],追加一定位数的不可见字符串(如0x00和0x20),该字符串由加密信息的二进制编码而来。第二种,在文本的末尾追加[23-24]一定行数的不可见字符串,该字符串由加密信息的二进制编码而来。
算法3:行尾加密算法QueryEn。
输入:TXT格式文件及加密信息K;
输出:加密后的TXT文件。
(1)按字节读入图片,并分割为独立的数据块;
(2)匹配数据块的块名,匹配成功则取出这个数据块;
(3)将封装好的加密信息转换成对应的2进制字符串,并用特定字符(0x00和0x20)进行编码;
(4)按行读入文本文件,在行尾追加一定数量的加密字符后写回文件中。
算法4:文本末尾加密算法QueryEn。
输入:TXT格式文件及加密信息K;
输出:加密后的TXT文件。
(1)按字节读入图片,并分割为独立的数据块;
(2)匹配数据块的块名,匹配成功则取出这个数据块;
(3)将封装好的加密信息转换成对应的2进制字符串,并用特定字符(0x00和0x20)进行编码;
(4)在文本文件末尾追加一定行数的加密字符后写回文件。
采用对文本每行行尾加密的方法时,对文本的行数有一定的要求。目前定的标准是,每行行尾追加5 Byte长的二进制化的消息,用的是0x00和0x20编码,显示为空格,也就是说,行数要在8行以上。采用对文本最后追加消息加密的方法时,对每行的加密位数限制为100 bits。上述信息长度标准都可以在程序中直接修改,不会对加密系统整体造成影响。
对TXT文件,同样构建了解密算法,方便对泄露文件追踪泄密源。
算法5:解密TXT文件算法QueryDe。
输入:加密过的TXT文件ΔData;
输出:加密信息K。
行尾解密:
(1)按行读入文本文件,从末尾开始,取出指定数目的字符;
(2)将取得的字符进行拼接,转换成二进制字符,再转换成特定格式的数据块;
(3)对数据块内容进行校验,每异常就取出加密信息。
文件末尾解密:
(1)直接读取文件末尾的加密信息,以空换行为分割符;
(2)将取得的加密信息进行拼接,转换成二进制字符,再转换成特定格式的数据块;
(3)对数据块内容进行校验,每异常就取出加密信息。
3 结果与分析
根据上述INVIEN系统的构造描述,对该方案成功地进行了实现。该方案主要包括初始化,输入,加密和解密四个过程。
3.1 PngOperation模块性能与测试
在PngOperation模块中,采用了文件头加密和像素点加密两种实现方法。
在文件头加密方法和像素点加密方法中,按照等比数列分布,分别取了1 M,2 M,4 M,8 M,16 M,32 M,64 M,128 M,256 M数据量大小的PNG图片文件进行测试。
显然,像素点加密和文件头加密都是针对PNG格式的图片进行处理的,但在处理的速度和性能上,还是存在一定差距的。故在多次计算,取其平均值后,可以看到该方案针对批量文件的去尾平均时间如图3所示。
图3 PngOperation模块两种不同隐写方式的加密解密时间曲线
图3中,pic_only_encrypt(Pixel)曲线表示的是像素点加密方法,pic_only_encrypt(Head)曲线表示的是文件头加密方法,pic_only_decrypt(Head)曲线表示的是文件头解密,pic_only_decrypt(Pixel)曲线表示的是像素点解密。显而易见,pic_only_encrypt(Pixel)与其他三条曲线差异最大,且接近参考的指数曲线。换句话说,像素点加密方法的时间是随着图片文件的增加呈指数增长的,而文件头加密和两者所对应的解密方法所需的时间都是缓慢增长的。
3.2 TXTOperation模块性能与测试
在TXTOperation模块中,采用了行尾加密和文本末尾追加加密两种实现方法。
在行尾加密方法和文本末尾追加加密方法中,考虑到TXT文本文件小的可以只有几k,而文件大的有几百M。因此,对小文件和大文件分别讨论,并按照等比数列分布,分别取了由1个,2个,4个,8个,16个,32个,64个,128个加密的气象文本数据样本构成的文件进行测试。在多次计算取其平均值后,可以看到该方案针对批量文件的去尾平均时间如图4和图5所示。
图4 TXTOperation模块在小文本文件下的两种不同隐写方式的加密解密时间曲线
图5 TXTOperation模块在大文本文件下的两种不同隐写方式的加密解密时间曲线
在图4和图5中,text_only_encrypt(End)曲线表示的是文本末尾追加加密方法,text_only_encrypt(Line)曲线表示的是行尾加密方法,text_only_decrypt(Line)曲线表示的是行尾解密,text_only_decrypt(End)曲线表示的是文本末尾追加解密。
由图4可知,针对小文本文件,无论是行尾加密方法,还是文本末尾追加加密方法,其加密时间都是随着文本数量的增加呈指数增长的,其对应的解密时间也同样呈指数增长。但总体说来,行尾加密的时间大于文本末尾追加加密的时间,那么相反的,行尾解密的时间小于文本末尾追加解密的时间。
由图5可知,针对大文本文件,曲线比较像PngOperation模块中,图3对应的两种方法加解密的时间走势。具体分析,text_only_encrypt(End)与其他三条曲线差异最大,且接近参考的指数曲线。换句话说,文本末尾追加加密方法的时间是随着文本文件个数的增加呈指数增长的,而行尾加密和两者所对应的解密方法所需的时间都是缓慢增长的。
3.3 性能测试结果与分析
3.3.1 PngOperation模块
可以看到,两种方案的解密速度都是很快的,但是加密时间却差异很大。随着图片文件数据量的不断增大,像素点加密的时间开始急剧增加,而文件头加密所需之间仍只是接近线性增长。
总的说来,针对PNG的图片文件而言,文件头加密是相对较快的,尤其是对于图片文件较大的时候。但是,也不得不考虑整个隐写算法的安全性,从这点出发,文件头加密的鲁棒性能就较差了,加密的用户信息很容易被去除。而像素点加密的算法,虽然可能会造成对原始数据的轻微改动,但是隐写的用户信息很难察觉,并且也并不容易去除。
3.3.2 TXTOperation模块
可以看到,两种方案的解密速度相较于对应的加密速度更快,并且两种方案的加密时间也相差无几。
在PngOperation模块性能与测试中,已经看到了像素点加密和文件头加密在一定情况下,是有显著区别的。那么针对TXT文本文件的两种方法,一个是在行尾加密,一个是在文本末尾追加加密,为什么加密的时间也相差无几,其实就是因为这两种方法本质加密的原理是一样的,只是隐写嵌入加密的用户信息时,嵌入位置不一样而已。
所以,总的说来,针对TXT的文本文件而言,两种方法的效率是差不多的。文中方法是将加密的用户信息转成二进制使用winhex工具查看,并追加使用0x00和0x20构成的一定位数的不可见字符串构成,因此行尾追加的方法会比文本末尾追加的方法的鲁棒性和安全性更好,所以优先考虑行尾追加方法。但由于文本文件没有固定的格式,若原始的文本文件内容很少,行数也只有几行,那么行尾追加的方法是不能将所有经过加密的用户信息成功嵌入的。因此,这时直接在文本末尾追加完整的经过加密的用户信息,就不用受行数约束。
4 结束语
该课题主要基于隐写技术进行研究,通过搭建气象数据源版权保护系统平台,可以对气象数据添加隐写用户信息。当数据在开放的网络环境下共享后,如发现违规操作和数据泄露情况时,通过该系统可以对气象数据对外共享后的数据鉴别提供支撑依据,从而实现对气象数据的版权保护。