一种H.264编码后加密的嵌入式视频混沌保密通信方法与流程

文档序号:13263302阅读:252来源:国知局
技术领域本发明涉及到多媒体通信中的视频保密通信技术,具体而言,涉及到一种H.264编码后加密的嵌入式视频混沌保密通信方法。

背景技术:
在视频混沌保密通信中,目前人们广泛使用的混沌加密方式有以下两种:第一种方式是先加密然后再进行H.264或HEVC编码压缩,这种加密方式的特点是技术层面上的处理较为方便,但存在以下几方面的不足之处:1、混沌加密之后打乱了原始视频的相关性,导致H.264的编码压缩效率大大降低,编码后的视频数据量很大,无论是采用H.264硬件编码或软件编码,加密后的视频通过以太网传输的速率不够高;RGB格式图像数据量远比H.264压缩之后的I帧或者P帧的数据量大,比如640×240大小的RGB格式图像数据量为MB量级,H.264压缩之后为KB量级。加密的数据量大,加密的耗时长;2、编码效率低,H.264编码器依赖于图像空间相关性进行压缩得到I帧,依赖帧间的时间相关性压缩得到P帧。但加密后的RGB图像像素时空相关性被打乱,严重影响编码器效率,体现为编码压缩率大大降低;3、传输效率低。H.264压缩效率低导致H.264视频信号数据量大,在网络发送带宽一定情况下,发送的帧率下降;4、只能采用位置置乱的加密方式,不能对视频像素的大小进行加密操作,否则因H.264中的量化原因,会导致接收端即便是密钥匹配的条件下也无法正确地解密出原始视频,而仅是位置置乱的加密方式,统计特性不好,安全性能不高。第二种方式是基于H.264软件编码压缩的选择性混沌加密,具体指的是对H.264编码过程中的部分变量进行流密码加密,包括加密帧内预测模式,帧间运动矢量残差,量化参数残差,DCT系数符号,残差数据的DC分量。该方案只针对编码过程少部分变量进行加密,加密数据量小,不破坏编码格式,因而优点是保持H.264视频格式兼容性,同时编码器的压缩效率和编码时间影响不大。但其缺点是:1、加密效果差。加密图像为马赛克状而非雪花点状,人眼能偶尔辨识视频中的部分场景;2、运行效率低。H.264存在软件编解码和硬件编解码两种形态,软件编解码通过编译开源代码得到,由CPU负责编解码功能;硬件编解码通过专用电路的形态固定在芯片中,由硬件电路负责编解码功能。软件执行速度远远小于硬件执行速度,因而运行效率低。选择性加密方案只能基于H.264编解码开源代码移植加密算法,而不能基于硬件编解码电路移植加密算法,因而该方案既无法利用芯片中的硬件资源,而且编码运行效率低。3、设计难度大。H.264编码过程复杂,变量多,分支多,要准确加密对应的变量并且准确解密,难度相当大;4、目前手机等移动终端等设备主要采用的是H.264硬件编码压缩,而在H.264硬件编码的基础上完成选择性混沌加密,从技术实现层面上看,目前仍然具有较大的难度。为了从根本上改善和提高混沌加密视频信号通过以太网的传输速率,本发明拟提出一种H.264编码后加密的嵌入式视频混沌保密通信方法,在ARMLinux嵌入式实时视频通信系统上,对H.264编码压缩之后的视频数据流进行混沌自同步流密码加密和混沌映射位置置乱加密两重加密,结合了流密码加密和置乱加密以及H.264视频流的特点。对H.264视频流加密具有以下难点:1、H.264压缩之后的每一帧视频流数据大小多变,难以用一组置乱参数进行置乱加密,却又不能使用无数多组置乱参数加密;2、每一帧H.264视频流大小必须符合以3个字节为单位延展为一个规整的m×n阶矩阵的要求,才符合置乱加密的条件,而H.264压缩得到的视频流长度无法保证符合这个要求;3、流密码加密在自同步过程会破坏H.264视频流部分数据,因H.264语法严密,甚至一个bit的数据损坏都会引起解码失败而中断视频正常通信。在ARMLinux嵌入式实时视频通信系统上,对H.264编码压缩之后的视频数据流进行混沌自同步流密码加密和混沌猫映射位置置乱加密两重加密,必须解决的关键问题是:1、仅以有限个置乱参数,以及对应置乱参数的有限个内存块,解决H.264视频流大小多变的问题;2、构造每一帧H.264视频流为特定长度,以符合置乱加密的m×n阶矩阵的条件;3、为H.264视频流构造额外的保护数据防止有效数据被破坏。从目前公开的专利文献来看,视频混沌保密通信系统主要存在几种情况:基于matlab的算法研究,基于Windows操作系统的PC平台上的实验验证,基于FPGA芯片实现混沌加密模块融合到更大的保密通信系统中,以及基于ARM运行Linux操作系统的嵌入式方式实现视频保密通信。其中基于嵌入式ARMLinux实现混沌保密通信系统的方法常见为先加密后编码,而非先编码后加密。先加密后编码存在安全性和效率上的不足。

