医学图像因其海量数据和专业针对性等问题,在加密领域还没有触及,因Rijndael加密算法主要针对文本文件进行加密,直接使用Rijndael加密算法加密并不能完全保证图像的加密效果。我们基于Rijndael加密算法的设计原理,并结合二维离散混沌系统具有类随机性的特点对其进行改进,该加密算法具有置乱效果好、安全性高等特点,非常适合对要求高保密性的医学图像文件进行加密。
一、二维离散混沌系统及加密因子序列
混沌序列是一种性能优良的伪随机序列,具有较高的保密安全性,目前被广泛应用于加密学领域的混沌模型是一维离散系统(如Logistic映射),其缺陷是密钥空间太小。因此,我们采用了形式简单且具有超混沌特性的二维离散混沌系统,其方程如下:
式中:当a= 1.55、b=-1。3、c= -11和d- 0.1时,xn和yn序列的Layapunov指数分别为0.238和0.166.该系统处于超混沌状态。
将xn和yn作非线性变换得到序列zn,由序列zn通过线性变化映射到0-255的整数序列作为加密因子序列,这样即使攻击者知道序列,在不知道非线性变换函数的情况下,也难以重构出密钥流,因而提高了整个混沌系统的抗破译性。
混沌实值序列转换为0~255的整数序列的设计原则是让加密因子序列尽量保持原混沌序列的伪随机性。针对数字图像的特点,其映射方法是将混沌实值序列在其最大值和最小值之间,按256级等级线性映射,得到8位二进制序列作为加密因子序列。
二、Rijndael加密算法分析及改进方案
Rijndael加密算法的设计原型是Square加密算法,设计策略是宽轨迹策略,可以有效抵抗强力攻击、差分和线性密码分析,具有分组长度和密钥长度设计灵活、高安全性和高运行效率等优点。
本文改进的Rijndael加密算法其思想是利用图像像素的灰度值或R、G、B各分量的值与Rijndael加密算法中的State矩阵元素值相吻合的特点,采用密钥加和字节替代操作改变图像中每个像素点的像素值,降低图像相邻像素之间的相关性,从而更好地保护图像文件;使用行置换和列置换对图像位置进行置乱,改变图像的相互位置关系,降低图像的相关性,从而达到图像保密的目的。
Rijndael加密算法的轮密钥是通过递归定义生成的,某一轮的密钥可以由前一轮或几轮的轮密钥推导而来,而Rijndael加密算法的子密钥的前NK个字完全由种子密钥直接填充而成。如果密码分析者知道了这前NK个字的部分密钥字,就可以根据递推公式得到与这部分密钥字相关的密钥字。当泄露的密钥信息达到一定程度时,其它的种子密钥或许就可以通过穷举法获得,进而获得全部轮子密钥。因此,充分利用加密因子序列伪随机性的特点对Rijndael加密算法进行改进:
①采用加密因子序列作为种子密钥进行密钥扩展,使密码分析者更难以找到加密密钥特别是种子密钥:
②改进行置换和列置换,使图像中的像素置乱位置由加密因子序列来确定,以便增强该加密算法的安全性;
③改进密钥编排方案m,将加密因子序列的长度设定为待加密图像的像素个数,以便更好地适应数字图像文件加密。
三、改进的Rijndael加密算法在医学图像上的应用
1、DICOM文件格式
DICOM文件是指按照DICOM标准而存储的医学文件,一般由一个DICOM文件头和一个DICOM数据集合组成。DICOM数据集合是由DICOM数据元素按照一定的顺序排列组成的,它不仅包括医学图像,还包括许多和医学图像有关的信息。数据元素的组成结构如图1所示,其中标识符由组号和元素号组成,表示为(组号,元素号),是数据元素的惟一标识。每个DICOM文件都必须有一个文件头,包括文件导言,DICOM文件前缀(DICOM Prefix)和DICOM文件元信息。DICOM文件的起始部分是128个字节固定长度的文件导言,它可以用来存放一些信息,给完成特定功能的应用程序使用的。文件导言随后部分就是4个字节的DICOM文件前级,这4个字节依次是"D”,“I”、"C'、"M"4个字符,它们是DICOM文件的标识,表示这是一个DICOM文件。文件前缀之后的文件元信息,它的组织方式实际上与DICOM数据集合中的数据元素完全一样,有时候也看成是0002组的数据元素。
2、DICOM图像文件加密的总体思路
(1)定义一些存储图像参数的变量,并将变量初始化。
(2)按照传输语法格式要求,对DICOM文件的各相关数据元进行遍历,提取出0002组、0028组和7EFO组有用的数据元的内容,分别存入先前定义的变量中。
(3)根据有关数据元的值还原出DICOM文件的图像矩阵并进行加密操作。
(4)将加密后的图像数据重新写入DICOM文件中,关闭文件。
3、图像像素数据的解析
DICOM图像像素数据元素标识是(7FEO,0010),值域中的数据就是DICOM文件的图像像素。在这部分中,图像像素有两种存储方式:一种是原始像素矩阵;另一种是压缩格式,是JPEG还是RLE压缩格式由传输语法决定。
当图像有多帧时,要用到3个特殊的数据元素:项(FFFE,EOOO),项定界符(FFFE,EOOD),系列定界符(FFFE,EODD),用来封装多个图像帧。这3个数据元素后面直接跟4个字节的值域长度。图像的每帧像素数据都用项元素(FFFE,EOOO)封装,如果它的值域长度是-1,则需要通过项定界符元素(FFFE,EOOD)来确定该帧图像的结束;全部图像帧数据结束,用系列定界符元素(FFFE,EODD)来标识。项定界符(FFFE,EOOD)和系列定界符(FFFE,EODD)只是用来标识一帧图像或所有图像的结束,因此值域长度都为0。
图像在多帧的情况下,第一个项元素(FFFE,EOOO)封装的并不是第一帧图像数据,而是一个偏移表项,用来存放每一帧图像的像素矩阵的第一个字节相对于偏移表项结束处相距的字节数。当图像解析时可以从偏移表项中计算出每帧图像的像素矩阵的起始位置S和数据长度L,定义一个包含这两个数据成员的STRUCT类型,将这两个值保存在该STRUCT类型的数组中。另外读取图像文件的相关数据元素(0028,0008)、(0028,0010)、(0028,0011)、(0028,0002)和(0028,0100)可得到图像的帧数、行数、列数、像素的采样数和像素所占的字节数,来对像素矩阵进行划分,得到像素矩阵中的每个像素值,还原出原始像素矩阵。
4、对还原的原始像素矩阵加密
步骤1、密钥加操作。一般情况下还原后的像素矩阵中的像素是用字节的整数倍来存储,这里设为k倍。顺序取出轮密钥,按字节与还原后的像素矩阵中每个像素所对应的k个字节分别异或得到新的像素。
步骤2、字节替代操作。将像素所对应的k个字节分别作替代操作,即前4位作为置换表列坐标,后4位作为置换表行坐标,用置换表行列坐标处的值替换像素所对应的k个字节得到新的像素值。
步骤3、行置换和列置换。由加密因子序列确定图像像素进行横向和纵向移动的位数,首先将图像中的每行像素依次循环左移到该行的另一位置;然后将图像中的每列像素依次向下循环到该列的另一位置。
5、封装像素矩阵
对像素矩阵进行加密后,取出该像素矩阵的起始位置S的值,从文件的S位置处将加密后的图像数据重新写入文件中。图像文件加密流程图如图2所示。
解密的过程就是上述过程的逆过程,只要使用与加密时相同的密钥序列和加密因子序列就可得到解密的像素矩阵。
四、实验结果分析
采用Matlab7.0平台,取CT图像文件进行实验,从实验结果可以看出本文算法应用于医学图像的可行性。
1、相邻像素相关性分析
图像中相邻像素的相关性可反映图像置乱的程度,相关性越小说明置乱程度越高,相关性越大说明置乱程度越低。一个有效的图像加密算法应该去除这种相关性。分别从图像的水平、竖直和对角方向随机地选取1000对像素,并对比它们加密前后的相关系数,对比结果如表1所示。
2、改进的Rijndael加密算法安全性分析
加密因子序列与混沌映射参数、初值等因素有关。它们中任何一个发生微小变化均可以生成完全不同的密钥序列,这就使得采用穷尽式密钥搜索分析来进行解密是很困难的。即便在公开混沌映射参数的情况下,由于在一般的计算机系统中,10进制小数有效位置精度为15位,所以采用穷举攻击的难度仍将达到10的15次方。
对于各种分组长度的Rijndael密码,不存在可预测的扩散率大于2的-150次方的4轮差分轨迹以及不存在可预测的扩散率大于2的-300次方的8轮差分轨迹。同样可以证明不存在相关系数大于2的-75次方的4轮线性轨迹以及不存在相关系数大于2的-150次方的8轮线性轨迹。因此,4轮的Rijndael加密算法就可以有效地抵抗差分密码分析和线性密码分析。
3、图像直方图分析
图3(b)是原图的直方图,图3(d)是加密后图像的直方图,实验结果说明加密过程将原始图像像素值的不均匀分布变成了像素值的均匀分布,使图像的相关性大大降低,密码分析者很难进行唯密文攻击。
4、密钥敏感性分析
图4(b)是初值相差10的-15次方得到的解密结果。从实验结果可以看出,仅当初值密钥有细微的改变,将导致解密结果截然不同于正确结果,改进的Rijndael加密算法具有良好的密钥敏感性。
实验结果表明,改进的Rijndael加密算法安全性高,加密后的图像置乱效果好,而且解密本质上和加密有相同的结构,能够方便地恢复出原始图像。因此,改进的Rijndael加密算法非常适用于数据量大、要求高保密性的医学图像文件。
小知识之DICOM
DICOM(Digital Imaging and Communications in Medicine)即医学数字成像和通信,是医学图像和相关信息的国际标准(ISO 12052)。它定义了质量能满足临床需要的可用于数据交换的医学图像格式。