本文包含原理图、PCB、源代码、封装库、中英文PDF等资源
您需要 登录 才可以下载或查看,没有账号?注册会员
×
摘 要: 针对多媒体视频传输的安全性与实时性的要求,提出一种基于H.264感知加密算法的视频加密方案。该方案将视频数据分为VLC(Variable Length Code)和FLC(Fix-Length Code)两类,只选择FLC中对重构图像比较重要的元素进行加密操作。理论分析和仿真结果表明,该加密方案具有安全性高,低成本系统开销的特性。
关键词: 视频加密; H.264编码标准; 感知加密算法; FLC; 安全性
2003年3月发布的H.264是目前最新的视频编码标准。它采用了1/8精度的运动估计、4×4整数变换、CAVLC和CABAC等新技术,使得压缩效率和图像播放质量有了显着提高。与以往标准相比,在相同率失真的条件下,编码效率提高了50%左右。H.264应用范围非常广阔,包括视频会议、可视电话、会议电视等即时通信,以及数字电视广播、数字存储、流媒体等方面。
随着视频应用的日益广泛,视频的安全性变得越来越重要。基于以往的标准,人们研究了许多加密算法:有用传统密码技术进行全部加密的方法,如DES算法、CSC算法和VEA算法,这类算法虽然有较高的安全性并且不改变压缩比,但是计算复杂度很高;有对DCT系数进行加密的方法,如分段置乱算法,这类算法虽然有较低的计算复杂度,但是安全性低于全部加密的算法,压缩比也有所改变;有在熵编码过程中进行加密的方法,如多状态索引方法,这类算法虽然计算复杂度低,对压缩比的影响较小,但在已知明文攻击情况下是不安全的。上述方法各有优缺点,而且大多针对MPEG标准,因此研究适合H.264特点的安全加密技术成为目前研究的热点。
针对现有视频加密算法的不足,本文提出一种基于H.264的可感知加密算法。
1 加密数据元素的分析与选取
对H.264编码宏块语义层进行分析,决定提取帧内预测模式字(Intra Prediction Mode)、运动向量差值(Motion Vector Differ_ence)和残差系数(Residual Coefficient)三类定长语法元素(fix-length code)进行加密操作[1]。
1.1 帧内预测模式字
根据每个宏块所属片组的不同,每一个宏块都有几种编码预测模式。但帧内预测编码是所有片组编码类型中都支持的。对亮度像素块而言,存在有Intra_4×4, Intra_8×8、Intra_16×16三种预测模式。Intra_4×4模式下有9种预测模式,适用于对图像细节部分进行编码,Intra_16×16有4种预测模式,适用于对平坦区域进行图像编码[2]。
采用Intra_4×4的编码模式字进行加密操作。每一个4×4块都是通过上方和左方像素预测而来,如图1所示,a-p为待预测像素,它利用相邻块中已经解码的A-Q像素来进行预测。对每一个4×4块,总共有9种模式供选择[2],其中除了DC模式,另外8种预测模式的方向也在图1中。
Intra_4×4的编码预测模式总共有9种预测模式,至少需要4个bit位来进行编码。在H.264的标准中,利用一个“prev_ Intra_4×4_pred_mode”字段来排除一种预测方式,用另外3个bit位来表示余下的8种预测模式。因此,只对后3个bit位进行加密扰乱,这样的加密过程中,不会影响到其他字段,也不会产生额外的码流。
1.2 运动向量差值
如图2所示,在P帧或B帧中,每个宏块(16×16像素)可以有4种方式来进行分割:16×16、8×16、16×8、8×8。如图2(d)是采用8×8模式,分为4个子宏块(8×8像素)。每个字宏块可以进一步进行分割:8×8、4×8、8×4、4×4。
每一个分区或者子宏块都有一个单独的运动向量MV(Motion Vector),用于引用前面参考帧的对应区域来对当前块进行预测编码。每个预测区的MV都需要相当数目的比特位来进行编码。为了进一步减少比特数,可以利用邻近的MV之间的相关性进行预测编码。后一个MV可由前面已经编码的MV预测得到,只需要对它们的差值MVD(Motion Vector Difference)进行编码。在H.264中,MVD值是采用指数哥伦布(Exp-Golomb)进行编码的,这是一种变长编码[3]。
本文只对MVD的符号位进行加密,对于每一个MVD值,只需要对一个bit位进行加密操作。
1.3 残差系数
在H.264中,残差块系数通过CAVLC和CABAC进行编码[4]。在进行CAVLC编码的过程中,涉及到以下几个语义字段[2]:非零系数数目(Total Coeffs)、拖尾系数数目(TrailingOnes)、非零系数幅值(Level)以及最后一个非零系数前零的个数(TotalZero)和每个非零系数前零的个数(RunBefore)。 经过分析,只有TrailingOnes和Level的符号位是属于定长字段[6],因此提取这两个字段的符号位进行加密操作。如图3所示。
2 算法设计 |