本文主要分享6种常见的视频加密算法原理,并分析每种原理的优缺点。具体内容见下文:
1、全部加密(NaiveAlgorithm)
也就是使用标准加密方法(比如DES)加密整个视频流。将视频比特流同传统的文本数据同样对待,没有利用视频压缩后数据流的特殊结构。这种方法显然计算量巨大,很难保证视频的实时传输。
2、选择性加密(SelectiveAlgorithm)
选择性加密是基于信源特征的视频加密方法的主要方向,其中可分为以下几类:
(1)基本的选择性加密算法是基于视频IPB帧结构的。这其中最有代表性且最早提出的一种加密方法是仅仅加密I帧。然而,AgiandGong表明由于帧间的相关性和主要是由于P帧和B帧中的I-block没有加密,这种仅加密I帧的方法不能达到一个令人满意的密级。这样,有人提出加密I帧的同时还应加密PB帧中的I块。但这样增大了计算量,同时视频图像中的运动信息也没有被加密,保密性仍不够好。
于是,有人提出利用提高视频序列中I帧频率的方法来增加加密的内容从而提高密级。但这样很明显会增大加密的数据量,大大增加计算量,同时减小视频压缩率。
(2)仅加密头信息的方法:MPEG、H26X序列都按一定结构组织图像数据。例如,图片组、图片(帧)、片组、片、宏块组、宏块等,都由一个头信息开始,后接图像数据。经编码后的视频数据,要按标准规定的特定结构排列组织,收方按相同的标准结构解码,才能正确恢复原视频图像。
该算法的原理是对这些头信息数据加密,将其变成随机序列,再与其它数据混合,使接收方在不知道密钥的情况下难以区分结构信息数据和视频信息数据,更难以知道数据结构和数据的具体内容,难以按原数据结构解码接收到的视频编码数据,无法获得原图像,达到加密目的。
该算法仅加密头信息,安全性较低。因为按照编码标准,头信息具有固定的位置和内容,所以含信息量很小,加密的意义不大。只要能分辨出头信息和视频数据,就可以恢复视频图像,并且一旦知道头信息,密钥和密码算法也很容易破译。事实上,基于MPEG、H26x等标准的视频数据结构比较固定,视频数据本身又有很强的特征,这种加密方式比较容易破译。
该算法不降低压缩率。增加计算量很小,适用于各种标准视频或图像压缩编码数据。
经过该算法加密的视频编码数据没有通用的数据结构信息,全部为随机序列。为便于合法收方接收,需加入加密同步信息,或保留原来部分同步信息,只加密其它结构信息。如果加密结构信息误码,合法收方恢复视频图像也很困难。
(3)MeyerandGadegast设计了一种新的似MPEG比特流,称之为SECMPEG。SECAM既能使用标准加密算法DES和RSA又能实现不同级别的密级。但SECMPEG与标准的MPEG不兼容,需要设计专门的编解码器。
第一级:加密所有的头信息(Headers)
第二级:加密所有的头信息(Headers)和I-Block中的DC和AC系数
第三级:加密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-Zag置乱算法(Zig-ZagPermutationAlgorithm)
Zig-Zag置乱算法的基本思想:使用一个随机的置乱序列来代替Zig-Zag扫描顺序,来将各个8×8块的DCT系数映射成一个1×64矢量。
基本算法由三步组成,步骤如下:
(1)产生一个基数为64的置乱序列表;
(2)把DC系数分成两个较小值的数。假设DC是二进制数d7d6d5d4d3d2d1d0,将它分成两个数d7d6d5d4和d3d2d1d0,它们的范围都在[0,15]。然后将DC系数置为d7d6d5d4,将原最后一个AC系数置为d3d2d1d0。(这种分离处理是基于以下两点:(1)通常DC系数值远大于AC系数值,因此乱序后很容易被识别。分离变小后就难于从AC系数中区分出来;(2)最末一个AC系数作用很小,通常为0,可以用其存放d3d2d1d0,恢复时取0值,不影响图象质量,也不增加数据量。)
(3)用随机置乱序列表将经分离处理的8×8块映射成1×64序列(vector)。
该算法设计者自己指出,上述基本算法对已知明文攻击是脆弱的,因此提供了两种附加方法增强算法的安全性(security):
方法1:将每8个块分成一组,把8个DC系数组合在一起(每系数8位,恰好64位),然后运用DES加密。加密的结果按字节映射回到8个块中,然后(按上面1~3步骤)用分离过程和置乱对每块进行加密。
方法2:产生两张不同的置乱序列表(表1和表2),对每个8×8块抛掷硬币,反面用表1,正面用表2。抛币产生的正反序列和两张表作为密码。
Zig-Zag置乱算法有严重的安全性问题[1]。文献[1]提供两种可以成功破解该算法的方法。Zig-Zag置乱算法速度很快,不影响视频的实时传输。但是经过加密的视频压缩后码流大小将显著增加。因为运用非zig-zag顺序将8×8块映射到1×64的矢量,将会极大减少连续零个数,从而减少压缩率。文献[1]表明视频流大小经加密后增加可达46%(表中最大值)。考虑到MPEG视频流数据量的巨大,这种大小增量是很难容忍的。
4、改变Huffman码表算法
改变Huffman码表的视频加密算法原理是:对于熵编码用Huffman编码的视频编码标准,将通用Huffman码表修改后使用,修改后的特殊Huffman码表作为密钥。非法接收方无此特殊码表,不能正确解码视频(图像)信息。
该算法的安全性取决于保持压缩率不变的前提下,Huffman码表的可变空间(密码空间)。文献[8]做了定量的分析。
改变Huffman码表,一般会降低压缩率。Huffman编码是对数据流中出现频率高的位组合模式对应短码字,出现频率低的位组合模式对应长码字,达到缩短平均码字,压缩数据的目的。Huffman码表通过统计码流中各种位组合模式出现的概率制作。本算法在改变各组合模式对应的Huffman码字时,保持对应码字长度不变,即保持了特定出现概率的组合模式对应的特定码字长度不变,也就保持了原压缩率不变。
该算法完全不增加计算量。适用于使用Huffman编码的各种视频和图像压缩编码标准和算法。其缺点是安全性较差(密钥空间小)。
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帧的某个chunk为如下形式: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算法密级就决定于functionE。因为a2,a4,…,a2n对a1,a3,…,a2n-1虽是简单异或,却是一次一密乱码本(one-timepad)加密密钥,这是公认非常保密的。
该方法不加密头信息结构格式等数据,只加密图像数据本身。将待加密数据分为两半,一半用密码方法(函数E)加密,另一半用简单异或,因此总体减少了计算量,提高了计算速度。前一半的计算速度取决于E。
该方法不影响压缩率。适用于压缩的视频(或图像)编码数据,而且压缩效果越好,加密效果也越好。
6、纯置乱算法(PurePermutationAlgorithm)
基于上一节中的统计结果,我们知MPEG视频的字节流有一个非常低的字节对出现频率。因此,通常的利用数据频率,字节对频率特性等密码分析方法对此没有用(至少很难)。
PurePermutationAlgorithm应运而生:PurePermutationAlgorithm简单的置乱字节流。置乱密码序列的基数是根据密级和应用需求动态可变的。比如我们可以用64个数的置乱序列或一个长的I帧的1/8的置乱序列。
PurePermutationAlgorithm的问题在于它对已知明文攻击非常脆弱。
一旦通过比较密文和已知原始帧数据,获取了随机置乱序列,所有的帧将很容易被破译。为了找出随机置乱序列,我们需要已知随机序列长度倍数大小的明文。然而注意到MPEG数据流的单一性(unicity)和帧大小在同一个数量级上,因此基于Shannon’sTheorem,如果已知一个I帧数据足以破译整个随机序列。