具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
本发明使用固定密钥组以及利用预先配置的密钥共同加密I帧第一分片的头信息、起始码、加密起始码的密钥以及执行置乱头信息密文、对置乱密文中与起始码密文相同的密文,采取起始码密文防竞争处理等操作,在当前分片为非I帧或者I帧第一分片以外的任一分片时,则使用固定密钥组以及利用上一个已编码分片的相关变量生成的密钥,共同对当前分片的头信息、起始码、加密起始码的密钥执行流加密的操作。进一步地,将加密头信息所得到的密文与该片数据信息明文进行置乱加密,打乱头信息密文在分片中的位置,并对置乱密文中与起始码密文相同的密文,采取起始码密文防竞争处理等操作,正确识别各分片的起始位置。
本发明提供了一种:视频码流加、解密方法、装置及通信、存储终端。
所述视频码流加密方法包括:对分片的头信息进行加密处理,得到头信息密文;
对得到的头信息密文与所述头信息密文所处分片的数据信息明文进行置乱加密,得到置乱密文;
对分片的起始码以及加密下一分片起始码的密钥进行加密处理,分别得到起始码密文和密钥密文;
对置乱密文中与起始码密文相同的密文,采取起始码密文防竞争处理,得到中间密文;
将中间密文、起始码密文以及密钥密文组合成码流密文。
所述视频码流加密装置包括:加密头信息模块,用于对分片的头信息进行加密处理,得到头信息密文;
置乱模块,用于对得到头信息密文与头信息密文所处分片的数据信息明文进行置乱加密,得到置乱密文;
起始码和加密起始码密钥加密模块,用于对分片的起始码以及加密分片起始码的密钥进行加密处理,分别得到起始码密文和密钥密文;
起始码防竞争模块,用于对置乱密文中与起始码密文相同的密文,采取起始码密文防竞争处理,得到中间密文;
组合模块,用于将中间密文、起始码密文以及密钥密文组合成码流密文。
所述通信终端包括:包含上述视频码流加密装置的通信终端。
所述存储终端包括:包含上述视频码流加密装置的存储终端。
所述视频码流解密方法包括:根据分片的起始码密文以及加密分片起始码的密钥,解密以获取起始码明文以及用于加密下一分片起始码的密钥,并获取当前分片的中间密文;
对分片中采取起始码密文防竞争操作的中间密文采用起始码密文逆防竞争操作,解密出置乱密文;
解密分片的置乱密文,获取头信息的密文以及数据信息明文;
解密分片的头信息密文,获取头信息。
所述视频码流解密装置包括:解密起始码密文模块,用于根据分片起始码密文以及解密上一分片时获取的加密该分片起始码的密钥,解密以获取起始码明文以及用于加密下一分片起始码的密钥,并获取当前分片的中间密文;
解密中间密文模块,用于对分片中采取起始码密文防竞争操作的中间密文采用起始码密文逆防竞争操作,解密出置乱密文;
解密置乱密文模块,用于解密分片的置乱密文,获取头信息的密文以及数据信息明文;
解密头信息密文模块,用于解密分片的头信息密文,获取头信息。
所述通信终端包括:包含上述视频码流解密装置的通信终端。
所述存储终端包括:包含上述视频码流解密装置的存储终端。
本发明实施例对包含视频码流结构和视频编码关键技术参数等重要信息的视频码流中头信息、起始码进行逐字或逐字节的加密,并通过置乱头信息密文,打乱头信息密文在视频码流中的位置,有效地隐藏起始码和头信息,保证了视频码流中头信息和起始码的安全;在对非I帧或者I帧第一分片以外的任一分片进行加密时,采用不同的密钥,进一步提高该加密方法的可靠性,提高视频码流格式抵抗破解的能力,防止视频内容被非法篡改,从而保障视频数据在存储和传输过程中的安全性。而对置乱密文中与起始码密文相同的密文,采取起始码密文防竞争处理等操作,则能够正确识别各分片的起始位置。
由于头信息和起始码在视频码流中所占的比例很低,因此对头信息和起始码加密所需的数据量很小,对头信息密文进行置乱、对置乱密文采取起始码防竞争处理所需的数据量也很小,因此本发明除了具有安全性之外,还具有计算低复杂度的特性,在对每一个分片进行视频编码后,就可对编码后的分片进行加密操作,不需为该加密操作额外增加分片进行缓存,降低传输视频码流的延迟。又由于本发明的加密方法没有改变数据信息部分,因此不会影响视频的压缩效率,而加密过程仅增加下一分片起始码加密所需密钥的密文,增加的额外数据量很小,因此也不会对视频的图像质量造成明显影响。此外,由于在每个I帧的第一个分片都使用预设的密钥加密头信息、起始码以及置乱头信息密文,而不是采用与上一个已编码分片的相关变量生成的密钥,因此可以将发生错误的视频码流密文控制在一个I帧间隔周期内,较好地保持了码流的容错性和随机访问的特性。
实施例一:
图2示出了本发明第一实施例提供的一种视频码流加密方法流程。
为了提高视频传输的容错性,通常将每一帧视频编码为一个或多个分片,每个分片由相应的头信息、标识分片开始或者结束的起始码以及该分片的数据信息组成。该视频码流加密方法是对视频编码生成的任意一个分片进行加密的方法,详述如下:
在步骤S201中,对分片的头信息进行加密处理,得到头信息密文;
一个视频流中通常包括I帧、P帧和B帧,其中,非I帧为视频流中除I帧以外的帧,如P帧和B帧。I帧通常是每个画面组(Group of Pictures,GOP)的第一个帧,在一个画面组中只有一个I帧,该类型的帧是一个帧内编码帧,在编码过程中只利用当前帧内的信息进行预测,而与前后帧的信息无关。P帧是前向预测帧,是根据与前一帧图像的比较,去掉与前帧相似的数据而构成的帧。B帧是双向预测帧,是根据与前后一帧图像的比较而得到的帧。P、B帧需要依靠I帧而成立。为确保前面分片的丢失和误码不影响I帧的解码,保持码流的容错性和随机访问的特性,下文中对I帧第一个分片的加密采用的密钥与I帧其余分片以及P、B帧分片的处理方式略有不同。
使用流加密算法加密当前分片f的头信息,即以密钥作为种子产生一个长度与头信息长度相等的加密密钥序列,逐位或逐字节加密当前分片f的头信息,并得到相应的头信息密文。该流加密算法可以为RC4、A5算法,当然,也可以使用其他的流加密算法加密分片的头信息,此处不作限定。
其中,对头信息进行加密处理,得到头信息密文的步骤具体为:使用配置的初始密钥与固定密钥组共同加密I帧第一个分片的头信息;
使用上一个分片的相关变量生成的密钥与固定密钥组共同加密非I帧以及I帧第一个分片以外的任一分片的头信息。
若当前分片f为I帧的第一个分片,采用配置的初始密钥h0与固定密钥组[kh1,kh2,...,khn]共同加密I帧第一个分片的头信息;否则,根据上一个已编码分片f-1的相关变量生成的密钥hf-1与固定密钥组[kh1,kh2,...,khn]共同加密I帧第一分片以外的任一分片f的头信息。即使用密钥组[h0,kh1,kh2,...,khn]加密I帧第一分片的头信息,而使用密钥组[hf-1,kh1,kh2,...,khn]加密I帧第一分片以外的任一分片f的头信息,对分片的头信息加密后就可以得到相应的头信息密文。
若当前分片f为P或B帧的分片,则根据上一个I帧或P帧或B帧已编码分片f-1的相关变量生成的密钥hf-1,与固定密钥组[kh1,kh2,...,khn]共同加密P或B帧当前分片f的头信息,即加密P或B帧分片的头信息与加密I帧第一分片以外的任一分片的头信息的密钥组,都为[hf-1,kh1,kh2,...,khn]。
为了更清楚地说明使用密钥组[hf-1,kh1,kh2,...,khn]加密非I帧以及I帧第一分片以外任一分片头信息的过程,下面举例进行说明:
假设当前分片f的头信息按字节依次用m1,m2,..,mn表示,加密后的头信息密文按字节依次用c1,c2,...,cn表示,由上一个分片f-1的相关变量生成的密钥hf-1=Lf-1%256,其中,Lf-1为上一个分片f-1编码后字节的长度,%表示对长度Lf-1取模,固定密钥组只取2个,为[kh1,kh2]。加密法则g为
ci=g(mi,kh1,kh2)=(mi+kh1×i)%256,其中i=2n-1,n为非0自然数;
ci=g(mi,hf-1,kh1,kh2)=(mi+hf-1+kh2×i)%256,其中i=2n,n为非0自然数。
假定当前分片f的头信息的前4个字节为m1,m2,m3,m4为0,1,6,1,固定密钥组[kh1,kh2]为[5,8],上一分片f-1的长度为485字节,则根据公式hf-1=Lf-1%256,得到hf-1=485%256=229,使用上述加密法则g加密当前分片f的头信息的前4个字节,得到的密文如下:
c1=(0+5×1)%256=5,
c2=(0+229+8×2)%256=246,
c3=(6+5×3)%256=21,
c4=(1+229+8×4)%256=6
即头信息m1,m2,m3,m4为0,1,0,1的密文分别为0x05,0xF6,0x15,0x06。
作为本发明的又一个实施例,加密当前分片f头信息的密钥组[h0,kh1,kh2,...,khn]和[hf-1,kh1,kh2,...,khn]可以直接由一个伪随机序列发生器产生,即密钥hf-1也可以使用其他变量生成,比如预先设定与上一个分片的变量无关的初始变量,再用logistic模型迭代产生,而不一定使用上一个分片的相关变量生成。
在步骤S202中,对得到的头信息密文与该头信息密文所处分片的数据信息明文进行置乱加密,得到置乱密文;
视频码流中头信息包含了视频编码关键技术参数等重要信息,在对码流中头信息加密后,为了进一步保护头信息密文的安全,可以将头信息密文的位置转移至分片内的另一位置,即将头信息密文隐藏在该分片的数据信息明文中。置乱隐藏位置的算法可以预先设定。
其中,对得到头信息密文与该头信息密文所处分片的数据信息明文进行置乱加密,得到置乱密文的步骤具体为:
使用配置的初始密钥与固定密钥组共同置乱I帧第一个分片的头信息密文与所述头信息密文所处分片的数据信息明文;
使用上一个分片的相关变量生成的密钥与固定密钥组共同加密非I帧以及I帧第一个分片以外的任一分片的头信息密文与所述头信息密文所处分片的数据信息明文。
其中,该非I帧为视频流中除I帧以外的帧,如P帧和B帧。本发明实施例中,在置乱I帧第一分片头信息的密文与该头信息密文所处分片的数据信息明文时,采用预先配置的c0以及固定密钥组[kc1,kc2,...,kcn]一起作为置乱头信息密文与该头信息密文所处分片的数据信息明文的密钥,在置乱非I帧以及I帧第一分片以外任一分片f头信息的密文时,则使用f分片的上一分片f-1的相关变量生成的密钥cf-1,与固定密钥组[kc1,kc2,...,kcn]一起作为置乱该f分片头信息密文与该头信息密文所处分片的数据信息明文的密钥。即,使用密钥组[c0,kc1,kc2,...,kcn]置乱I帧第一分片头信息与该头信息密文所处分片的数据信息明文的密文,使用密钥组[cf-1,kc1,kc2,...,kcn]置乱非I帧以及I帧第一分片以外的任一分片f的头信息密文与该头信息密文所处分片的数据信息明文。其中,cf-1可以使用上一个已编码分片f-1的变量,如长度变量产生。
为了更清楚地说明置乱头信息密文与该头信息密文所处分片的数据信息明文的过程,下面举例进行说明:
假设当前分片的数据信息明文长度为n字节,置乱头信息密文与该头信息密文所处分片的数据信息明文的密钥组为[cf-1,kc1,kc2],则将该头信息密文插入到数据信息明文的第d个字节后,其中,d为对式子[n×(kc1+c%(kc1+kc2))÷(kc1+kc2+c%(kc1+kc2))]向下取整所得的数,假设cf-1=20,kc1=3,kc2=5,n=525,则代入式子[n×(kc1+c%(kc1+kc2))÷(kc1+kc2+c%(kc1+kc2))]后,所得结果为306.25,向下取整后,得到d为306,即将该分片的头信息密文插入到第306个字节之后的数据信息明文中,如图3所示,该片的置乱密文中,前306个字节为数据信息明文,接着是头信息密文,然后再是219个数据信息明文。
作为本发明的又一个实施例,可以预先设定一个初始序列,该初始序列作为随机序列生成器的初始变量,生成置乱当前分片头信息密文与该头信息密文所处分片的数据信息明文的密钥组,其中,该初始序列与上一分片的相关变量无关。
在步骤S203中,对分片的起始码以及加密下一分片起始码的密钥进行加密处理,分别得到起始码密文和密钥密文;
起始码标识一个NAL单元的开始或者结束。其中,对分片的起始码以及加密该分片起始码的密钥进行加密处理,分别得到起始码密文和密钥密文的步骤具体为:
使用配置的初始密钥与固定密钥组共同加密I帧第一个分片的起始码;
使用上一个分片的相关变量生成的密钥与固定密钥组共同加密下一个非I帧分片以及I帧第一个分片以外的任一分片的起始码,并用固定密钥组加密使用上一个分片的相关变量生成的密钥。
本发明实施例中,逐位或者逐字节加密起始码的密钥包括2部分:一部分是预先配置的固定密钥组[ks1,ks2,...,ksn];另一部分是根据上一个分片f-1的相关变量生成加密当前分片f起始码的密钥sf-1,即使用密钥组[sf-1,ks1,ks2,...,ksn]加密非I帧以及I帧第一个分片以外任一分片f的起始码,该非I帧为视频中流除I帧以外的帧,如P帧和B帧。如果当前分片为I帧的第一分片,则用密钥组[s0,ks1,ks2,...,ksn]加密I帧第一分片的起始码,其中,s0为预先配置的密钥。
作为本发明的又一个实施例,为了便于解密时从码流中取出加密起始码的密钥sf-1的密文,可以固定密钥sf-1的长度。
为了更清楚地说明加密非I帧以及I帧第一分片以外的任一分片起始码的过程,下面举例进行说明:
假设当前分片f的起始码明文,按字节依次用b1,b2,b3,b4表示,加密后的起始码密文按字节顺序依次用bs1,bs2,bs3,bs4表示,起始码所需的密钥sf-1仍为上一个已编码分片的长度Lf-1与256取模,即,sf-1=Lf-1%256,对当前码流预先设定的起始码加密密钥组为[ks1,ks2],加密运算法则G为:
bsj=G(bj,ks1,ks2)=(bj+ks1×j)%256,其中j=2n-1,n为非0自然数;
bsj=G(bj,sf-1,ks1,ks2)=(bj+sf-1+ks2×j)%256,其中j=2n,n为非0自然数。
对于H.264/AVC标准的四字节起始码0x00000001,即b1=0,b2=0,b3=0,b4=1,固定密钥组[ks1,ks2]取为[3,9],上一分片f-1的长度为500字节,则根据公式sf-1=Lf-1%256,得到sf-1=500%256=244,使用上述加密法则G加密当前分片f的起始码,得到的密文如下:
bs1=(0+3×1)%256=3,
bs2=(0+244+9×2)%256=6,
bs3=(0+3×3)%256=9,
bs4=(1+244+9×4)%256=24
即起始码0x00000001的密文为0x03060918。
作为本发明的又一个实施例,加密当前分片起始码的密钥组[s0,ks1,ks2,...,ksn]和[sf-1,ks1,ks2,...,ksn]可以直接由一个伪随机序列发生器产生,即密钥sf-1也可以使用其他变量生成,比如预先设定与上一个分片变量无关的变量,再将该初始变量作为混合光学双稳模型的初始变量迭代产生,该模型可以取为:
Xn+1=Asin(Xn-XB),其中,A和XB为该系统的系数,在A=4,XB=2.5的情况下,给定初始变量Xn,则迭代产生的Xn+1将进入无序状态,因此可以利用该系统产生的毫无规则的Xn+1序列作为加密分片起始码的密钥组[s0,ks1,ks2,...,ksn]和[sf-1,ks1,ks2,...,ksn]。
为了更好地保护加密分片起始码密钥的安全,可以使用固定密钥组对获取的密钥sf-1进行加密,假定使用固定密钥组[kb1,kb2,...,kbn]逐位或者逐字节地对加密起始码的密钥sf-1加密,并得到相应的密文。
在步骤S204中,对置乱密文中与起始码密文相同的密文,采取起始码密文防竞争处理,得到中间密文;
加密每一个分片起始码可能采用的密钥有2种,一种是加密I帧第一个分片起始码的密钥,另一种是加密非I帧以及I帧第一个分片以外的任一分片起始码的密钥,相应地,将产生2种起始码密文。其中,该非I帧为视频流中除I帧以外的帧,如P帧和B帧。
为了防止将出现在当前分片的置乱密文中,且与下一个分片可能的2种起始码密文相同的密文,错误地识别为下一个分片的起始码密文,并识别为该分片的边界,需要采取起始码密文防竞争操作,即将出现在当前分片的置乱密文中,且与下一个分片的1种或2种起始码密文相同的密文,以另一种形式表示。
为了更清楚地说明采取的起始码密文防竞争操作的过程,下面举例进行说明:
假设分片f+1的一种4字节起始码密文,按字节顺序依次为:y1,y2,y3,y4;另一种为:z1,z2,z3,z4;依次检测当前分片f中置乱密文的每个字节,如果检测到下面4种序列,y1,y2,y3,y4;y1,y2,y3,y5;z1,z2,z3,z4;z1,z2,z3,z5;则将上述4种序列分别转换为,y1,y2,y3,z5,y4;y1,y2,y3,z5,y5;z1,z2,z3,z5,z4;z1,z2,z3,z5,z5;即在序列的倒数第2位插入一个z5,其中z5≠z4且z5≠y4,这样,f分片中就不存在与下一个分片f+1可能的2种起始码密文完全一样的密文。
对出现在当前分片f的置乱密文中且与下一个分片f+1的起始码密文相同的密文,都采取起始码密文防竞争操作,并得到处理后的中间密文。
在本发明实施例中,对出现在当前分片的置乱密文中且与下一个分片的起始码密文相同的密文采取起始码密文防竞争操作,确保当前分片的置乱密文中不存在与下一个分片的起始码密文相同的密文,因此不会错误地将出现与下一个分片的起始码密文相同的密文的位置识别为下一个分片的起始位置。
在步骤S205中,将中间密文、起始码密文以及密钥密文组合成码流密文。
将得到的中间密文、起始码密文以及密钥密文组合起来,并写入码流密文以便传输,如图4所示。图4示出了码流密文中第f-1分片和第f分片的结构,其中,第f-1分片的码流密文包含了该第f-1分片的起始码密文、加密该第f-1分片的起始码所用的密钥sf-1的密文、以及对该第f-1分片的置乱密文采取起始码防竞争处理后得到的中间密文;第f分片的码流密文包含了该第f分片的起始码密文、加密该第f分片的起始码所用的密钥sf的密文、以及对该第f分片的置乱密文采取起始码防竞争处理后得到的中间密文。
本发明实施例中,使用固定密钥组以及利用预先配置的密钥共同加密I帧第一分片的头信息、起始码、加密起始码的密钥以及执行置乱头信息密文、对置乱密文中与起始码密文相同的密文采取起始码密文防竞争处理等操作;在当前分片为非I帧或者I帧第一分片以外的任一分片时,则使用固定密钥组以及利用上一个已编码分片的相关变量生成的密钥,共同加密当前非I帧或者I帧第一分片以外的任一分片的头信息、起始码、加密起始码的密钥以及执行置乱头信息密文、对置乱密文中与起始码密文相同的密文采取起始码密文防竞争处理等操作。其中,固定的加密头信息的密钥组[kh1,kh2,...,khn]、置乱头信息的密钥组[kc1,kc2,...,kcn]、加密起始码的密钥组[ks1,ks2,...,ksn]以及加密起始码密钥的密钥组[kb1,kb2,...,kbn]可以根据实际情况的要求选择相同也可以不同,当固定密钥组都相同时,计算复杂度会降低,而固定密钥组不同时,则可以提高该码流抵抗攻击的能力;同理,预先配置的加密I帧第一个分片头信息的密钥h0、置乱密钥c0、加密起始码的密钥s0也可以相同或者不同,加密非I帧以及I帧第一个以外的任一分片的头信息的密钥hf-1、置乱密钥cf-1以及加密起始码的密钥sf-1,可以利用上一个已编码分片相关的相同变量或者不同变量生成,生成方法可以相同也可以不同,如都利用上一个已编码分片的字节长度采用相同或者不同的方法生成,也可以利用相同或不同的混沌模型生成。对包含视频码流结构和视频编码关键技术参数等重要信息的视频码流中头信息、起始码进行逐字或逐字节的加密,并通过置乱头信息密文,打乱头信息密文在视频码流中的位置,有效地隐藏起始码和头信息,保证了视频码流中头信息和起始码的安全;在对非I帧或者I帧第一分片以外的任一分片进行加密时,采用不同的密钥,进一步提高该加密方法的可靠性,提高视频码流格式抵抗破解的能力,防止视频内容被非法篡改,从而保障视频数据在存储和传输过程中的安全性。而对置乱密文中与起始码密文相同的密文,采取起始码密文防竞争处理等操作,则能够正确识别各分片的起始位置。
由于头信息和起始码在视频码流中所占的比例很低,因此对头信息和起始码加密所需的数据量很小,对头信息密文进行置乱、对置乱密文采取起始码防竞争处理所需的数据量也很小,因此本发明除了具有安全性之外,还具有计算低复杂度的特性,在对每一个分片进行视频编码后,就可对编码后的分片进行加密操作,不需为该加密操作额外增加分片进行缓存,降低传输视频码流的延迟。又由于本发明的加密方法没有改变数据信息部分,因此不会影响视频的压缩效率,而加密过程仅增加下一分片起始码加密所需密钥的密文,增加的额外数据量很小,因此也不会对视频的图像质量造成明显影响。此外,由于在每个I帧的第一个分片都使用预设的密钥加密头信息、起始码以及置乱头信息密文,而不是采用与上一个已编码分片的相关变量生成的密钥,因此可以将发生错误的视频码流密文控制在一个I帧间隔周期内,较好地保持了码流的容错性和随机访问的特性。
实施例二:
图5示出了本发明第二实施例提供的一种视频码流加密装置的结构,为了便于说明,仅示出了与本发明实施例相关的部分。
该视频码流解密装置可以是运行于通信终端或存储终端内的软件单元、硬件单元或者软硬件相结合的单元,也可以作为独立的挂件集成到这些通信终端或存储终端中或者运行于这些通信终端或存储终端的应用系统中。其中:
加密头信息模块501,用于对分片的头信息进行加密处理,得到头信息密文;
置乱模块502,用于对加密头信息模块501得到的头信息的密文与头信息密文所处分片的数据信息明文执行置乱操作,得到置乱密文;
起始码和加密起始码密钥加密模块503,对分片的起始码以及加密下一分片起始码的密钥进行加密处理,分别得到起始码密文和密钥密文;
起始码防竞争模块504,用于对置乱密文中与起始码密文相同的密文,采取起始码密文防竞争处理,得到中间密文;
组合模块505,用于将起始码防竞争模块504的中间密文、起始码和加密起始码密钥加密模块503的起始码密文以及密钥密文组合成码流密文。
本发明实施例中,对包含视频码流结构和视频编码关键技术参数等重要信息的视频码流中头信息、起始码进行逐字或逐字节的加密,并通过置乱头信息密文,打乱头信息密文在视频码流中的位置,有效地隐藏起始码和头信息,保证了视频码流中头信息和起始码的安全;在对非I帧或者I帧第一分片以外的任一分片进行加密时,采用不同的密钥,进一步提高该加密方法的可靠性,提高视频码流格式抵抗破解的能力,防止视频内容被非法篡改,从而保障视频数据在存储和传输过程中的安全性。而对置乱密文中与起始码密文相同的密文,采取起始码密文防竞争处理等操作,则能够正确识别各分片的起始位置。
由于头信息和起始码在视频码流中所占的比例很低,因此对头信息和起始码加密所需的数据量很小,对头信息密文进行置乱、对置乱密文采取起始码防竞争处理所需的数据量也很小,因此本发明除了具有安全性之外,还具有计算低复杂度的特性,在对每一个分片进行视频编码后,就可对编码后的分片进行加密操作,不需为该加密操作额外增加分片进行缓存,降低传输视频码流的延迟。又由于本发明的加密方法没有改变数据信息部分,因此不会影响视频的压缩效率,而加密过程仅增加下一分片起始码加密所需密钥的密文,增加的额外数据量很小,因此也不会对视频的图像质量造成明显影响。此外,由于在每个I帧的第一个分片都使用预设的密钥加密头信息、起始码以及置乱头信息密文,而不是采用与上一个已编码分片的相关变量生成的密钥,因此可以将发生错误的视频码流密文控制在一个I帧间隔周期内,较好地保持了码流的容错性和随机访问的特性。
作为本发明的另一个实施例,该视频码流加密装置还包括生成密钥模块506,用于生成相同或不同的用于加密分片的头信息、起始码、对起始码加密所用密钥以及置乱头信息密文的密钥。
作为本发明的另一个实施例,加密头信息模块501还包括:加密第一分片头信息单元5011,用于使用配置的初始密钥与固定密钥组共同加密I帧第一个分片的头信息;加密非第一分片头信息单元5012,用于使用上一个分片的相关变量生成的密钥与固定密钥组共同加密非I帧以及I帧第一个分片以外的任一分片的头信息。
作为本发明的另一个实施例,置乱模块502还包括:置乱第一分片头信息密文单元5021,用于使用配置的初始密钥与固定密钥组共同置乱I帧第一个分片的头信息密文与所述头信息密文所处分片的数据信息明文;置乱非第一分片头信息密文单元5022,用于使用上一个分片的相关变量生成的密钥与固定密钥组共同加密非I帧以及I帧第一个分片以外的任一分片的头信息密文与所述头信息密文所处分片的数据信息明文。
作为本发明的另一个实施例,起始码和加密起始码密钥加密模块503还包括:加密第一分片起始码单元5031,用于使用配置的初始密钥与固定密钥组共同加密I帧第一个分片的起始码;加密非第一分片起始码以及密钥单元5032,用于使用上一个分片的相关变量生成的密钥与固定密钥组共同加密下一个非I帧分片以及I帧第一个分片以外的任一分片的起始码,并用固定密钥组加密该使用上一个分片的相关变量生成的密钥。
实施例三:
图6示出了本发明第三实施例提供的一种视频码流解密方法流程,详述如下:
在步骤S601中,根据分片的起始码密文以及解密上一分片时获取的加密该分片起始码的密钥,解密以获取起始码明文以及用于加密下一分片起始码的密钥,并获取该分片的中间密文;
由于一个视频流中各分片都采用相同的起始码,因此该步骤在解码端视频流起始码未知情况下执行,例如解码端接收到的第一个I帧的第一个分片时需要执行该步骤获取起始码。此后就将该起始码保存在解码端,便于后续分片解密时使用。在已知起始码情况下,可以不执行该步骤,或者执行该步骤作为验证码流正确性的一种手段。
本发明实施例中,使用密钥组[s0,ks1,ks2,...,ksn]加密I帧第一个分片的起始码,使用密钥组[sf-1,ks1,ks2,...,ksn]加密非I帧以及I帧第一个分片以外的任一f分片的起始码,其中,该非I帧为视频流中除I帧以外的帧,如P帧和B帧。因此,在获取分片的起始码明文之前,首先应判断起始码密文是否为I帧第一个分片的起始码密文,若当前分片f为I帧第一个分片,则采用密钥组[s0,ks1,ks2,...,ksn]对相应的I帧第一个分片的起始码密文执行逆加密运算,解密出相应的起始码明文;否则,采用在f-1分片解密时获得的密钥组[sf-1,ks1,ks2,...,ksn]对f分片的起始码密文执行逆加密运算,解密出相应的起始码明文。在本发明实施例中,使用固定密钥组[kb1,kb2,...,kbn]对sf进行加密,因此,使用同样的固定密钥组[kb1,kb2,...,kbn]对sf的密文执行解密操作,就可以得到加密下一分片f+1起始码的密钥sf。即,从已识别的当前分片f的起始码密文后,根据密钥密文的固定长度取出sf-1的密文,解密出f分片起始码加密时采用的密钥sf,所得到的sf与固定密钥组[ks1,ks2,...,ksn]一起,即为加密下一分片f+1起始码的密钥。
为了更清楚地说明解密起始码明文的过程,下面举例说明:
假设使用加密运算法则G、固定密钥组[ks1,ks2]以及sf-1=Lf-1%256加密分片f的起始码,其中,Lf-1为上一个分片f-1编码后字节的长度。加密运算法则G为:
bsj=G(bj,ks1,ks2)=(bj+ks1×j)%256,其中j=2n-1,n为非0自然数;
bsj=G(bj,sf-1,ks1,ks2)=(bj+sf-1+ks2×j)%256,其中j=2n,n为非0自然数。
固定密钥组取为[3,9],字节长度Lf-1取为500,对于H.264/AVC标准的四字节起始码密文0x03060918,即bs1=3,bs2=6,bs3=9,bs4=24,假设上一分片f-1编码后的字节长度为500,则根据公式,得到sf-1=500%256=244,将起始码密文、固定密钥组[3,9]、sf-1等代入上述加密运算法则G中,解密当前分片f的起始码,得到的起始码明文如下:b1=0,b2=0,b3=0,b4=1,即所求起始码为0x00000001。
根据得到的分片f+1起始码加密的密钥,按照与加密起始码过程相同的方法就能生成下一个分片f+1的2种起始码密文,一种为I帧第一个分片的起始码密文,一种为非I帧以及I帧第一个分片以外的任一分片的起始码密文,再从密钥密文之后开始查找这两种起始码密文,确定当前分片f的结束位置,取出当前分片f的中间密文,并确定下一个分片f+1是否为I帧的第一个分片。
在步骤S602中,对分片中采取起始码密文防竞争操作的中间密文采用起始码密文逆防竞争操作,解密出置乱密文;
由于在加密时对置乱密文做了起始码密文防竞争处理,因此解密时还需对中间密文进行起始码密文防竞争逆处理,以得到置乱密文。若要从分片中采取起始码密文防竞争操作的中间密文中解密出置乱密文,需要对2种起始码密文做防竞争逆操作。
为了更清楚地说明解密采用了起始码逆防竞争操作的中间密文,获取包含头信息密文与头信息密文所处分片的数据信息明文的置乱密文的过程,下面举例进行说明:
假设在分片f+1的一种4字节起始码密文,按字节顺序依次为:y1,y2,y3,y4;另一种为:z1,z2,z3,z4;对置乱密文进行防竞争处理,将置乱密文中出现的4种序列,y1,y2,y3,y4;y1,y2,y3,z5;z1,z2,z3,z4;z1,z2,z3,z5分别转换为,y1,y2,y3,z5,y4;y1,y2,y3,z5,z5;z1,z2,z3,z5,z4;z1,z2,z3,z5,z5;即在序列的倒数第2位插入一个z5。在解密中间密文的过程中,如果检测到下面2种序列:y1,y2,y3,z5;z1,z2,z3,z5;则丢弃z5,恢复包含头信息密文与头信息密文所处分片的数据信息明文的置乱密文。
在步骤S603中,解密分片的置乱密文,获取头信息的密文以及数据信息明文;
根据置乱头信息密文与头信息密文所处分片的数据信息明文所用的密钥以及置乱密文,解密出头信息的密文以及头信息密文所处分片的数据信息明文。
在本发明实施例中,若当前分片为I帧第一分片,置乱该分片头信息的密文与该片数据信息明文所用的密钥为[c0,kc1,kc2,...,kcn],其中,c0为预先配置的一个密钥;否则,置乱当前分片f的头信息密文与该片数据信息明文所用的密钥为[cf-1,kc1,kc2,...,kcn],其中cf-1为根据分片f-1的相关变量计算得到。
根据分片是否为I帧第一分片,采取相应的置乱密钥组,从置乱密文中解密出头信息密文以及头信息密文所处分片的数据信息明文,该步骤与实施例一中置乱加密的步骤相似,为置乱加密的逆运算,此处不再赘述。
在步骤S604中,解密分片的头信息密文,获取头信息。
根据从置乱密文中得到的头信息密文以及加密该头信息的密钥,解密出相应的头信息。
本发明实施例中,若当前分片f为I帧第一分片,则加密该分片的头信息使用的密钥组是[h0,kh1,kh2,...,khn];否则,加密该分片的头信息使用的密钥组是[hf-1,kh1,kh2,...,khn],因此,在解密头信息时,如果头信息的密文为I帧第一分片头信息的密文,则使用密钥组[h0,kh1,kh2,...,khn]解密;如果头信息的密文是非I帧以及I帧第一分片以外任一分片头信息的密文,则使用密钥组[hf-1,kh1,kh2,...,khn]解密。其中h0、[kh1,kh2,...,khn]为预先配置的密钥,而hf-1则是根据上一个分片f-1的相关变量得到,比如根据字节长度计算得到。
本发明实施例中,根据对当前分片的头信息、起始码、加密起始码的密钥进行加密所用的密钥,以及置乱头信息密文与该头信息密文所处分片的数据信息明文所用的密钥,从相应的密文中解密出头信息、起始码、加密起始码的密钥以及数据信息明文。由于仅需对数据较少的头信息密文、起始码密文、中间密文、置乱密文以及密钥密文执行解密操作,而不用对分片中数据较多的数据信息执行解密操作,因而大大降低了计算复杂度。
实施例四:
图7示出了本发明第四实施例提供的视频码流解密装置结构,为了便于说明,仅示出了与本发明实施例相关的部分。
该视频码流解密装置可以是运行于通信终端或存储终端内的软件单元、硬件单元或者软硬件相结合的单元,也可以作为独立的挂件集成到这些通信终端或存储终端中或者运行于这些通信终端或存储终端的应用系统中。其中:
解密起始码密文模块701,用于根据分片的起始码密文以及解密上一分片时获取的加密该分片起始码的密钥,解密以获取起始码明文以及用于加密下一分片起始码的密钥,并获取该分片的中间密文;
解密中间密文模块702,用于对分片中采取起始码密文防竞争操作的中间密文采用起始码密文逆防竞争操作,解密出置乱密文;
解密置乱密文模块703,用于解密分片的置乱密文,获取头信息的密文以及数据信息明文;
解密头信息密文模块704,用于解密分片的头信息密文,获取头信息。
本发明实施例中,解密起始码密文模块701、解密中间密文模块702,根据从码流密文中取出的起始码密文、密钥密文以及中间密文分别解密出相应的起始码密钥、起始码明文以及置乱密文,再通过解密置乱密文模块703解密该置乱密文,解密出头信息密文、数据信息明文,最后由解密头信息密文模块704解密出头信息。由于解密的过程中,计算的复杂度都较低,因此可以快速地从密文中解密出相应的明文信息。
本发明实施例,使用固定密钥组以及利用预先配置的密钥共同加密I帧第一分片的头信息、起始码、加密起始码的密钥以及执行置乱头信息密文、对置乱密文中与起始码密文相同的密文采取起始码密文防竞争处理等操作;在当前分片为非I帧或者I帧第一分片以外的任一分片时,则使用固定密钥组以及利用上一个已编码分片的相关变量生成的密钥,共同加密当前非I帧或者I帧第一分片以外的任一分片的头信息、起始码、加密起始码的密钥以及执行置乱头信息密文、对置乱密文中与起始码密文相同的密文采取起始码密文防竞争处理等操作。其中,固定的加密头信息的密钥组[kh1,kh2,...,khn]、置乱头信息的密钥组[kc1,kc2,...,kcn]、加密起始码的密钥组[ks1,ks2,...,ksn]以及加密起始码密钥的密钥组[kb1,kb2,...,kbn]可以根据实际情况的要求选择相同也可以不同,当固定密钥组都相同时,计算复杂度会降低,而固定密钥组不同时,则可以提高该码流抵抗攻击的能力;同理,预先配置的加密I帧第一个分片头信息的密钥h0、置乱密钥c0、加密起始码的密钥s0也可以相同或者不同,加密非I帧以及I帧第一个以外的任一分片的头信息的密钥hf-1、置乱密钥cf-1以及加密起始码的密钥sf-1,可以利用上一个已编码分片相关的相同变量或者不同变量生成,生成方法可以相同也可以不同,如都利用上一个已编码分片的字节长度采用相同或者不同的方法生成,也可以利用相同或不同的混沌模型生成。对包含视频码流结构和视频编码关键技术参数等重要信息的视频码流中头信息、起始码进行逐字或逐字节的加密,并通过置乱头信息密文,打乱头信息密文在视频码流中的位置,有效地隐藏起始码和头信息,保证了视频码流中头信息和起始码的安全;在对非I帧或者I帧第一分片以外的任一分片进行加密时,采用不同的密钥,进一步提高该加密方法的可靠性,提高视频码流格式抵抗破解的能力,防止视频内容被非法篡改,从而保障视频数据在存储和传输过程中的安全性。而对置乱密文中与起始码密文相同的密文,采取起始码密文防竞争处理等操作,则能够正确识别各分片的起始位置。
由于头信息和起始码在视频码流中所占的比例很低,因此对头信息和起始码加密所需的数据量很小,对头信息密文进行置乱、对置乱密文采取起始码防竞争处理所需的数据量也很小,因此本发明除了具有安全性之外,还具有计算低复杂度的特性,在对每一个分片进行视频编码后,就可对编码后的分片进行加密操作,不需为该加密操作额外增加分片进行缓存,降低传输视频码流的延迟。又由于本发明的加密方法没有改变数据信息部分,因此不会影响视频的压缩效率,而加密过程仅增加下一分片起始码加密所需密钥的密文,增加的额外数据量很小,因此也不会对视频的图像质量造成明显影响。此外,由于在每个I帧的第一个分片都使用预设的密钥加密头信息、起始码以及置乱头信息密文,而不是采用与上一个已编码分片的相关变量生成的密钥,因此可以将发生错误的视频码流密文控制在一个I帧间隔周期内,较好地保持了码流的容错性和随机访问的特性。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。