目前,已有不少利用数字视频信号特征的加密方法被提出,但都不完善,不能同时满足安全性、实时性以及低成本的要求。下面我们将介绍的这款视频加密方法,充分利用了视频数据的码流结构特点,在不改变码流语法的基础上,将每个视频帧内的宏块按照置乱矩阵进行置乱,从而达到解码后的图像无法识别的目的。
一、视频数据码流结构及宏块置乱技术
数字视频技术在近十年得到飞速发展和广泛应用,这在很大程度上得益于其标准化活动。国际标准化组织于1986年成立了运动图像专家组MPEG(Moving Picture Expert Group),主要致力于制定运动图像的压缩编码标准。该专家组从1993年起至今正式编辑出版了MPEG1、MPEG2、MPEG4等一序列的标准。与此同时,国际电信联盟ITU-T 从1990年起至今接连发布了H.261、H.263及H.264等一序列的标准。这些标准极大地促进了视频编码技术的迅速发展和广泛应用。
MPEG和H26序列都按严格结构组织图像数据。例如,H263视频通过4层结构来管理,从外到内分别是图像层(Picture_Layer)、块组层(Group_of_blocks_layer)、宏块层(Macro_block_layer)、块层(Block_layer)。它们都由一个标志信息头开始(块层除外),后接图像数据。MPEG4视频按对象管理,分层与此类似。各层头信息是一些很容易从数据流中分辨出来的特殊码字组合,起同步和指示数据结构的作用。
本文提出的视频加密方案就是基于这种结构,先对编码后的视频数据进行分析,对结构部分保持不变,对图像数据部分以宏块为单位,按照置乱矩阵置乱,从而达到视频文件加密的目的。此方案适用于所有基于这种结构的标准,包括H.26序列和MPEG序列。
本文采用伪随机序列来产生置乱矩阵。每帧使用一个不同的置乱矩阵置乱。解密端采用同步的伪随机序列就可以进行解密。使用伪随机序列产生置乱矩阵,可以避免传递置乱矩阵,而且每帧图像都可以使用不同的置乱矩阵置乱。这为算法的安全性提供了有效的保障,同时也没有增加码流。
二、伪随机序列生成及加密置乱矩阵的产生
1、伪随机序列的生成
本文采用的伪随机序列为m序列。它由一个n阶的线性反馈移位寄存器(LFSR)生成。LFSR是一种研究得非常成熟得序列生成方法,已被广泛地应用于密码技术、保密通信技术等方面。它通过一个有限长的种子产生具有足够长周期和良好随机性的序列。在传递、存储序列时,只须传递、存储生成器的方法和种子。
一个n阶LFSR能够处于2n-1个内部状态中的一个。由n阶LFSR所产生的序列长度因反馈逻辑函数的不同而不一样。最长的序列为2n-1位。只有具有一定反馈逻辑函数的LFSR才能循环地通过所有2n-1个内部状态,在重复之前才能够产生2n-1位长的伪随机序列。满足这个条件的反馈逻辑函数称作LFSR的本原多项式。由它生成的2n-1位长的伪随机序列被称为m序列。
由上可见,一个本原多项式及其寄存器初始值完全确定了一个m序列生成器,只要找到了本原多项式,就能由它来构成m序列发生器。但是寻找本原多项式并不是很容易的,尤其当n次数较高时,要把所有n次本原多项式的具体形式找出来是一项很繁琐的工作,必须借助计算机来完成。这方面的工作已由前人完成,并已将计算结果制成表以供查用。
本方案采用的本原多项式为(1279,216,0)。这意味着使用1279位移位寄存器,通过对第1279,216和0位进行异或产生一个新的位,则得到的LFSR将是最大长度LFSR,在重复之前,它将循环地通过21279-1个值。本方案可以选用的不同阶数的本原多项式,但是,为了保证安全性,应该选用阶数足够大的。
2、加密置乱矩阵的产生
由于伪随机序列具有良好的随机性,所以我们可以用它来产生具有良好随机性的置乱矩阵。具体方式是:
(1)得到宏块总数M,求满足条件(2k-1<M<2k)的k;
(2)用LFSR输出k个新的位,用这k个新的位组成一个随机数;
(3)重复b得到M个随机数;
(4)用洗牌算法把这M个数映射到[1,M]上,产生[1,M]上随机但不重复的M个整数;
(5)用这M个整数组成置乱矩阵。
重复以上操作,可以得到多个不同的置乱矩阵,依次用于每个视频帧中。
三、宏块置乱方案及效果
1、宏块置乱方案
本方案是对编码后的码流进行置乱的。其总体思想是,首先视频图像数据经过编码压缩得到了标准格式的视频码流数据,然后对码流进行分析,得到每帧图像中每个宏块的起点和长度信息,最后按照置乱矩阵对每帧图像中的宏块进行置乱。
对码流进行分析,得到宏块的信息方法如下:
(1)定义结构体,保存宏块的信息。结构体定义如下:
typedef_struct
{
int_startadd;
//记录宏块起点相对缓冲区起点的偏移bit数_int_length;
//记录宏块的数据的长度,单位为bit
}
ShiftUnit;
(2)对码流进行分析,得到宏块的起点和长度信息,记到一个结构体变量中。
(3)把此结构体变量存放到申请的缓冲区中。
(4)重复操作,得到一帧图像中所有宏块的信息,组成一个宏块信息表。
对码流的置乱是按照下面的操作进行的:
(1)根据得到的置乱矩阵对宏块信息表进行重新排列,得到置乱后的宏块信息表。
(2)按照置乱后的宏块信息表,将宏块数据进行移动,重新排列码流数据。
(3)将置乱后得到的码流写回缓冲区,覆盖编码后的码流,置乱完成。
2、宏块置乱效果
下面的两个图中,图1是没有置乱的效果,图2是置乱后的效果。所用的测试序列为的QCIF格式foreman序列。图1和图2是I帧的效果,对于P帧,由于是通过前一帧预测得到的,但是前一帧已经被置乱,所以加密后的效果会更理想。图3即为第157帧的加密效果。从图中可以看出,无论是I帧还是P帧,图像文件加密的效果都是比较理想的。
四、加密方案的安全性分析
1、唯密文攻击
攻击者在截取了密文之后,可以采用穷举法和统计法,对置乱后的图像进行攻击。攻击要分为以下几步:
(1)根据密文得到相应的明文;
(2)对比密文和明文得到置乱矩阵;
(3)根据置乱矩阵,按照本方案相反的算法得到n阶LFSR的一个状态;
(4)根据公开的n阶m序列本原多项式和已知的这个状态,用算法产生一个周期的m序列。
(5)根据得到的m序列破解其它视频帧。
下面我们对以上的攻击方法进行复杂度分析。由于视频图像是由3种类型的帧组成的,即I帧、P帧和B帧。P帧和B帧大多数宏块是通过和前一帧相应宏块预测得到的,前一帧相应的宏块已经被置乱,所以攻击者是无法对P帧和B帧用穷举法复原得到完整的图像的,也就无法根据密文得到相应的明文。可以采取的方法是对I帧用穷举法。对第1步,我们假设攻击者截取了一帧置乱后的I帧的图像,企图采取穷举法复原图像得到明文。如果图像是QCIF格式的(每帧有99个宏块),则要进行穷举的最大次数是99的阶乘,约为10+156次。对于CIF格式,由于其有396个宏块,要进行的穷举次数就更多。所以破解第1步是很困难的。
2、已知明文攻击
如果攻击者知道了密文和相应的明文,那么其攻击就是唯密文攻击的第2步~第5步。具体要分以下几步:
(1)对比密文和明文得到置乱矩阵;
(2)基于统计特征得到LFSR的阶数n;
(3)截取连续的n位作为n阶LFSR的一个状态;
(4)用可能的本原多项式和这个状态进行运算,得到一个完整的m序列;
(5)用得到的m序列破解其它视频帧。
下面我们对其攻击方法的复杂度进行分析。对于第1步,攻击者是很容易对比密文和明文得到置乱矩阵的。对于第2步,其破译方法是利用m序列的游程特性及序列本身的递推关系,彻底还原产生该m序列的线性反馈移位寄存器。但是本方案采用的是1279阶的LFSR,攻击者在仅知道一个置乱矩阵还原得到的部分序列下,是无法得到足够的游程统计特征的,所以也就无法破解。
对于第3步,攻击者不一定可以得到连续的n位来作为n阶LFSR的一个状态。分析如下:对于本方案,QCIF格式的视频,每帧有的最大宏块数为11×9,即99个宏块。那么生成一帧图像的置乱矩阵就要99个数字,每个数字用7位表示就足够了。所以攻击者如果截取一个QCIF格式的视频帧,得到了它的置乱矩阵,那么他最多只可以得到m序列的99×7位,这远小于我们使用的阶数1279。所以,攻击者无法仅通过一帧的数据来得到n阶LFSR的一个状态。所以也就无法破解。
3、应对攻击的方法
从以上的分析中,我们可以看出本方案可能受到的攻击。为了增加安全性,可以从以下方面做些改进,从而有效地避免攻击。
对于唯密文攻击,攻击者的主要任务是破解第1步。P帧和B帧由参考帧得到,所以无法破解。I帧从理论上是可以直接破解的,其主要难度在计算量上。为了增加破解的难度,对于I帧,我们可以结合其它的加密方案,进一步增加安全性。可选的其它加密方案有加密DC系数值。加密算法可以选用高强度的AES加密算法。
对于已知明文攻击,攻击者的主要任务是破解第3步。为了增加破解的难度,可以采取的一种办法是加大LFSR的阶数。从上面的分析可以看出,对于QCIF格式,LFSR的阶数n大于99×7就可以了。但是对于CIF格式,则要大于___396×9。这样,攻击者就无法仅通过一帧数据得到n阶LFSR的一个状态,所以就无法破解。另外一种办法是重复利用LFSR输出的位。例如,对于LFSR输出的10位,我们取前7位得到一个整型数,取后7位得到另外一个整型数。这样我们就重复利用了其中的4位,LFSR一个状态的所有位就不会同时出现在一个置乱矩阵中。
五、加密方案的速度分析
在本方案中,影响加密速度的主要有两个部分:伪随机序列的产生和码流按照宏块来置乱。其中宏块置乱操作比较快,只是些缓冲区的数据拷贝操作,对加密速度的影响不大。本方案的伪随机序列是用软件的方式产生的,所以算法的好坏直接影响到加密的效率。对于伪随机序列的产生,已经有很多研究,读者可以参阅其它资料。
小知识之宏块
在视频编码中,一个编码图像通常划分成若干宏块组成,一个宏块由一个亮度像素块和附加的两个色度像素块组成。一般来说,亮度块为16x16大小的像素块,而两个色度图像像素块的大小依据其图像的采样格式而定,如:对于YUV420采样图像,色度块为8x8大小的像素块。每个图象中,若干宏块被排列成片的形式,视频编码算法以宏块为单位,逐个宏块进行编码,组织成连续的视频码流。