技术实现要素:
为了从根本上提高混沌加密视频信号通过以太网的传输速率,本发明采用了一种H.264编码后加密的嵌入式视频混沌保密通信方法,该方法设有混沌流密码加密和混沌位置置乱加密这两重加密,两重加密均在H.264编码压缩之后,不破坏原始视频的相关性,提高了编码的效率,减少了数据的冗余度,加密系统实时性和安全性高。本发明采用如下技术方案来实现:H.264编码后加密的嵌入式视频混沌保密通信方法,包括以下步骤:S1、在发送端,对视频数据进行H.264硬件编码、混沌流密码加密、像素位置的混沌置乱加密、网络发送、广域网传输;S2、在接收端,通过网络接收加密视频数据,完成像素位置的混沌反置乱解密和混沌流密码解密,在密钥匹配的条件下,实现H.264硬件解码,在密钥失配条件下,H.264硬件解码失败后停止发送端与接收端之间的通信。优选地,步骤S1所述的混沌流密码加密为:在视频数据前面增加全0的保护字节。优选地,步骤S1所述的混沌置乱加密为:根据H.264硬件编码之后输出的视频数据的I帧和P帧的大小,分别采用三种不同的内存容量分配方式,采用补0的方法将视频数据的字节数扩展为3×m×n个,满足混沌置乱和反置乱所要求的字节数。其中,所述三种不同的内存容量根据视频数据的最大I帧和最小P帧来确定。优选地,步骤S1在对视频数据进行H.264硬件编码之前还包括以下步骤:摄像头摄取视频、视频图像的JPEG解码、RGB格式到YUV420格式的转换;步骤S2在实现H.264硬件解码之后还包括以下步骤:将YUV420格式转换为RGB格式、解密后的视频显示。由上可知,本发明技术方案中,设计的两重加密是在H.264编码压缩之后加密,而非在其之前加密。在发送端,采用四核四线程的运行方式,按照先进行H.264硬件编码、然后进行混沌加密的顺序,在接收端,采用二核二线程的运行方式,按照先进行混沌解密、然后进行H.264硬件解码的顺序,不破坏原始视频的相关性,提高H.264编码效率,降低编码时间和编码后的视频数据量,减少冗余度,增大唯一解距离,提高整个系统的实时性和安全性。与现有技术相比,本发明具有如下优点及有益效果:1、提高加密安全性;从增加唯一解距离分析第1个优点:根据公式U=H/R,其中U表示唯一解距离,H表示密钥熵值,R表示数据冗余度。当H一定的条件下,R越小,U越大,则保密性更好。因为H.264视频信号数据量比RGB格式数据量小,当H.264视频流经过编码压缩以后,冗余度R比原始视频数据大大减小,所以编码后加密比编码前加密安全性更高。此外,H.264压缩视频信号具有严格的语法,其中1个bit的数据损坏,会导致解码器解码失败而退出应用程序,导致视频通信的终止,因而解密过程如果不能严格精确解密,则无法正常显示视频。2、提高加密效率、运行效率;从H.264编码前后数据量大小来分析第2点优点:编码前一帧图像大小为MB量级,而编码后的H.264视频流为KB量级甚至更小,可知编码后数据比编码前数据更小,加密速度更快。因为加密的压缩视频信号数据量达到了最小,加密操作耗时少;H.264编解码器采用硬件电路形态实现,执行速度快;一帧压缩视频信号的数据量小,网络发送的帧率高。3、保持原有的视频编码效率。从图像时空相关性来分析第3点优点:H.264编码之后加密的方案完全没影响到编码操作,保持了H.264的编码效率,而在H.264编码之前加密则打乱了时空的相关性,严重降低H.264的编码效率。附图说明图1为本发明一种H.264编码后加密的嵌入式视频混沌保密通信方法硬件实现总框图;图2为图1中的发送端两级混沌加密实现框图;图3为图1中的接收端两级混沌解密实现框图;图4为图1中的多核多线程工作原理框图;图5为图1中的多核多线程同步机制工作原理框图;图6为图1中的发送端四核四线程实现框图;图7为图1中的接收端两核两线程实现框图;具体实施方式下面将结合实施例及说明书附图,对本发明作进一步详细的描述,但本发明的实施方式不限于此。实施例参见图1,本发明方法包括以下步骤:摄像头摄取视频、视频图像的JPEG解码、RGB格式到YUV420格式的转换、H.264硬件编码、混沌流密码加密、像素位置的混沌置乱加密、网络发送、广域网传输、网络接收、像素位置的混沌反置乱解密、混沌流密码解密、密钥匹配条件下H.264硬件的成功解码、YUV420格式到RGB格式的转换、解密后的视频显示、密钥失配条件下H.264硬件解码失败后停止发送端与接收端之间的通信,无法解密出原始视频信号。1、在发送端,采用四核四线程的运行方式,按照先进行H.264硬件编码、然后进行混沌加密的顺序。发送端的具体操作步骤为:摄像头摄取视频,将视频图像的JPEG解码得到RGB格式,从RGB格式到YUV420格式的转换,完成H.264硬件编码,然后进行混沌流密码加密和像素位置的混沌置乱加密,加密视频通过网络发送和广域网传输。如图6,发送端四个线程循环执行以下流程:线程1循环采集JPEG图像,线程2读取JPEG图像后解压为RGB图像;线程3读取RGB图像显示在LCD显示器上;线程4读取RGB图像之后转换格式,做H.264编码压缩,对H.264视频流进行流密码加密,位置置乱加密,发送两重加密数据,两级混沌加密的流程如图2所示。第一级加密为混沌流密码加密,在H.264视频数据前面增加20个全0的保护字节,在发送端和接收端的初始值不同但密钥匹配的条件下,实现发送端混沌流密码对视频数据的加密与接收端混沌流密码对视频数据的解密两者之间的精确同步,在接收端恢复混沌加密前的H.264正确格式,完成H.264的解码并正确解密出原始视频信号;在发送端和接收端的初始值不同并且密钥失配的条件下,无法实现发送端混沌流密码对视频数据的加密与接收端混沌流密码对视频数据的解密两者之间的精确同步,接收端无法恢复混沌加密前的H.264正确格式,不能完成H.264的解码,接收端无法解密出原始视频信号;在H.264视频数据前面增加20个全0的保护字节,以确保通过混沌流密码的加密和解密之后,能够正确地还原出H.264的全部正确格式,由于H.264语法十分严密,其中任何一个bit的数据损坏都会引起H.264的解码失败,从而中断发送端与接收端之间的正常通信。第二级加密为视频数据的混沌位置置乱,根据H.264输出的I帧和P帧的大小,分别采用内存容量为24300字节、10800字节、2400字节三种不同大小的内存分配方式;针对H.264压缩之后的每一帧视频数据大小不同,采用补0的方法扩展字节数,将字节数扩展为3×m×n个,满足混沌位置置乱和反置乱所要求的字节数;根据H.264输出的I帧和P帧的大小采用三种不同的内存容量可显著减小混沌加密和解密的时间,实现混沌加密视频信号经以太网传输的速率达到每秒27帧。2、在接收端,采用二核二线程的运行方式,按先混沌解密后进行H.264硬件解码的顺序。当接收端和发送端的初始值不同但密钥匹配时,在接收端完成H.264的解码过程并正确解密出原始视频信号;当接收端和发送端的初始值不同并且密钥失配时,接收端H.264的解码过程无法完成,发出解码失败信号并中断发送端与接收端之间的正常通信,接收端无法解密出原视频信号。接收端两级混沌解密的流程如图3所示。接收端的具体操作步骤为:网络接收加密视频,完成像素位置的混沌反置乱解密和混沌流密码解密,在密钥匹配的条件下,实现H.264硬件的成功解码,将YUV420格式转换为RGB格式、解密后的视频显示,在密钥失配条件下H.264硬件解码失败后停止发送端与接收端之间的通信,无法解密出原始视频信号。如图7,接收端的两个线程循环执行以下流程:线程1循环接收表征H.264视频流大小的变量值和两重加密的H.264视频流数据;进行位置置乱解密,流密码解密,H.264解码解压,转换格式为RGB格式;线程2读取RGB格式数据显示到LCD显示器上。ARMLinux嵌入式实时视频通信系统分为发送端开发板和接收端开发板,本发明选用两个具有四个ARM核和H.264编解码硬件加速引擎芯片的嵌入式开发板,作为发送端和接收端,两端分别通过VGA接口连接LCD显示器,两端以及PC通过以太网接口RJ45和路由器的LAN接口连接,分配好IP地址选择为:192.168.1.100、192.168.1.101和192.168.1.102形成局域网连接。发送端连接USB摄像头。发送端与接收端以以太网方式接入路由,以TCP/IP协议传输两重加密后的视频流数据。建立软件开发环境。PC机安装VMware10虚拟机,安装Ubuntu12.04PC版Linux操作系统,安装开发板厂家提供的ARM-Linux-gcc编译器用于交叉编译。两端开发板运行厂家提供的Linux操作系统,建立开发板与PC的NFS连接,PC上的应用程序所在目录挂接到开发板上的/mnt目录下。建立PC与两端开发板的SSH连接,PC能够通过以太网远程登录操控开发板。确定流密码加密的内存大小:流密码加密的内存块用于存放压缩视频信号数据(I帧和P帧),要求略大于I帧即可,故内存的设计为30KB。H.264编码器输出的每一帧H.264视频流数据以字节Byte为单位,从第一个30KB内存块的0x0015地址(第21Byte地址)开始存入,0x0000~0x0014内存空间和0xyyyy~0x7800未填满的内存空间按默认值补充0x00字节,其中0x0015~0xyyyy为H.264视频流有效数据空间,0xyyyy地址随着H.264视频流有效数据大小而改变。30K内存预留最前面20保护字节是为了防止H.264压缩视频数据在自同步过程中被破坏,导致解码器无法正确解码H.264压缩视频信号。方程10次迭代能恢复同步,因而预留20个保护字节用于自同步过程的加密和解密,从第21个字节之后的H.264压缩视频信号数据能保证处于同步状态下进行加密和解密,因而保证数据不被破坏。流密码加密与解密的过程如下:发送端流密码的加密方程为X(k+1)=a11X(k)+a12Y(k)+a13Z(k)Y(k+1)=a21O(k)+a22Y(k)+a23Z(k)Z(k+1)=a31O(k)+a32Y(k)+a33Z(k)+3×108sin[2×105×O(k)]]]>式中a11a12a13a21a22a23a31a32a33=0.205-0.5950.265-0.265-0.1250.5950.33-0.330.47]]>其中X,Y,Z为系统状态变量,aij(i,j=1,2,3)为密钥参数,变量X取整数按mod(256)得到一个字节的变量x,方程迭代一次,x更新一次。从30KB流密码加密内存1的0x0000地址取一个字节与x按位异或,运算结果O存入30KB流密码加密内存2的0x0000中,并反馈回方程中参与下一次迭代;接着取30KB流密码加密内存1的0x0001地址的一个字节与更新后的x同样按位异或,运算结果O存入30KB流密码加密内存2的0x0001中,按地址依次循环操作直至0xyyyy地址计算完成,0xyyyy之后的数据不需要参与异或运算。接收端流密码解密方程的结构与参数大小和加密方程相同,解密是加密的逆过程,与加密类似,变量X取整数按mod(256)得到一个字节的变量x,方程迭代一次,x更新一次。从30KB流密码解密内存1的0x0000地址取一个字节与x按位异或,运算结果O存入30KB流密码解密内存2的0x0000中,并反馈回方程中参与下一次迭代;接着取30KB流密码解密内存1的0x0001地址的一个字节与更新后的x同样按位异或,运算结果O存入30KB流密码解密内存2的0x0001中,按地址顺序依次循环以上的操作过程直到30KB的内存地址0xyyyy完成操作为止。最后30KB内存空间0x0000~0xyyyy保存了原始的视频数据,其中0x0000~0x0014均保存一个字节00值,0x0015~0xyyyy保存原始未加密的H.264视频流数据。最后,去掉H.264数据之前20个字节和去掉H.264数据之后的所有字节,余下的则是所有的H.264压缩数据,送去H.264解码。根据最大I帧和最小P帧来确定置乱和反置乱内存1~3的大小:根据实时视频编码方式的不同,H.264压缩视频信号分为IDR帧、I帧和P帧。IDR帧编码本质和I帧相同,通过帧内预测消除图像空间冗余度;P帧通过帧间预测消除图像时间上的冗余度。I帧压缩率远比P帧小,因而I帧一定比P帧大。编码输出模式既可以设置为每一个I帧之后跟若干个P帧,也可以设置为自行判断场景变化激烈程度决定输出I帧或者P帧。本发明采用前者,设置为每1个I帧之后跟9个P帧的输出模式。将H.264压缩视频数据保存为H264文件,借助Elecardstreameyetools软件分析H264文件,能验证设置的输出结果。通过实验找出在VGA视频格式(图像长宽640×480)下的最大I帧和最小P帧。影响压缩视频数据大小因素,除了编码器的参数设置,还包括拍摄场景光线的明暗,场景复杂度,物体运动的激烈程度。在VGA格式和编码器默认设置条件下,调暗光线,丰富场景内容,加剧物体运动,能增大每一帧压缩视频数据的数据量。相反,调亮光线,减少场景细节,保持物体静止,能减小每一帧压缩视频的数据量。应用程序每调用一次H.264编码器编码一帧图像的API函数,得到一个函数返回值,表征一帧压缩视频信号数据的大小。通过改变实验条件并且比较返回值,能够获得最大的I帧和最小P帧的大小。置乱加密内存用于存储流密码加密以后的有效数据,并对这些有效数据进行置乱加密。内存大小必须符合首要条件:整个内存空间刚好能够以3个字节为单位延展为m×n阶矩阵。在首要条件下,根据最大I帧和P帧,选择置乱加密内存的大小和数量。为了使存储最大I帧时不溢出,最大的置乱加密内存块必须比I帧还大,因为未填满的置乱加密内存块空间全部补0x00,0x00为冗余数据,为了减少冗余数据,在比I帧大和能够延展为m×n阶矩阵的条件下,尽量减小内存空间。以相同的原则继续设计置乱加密内存块用于存储P帧。内存块的数量越多,层次越细化,内存块与P帧的大小匹配的越好,冗余的数据减小,置乱加密处理效率提高,但每一帧P帧存放到大小最匹配的内存块的判断次数增加,影响运行性能;相反,内存块数量越少,层次越粗放,内存块与P帧的匹配越差,冗余数据增加,置乱加密处理效率降低,但每一帧P帧存放到大小最匹配的内存块的判断次数减小,运行性能提升。内存块的数量根据具体情况选取,本发明选取3个内存块,最大的内存块用于存放I帧,在符合首要条件下比I帧略大,为24300字节,其他两个内存块按梯度递减,用于存放P帧,分别为10800字节和4800字节。混沌置乱与反置乱:根据图像大小,开辟用于置乱加密和反置乱解密的3个内存,在图2和图3中分别为置乱内存1~3,反置乱内存1~3。要求3个内存大小按梯度递减,并且要求内存空间以3个字节为单位,能延展为规整的m×n阶矩阵。利用位置置乱和反置乱的混沌映射方程:X=(a11i+a12j)%mY=(a21i+a22j)%n]]>计算出3组置乱加密参数a11,a12,a21,a22。对于字节数为24300的置乱和反置乱内存1,以3字节为单位延展为90×90阶矩阵,加密参数为89,75,70,59;对于字节数为10800的置乱和反置乱内存2,同样以3字节为单位延展为60×60阶矩阵,加密参数为48,35,37,27;对于字节数为4800的置乱和反置乱内存3,同样以3字节为单位延展为40×40阶矩阵,加密参数为24,11,37,17。在发送端,30KB的流密码加密内存2从0x0000~0xyyyy空间存储经过流密码加密的有效加密数据,有效加密数据与置乱内存1、置乱内存2、置乱内存3比较大小,有效加密数据大小如果在24300字节~10800字节范围内,通过软件控制使切换开关K1和K2接1,将数据存入置乱内存1中;如果在10800字节~4800字节范围内,通过软件控制使切换开关K1和K2接2,将数据存入置乱内存2中;如果在4800字节~0字节范围内,通过软件控制使切换开关K1和K2接3,将数据存入置乱内存3中,置乱内存中的剩余空间均按默认为零值,最后将两重加密的数据通过网络发送和通过以太网传输。在接收端,以同样的方式完成像素位置反置乱的解密,不再详述。多核多线程及其同步机制的原理:多核多线程本质是将应用程序分割为多个相对独立的小任务,其中每一个小任务分配给一个核心处理器处理,将原本由一个核心处理器串行执行的应用程序,设计为由多个核心处理器并行处理多个小任务,以此来提升系统的执行速度,线程的执行原理框图如图4所示。图5中的线程同步机制的具体实施方式分为以下四步:(1)线程2读取完一帧JPEG图像之后,调用pthread_cond_wait函数,解锁内存,并且等待线程1的条件变量;(2)处于阻塞状态的线程1恢复就绪,调用pthread_mutex_lock函数加锁内存,写JPEG图像到内存中;(3)线程1写完JPEG数据到内存之后,调用pthread_cond_broadcast函数发送条件变量,并且调用pthread_mutex_unlock函数解锁内存;(4)线程2接收条件变量之后自动加锁内存,读取内存中的JPEG图像。读完数据之后,再次进入第一步,调用pthread_cond_wait函数,解锁内存,如此循环实现线程之间的数据同步操作。发送端四核四线程和接收端二核二线程的具体实施过程:Linux系统下多线程的作用主要是将串行处理的任务进行并行化以提高系统处理任务的速。为了使系统显示帧率高达25fps(FramePerSecond),每一个线程运行时间在40ms以内。发送端的系统处理过程包括的任务有:JPEG图像采集,JPEG图像解压成RGB格式,RGB格式图像用于LCD显示,RGB图像转换为NV12格式,NV12格式图像用于H.264编码,编码完成后进行混沌流密码和位置置乱双重加密,然后通过TCP发送。本发明采用四个线程来处理上述的任务内容,每一个线程绑定开发板上的一个CPU核心,根据测量得到的各个部分的运行时间,将各个部分划分进四个线程中。线程1包括JPEG图像的采集;线程2包括将JPEG图像解压成RGB格式;线程3包括RGB原始图像的显示;线程4包括RGB格式图像转换为NV12格式,进行H.264编码,加密和TCP发送。而线程之间的数据共享则通过Linux操作系统提供的互斥锁和条件变量来控制。互斥锁1和条件变量1用于线程1和线程2之间JPEG图像数据的共享;互斥锁2和条件变量2用于线程2和线程3之间RGB图像数据的共享;互斥锁3和条件变量3用于线程2和线程4之间RGB图像数据的共享。接收端的系统处理过程包括的任务有:TCP数据接收,进行位置反置乱和混沌流密码解密,H.264解码得到NV12格式图像,NV12图像转化为RGB格式,RGB图像用于LCD显示。本发明采用两个线程处理上述的任务内容,每一个线程绑定开发板上的一个CPU核心,根据测量得到的各个部分的运行时间,将各个部分划分进两个线程中。线程1包括TCP数据接收,解密,H.264解码和NV12图像到RGB图像的转换;线程2包括RGB图像的显示。采用互斥锁1和条件变量1来控制线程1和线程2之间RGB图像数据的共享。上述的任务划分保证了每一个线程的平均运行时间最短,互相等待的时间最短,从而可以使得视频显示可以到达比较高的帧率。以上所述是本发明的优选实施方式而已,当然不能以此来限定本发明之权利要求的保护范围,应当指出,对于本领域的普通技术人员来说,对本发明的技术方案进行修改或者等同替换,都不脱离本发明权利要求的保护范围。
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1