最近在关注视频加密领域的知识。看到这篇文章对想了解加密的人很有帮助,所以转贴在这里和大家分享。本文主要介绍常见的视频加密算法的原理和过程,以及每种方法的优缺点。1、全加密(NaiveAlgorithm)是使用一种标准的加密方法(如DES)对整个视频流进行加密。视频比特流与传统的文本数据一样对待,没有使用视频压缩后数据流的特殊结构。这种方式显然计算量巨大,难以保证视频的实时传输。2.选择性加密算法选择性加密是基于信源特征的视频加密方法的主要方向,可分为以下几类:(1)基本的选择性加密算法是基于视频IPB帧结构的。最具代表性和最早提出的加密方法之一是只加密I帧。然而,Agi和Gong表明,由于帧间相关性,这种仅加密I帧的方法无法达到令人满意的加密水平,主要是因为P帧和B帧中的I块未加密。这样,有人提出在对I帧进行加密的同时,对PB帧中的I块进行加密。但是这样增加了计算量,而且视频图像中的运动信息没有加密,保密性还是不够好。因此,有人提出采用增加视频序列中I帧出现频率的方法来增加加密内容,从而提高安全级别。但这显然会增加加密数据量,大大增加计算量,降低视频压缩率。(2)只加密头信息的方法:MPEG和H26X序列按照一定的结构组织图像数据。比如一组图片、一张图片(帧)、一组切片、一个切片、一组宏块、一个宏块等,都是以一个header开头,后面是图像数据。编码后的视频数据必须按照标准规定的特定结构进行排列和组织,接收方才能按照相同的标准结构正确解码原始视频图像。该算法的原理是将这些头信息数据加密,变成一个随机序列,然后与其他数据混合,使得接收方在不知道密钥的情况下很难区分结构信息数据和视频信息数据,更难知道数据。结构和数据的具体内容,很难按照原始数据结构对接收到的视频编码数据进行解码,无法得到原始图像,从而达到加密的目的。该算法只对头部信息进行加密,安全性较低。因为按照编码标准,头部信息有固定的位置和内容,所以信息内容很小,加密意义不大。只要能够区分头部信息和视频数据,就可以恢复视频图像,一旦知道头部信息,密钥和加密算法也很容易破译。事实上,基于MPEG、H26x等标准的视频数据结构比较固定,视频数据本身具有很强的特性。这种加密方式比较容易破译。该算法不会降低压缩比。计算量小,适用于各种标准的视频或图像压缩编码数据。经该算法加密后的编码视频数据没有共同的数据结构信息,均为随机序列。为了便于合法的接收方接收,需要加入加密的同步信息,或者保留同步信息的原有部分,只对其他结构信息进行加密。如果加密后的结构信息有误,合法的接收者就很难还原出视频图像。(3)Meyer和Gadegast设计了一种新的类MPEG比特流,称为SECMPEG。SECAM不仅可以使用标准的加密算法DES和RSA,还可以实现不同级别的加密。但是,SECMPEG与标准MPEG不兼容,需要设计特殊的编解码器。Level1:加密所有头信息(Headers)Level2:加密所有头信息(Headers)和I-Block中的DC、AC系数Level3:加密I帧和PB帧中的所有I-Block第四级:加密所有数据(4)选择性加密的另一个主要方向是BharatBhargava等人提出的加密DCT符号和运动矢量MV符号。在文献[5]中,只对I帧的DCT符号位进行加密的方法称为VEA算法。第二种方法不仅对I帧进行了加密,还对PB帧的DCT符号位和运动矢量MV的符号位进行了加密,称为MVEA算法。第三种相对保密性要好得多的方法是使用密钥加密的密码算法(如DES或IDEA)对运动矢量的DCT系数或MV符号位进行加密,作者称之为RVEA算法.选择性加密的保密性取决于所使用的具体方法。一般选择性加密的计算量不大,通常不会增加码流的大小(改变I帧频率的选择性加密算法除外)。视频加密3.Zig-ZagPermutationAlgorithm(之字形排列算法)Zig-Zag加扰算法的基本思想:用一个随机的加扰序列代替Zig-Zag扫描顺序来转换每个8×8的块。DCT系数被映射到一个1×64的向量中。基本算法包括三个步骤,具体步骤如下:(1)生成基数为64的加扰序列表;(2)将DC系数分成两个较小的数。假设DC是一个二进制数d7d6d5d4d3d2d1d0,把它分成两个数d7d6d5d4和d3d2d1d0,都在[0,15]范围内。然后将直流系数设置为d7d6d5d4,将原来的最后一个交流系数设置为d3d2d1d0。(这个分离过程是基于以下两点:(1)通常DC系数值远大于AC系数值,所以乱序后很容易识别。和AC很难区分分离后的系数变小;(2)最后一个AC系数影响不大,一般为0,可以用来存放d3d2d1d0,恢复时取0值,不影响图像质量和不增加数据量。)(3)利用随机加扰序列表将处理后的8×8块映射成1×64的序列(向量)。算法设计者自己指出,上述基本算法容易受到已知明文攻击,因此额外提供两种方法来增强算法的安全性:方法一:每8个block分成一组,划分8个DC系数组合(每个系数8位,恰好64位),然后用DES加密。加密的结果被字节映射回8个块,然后(根据上面的步骤1-3)对每个块进行分离过程和加扰加密。方法二:生成两个不同的置乱序列表(表1和表2),每8×8块抛一枚硬币,反面使用表1,正面使用表2。抛硬币产生的正反序列和两个表作为密码。Zig-Zag加扰算法存在严重的安全问题[1]。文献[1]提供了两种可以成功破解该算法的方法。Zig-Zag加扰算法速度非常快,不影响视频的实时传输。但是加密后的视频压缩后码流大小会明显增加。由于采用非zig-zag顺序将8×8的block映射到1×64的向量,因此连续零的个数会大大减少,从而降低压缩率。文献[1]表明,加密后视频流大小最多可增加46%(表中最大值)。考虑到MPEG视频流中的大量数据,这种大小增加是难以容忍的。4、改变霍夫曼码表算法改变哈夫曼码表视频加密算法的原理是:对于熵编码的哈夫曼编码视频编码标准,修改使用通用哈夫曼码表,修改后的专用哈夫曼代码表用作密钥。非法接收者没有这种特殊的码表,不能正确解码视频(图像)信息。该算法的安全性取决于在保持压缩比不变的前提下,霍夫曼码表的可变空间(密码空间)。文献[8]做了定量分析。改变霍夫曼码表一般会降低压缩率。霍夫曼编码是将数据流中频率高的比特组合模式对应短码字,频率低的比特组合模式对应长码字,从而缩短平均码字,压缩数据。霍夫曼码表是通过统计码流中各种比特组合模式出现的概率而制成的。该算法在改变每种组合方式对应的霍夫曼码字时,保持对应的码字长度不变,即保持特定出现概率的组合方式对应的具体码字长度不变,同时也保持原有的压缩率不变。该算法根本不增加计算量。兼容各种使用霍夫曼编码的视频和图像压缩编码标准和算法。它的缺点是安全性差(密钥空间小)。5、基于统计规律的视频加密算法文献[1]中将基于统计规律的视频加密算法称为VEA算法(VideoEncryptionAlgorithm)。文献[1]认为压缩和加密有一些共同点,即都致力于去除冗余信息(Redundantinformation)。MPEG压缩编码的码流具有一定的随机性。文献[1]将码流划分为以字节为单位的流,每个字节单位的值为0~255的整数。根据逐字节测试统计(Byte-by-Byte),编码字节值在0~255之间的分布接近均匀,最高字节出现频率低于0.0178,具有10-6的方差。最高相邻字节对(digrams:pairsoftwoadjacentnumbers)出现频率低于10-4,因此提出如下思路:将I帧分成8或16(通常为16)个块(chunk),在任意chunk,没有重复的字节模式。根据这个假设,提出了下面的VEA算法。(1)令I帧的某个块具有以下形式:a1,a2,a3,a4,...,a2n-1,a2n。(2)选择奇数字节组成一个OddList,选择偶数字节组成一个EvenList。(3)将两个新数据流异或。(4)选择一种加密函数(如DES)对队列a2,a4,...,a2n进行加密。得到的密文为:c1,c2,...,cn,E(a2,a4,...,a2n)。容易看出:如果a2a4...a2n没有重复模式(repeatedpattern),VEA算法的加密级别由函数E决定。因为a2,a4,...,a2n是对a1的简单异或,a3,...,a2n-1,但它是一次性一密加密密钥,被认为是非常机密的。该方法不对头信息结构格式等数据进行加密,只对图像数据本身进行加密。将待加密的数据分为两半,一半用密码学方法(函数E)加密,另一半用简单异或加密,减少了整体的计算量,提高了计算速度。前半部分的计算速度取决于E。这种方法不影响压缩率。适用于压缩视频(或图像)编码数据,压缩越好,加密越好。视频加密算法原理6.纯置换算法(PurePermutationAlgorithm)根据上一节的统计结果,我们知道MPEG视频的字节流中,字节对出现的频率非常低。因此,通常使用数据频率、字节对频率特性等的密码分析方法对此没有用处(至少是困难的)。PurePermutationAlgorithm应运而生:PurePermutationAlgorithm只是对字节流进行打乱。加扰密码序列的基数根据加密级别和应用要求动态变化。例如,我们可以使用64个数字的加扰序列或者1/8长I帧的加扰序列。纯置换算法的问题在于它非常容易受到已知明文攻击。一旦通过将密文与已知的原始帧数据进行比较得到随机加扰序列,所有帧都将很容易被破译。为了找到随机加扰序列,我们需要一个明文,其大小是随机序列长度的已知倍数。但是,请注意MPEG数据流的唯一性与帧大小处于同一数量级,因此根据香农定理,如果已知一个I帧数据,就足以破译整个随机序列。
