随着互联网的发展,网络多媒体的应用正在变得越来越受欢迎。为保证利润或机密,必须对视频进行加密,常规的加密算法只能针对文本数据,所以很需要一个加密视频数据的特殊算法。那么我们今天就给大家介绍一个加密视频数据的特殊算法——Puzzle加密算法,算法随时都能够整合到已存在的视频系统,而不需要理会它们的具体实现。

Puzzle加密算法的原理

Puzzle加密算法的灵感得益于儿童游戏Puzzle。在Puzzle游戏里,会把一个完整的图片分解成很多无序的小片,以使小孩不能把完整的图片辨认出来。

当他们进行这个游戏的时候,必须花费很多的时间来把碎片重新组合成原始的图片。一些聪明的小孩根据不同片断的正面,甚至在没有整个原始图片的情况下就能够重构。虽然我们不能直接地把Puzzle游戏应用到加密一副图片,但是,如果我们稍微修改一下游戏规则,小孩将不能重构原始的图片。修改如下:

孩子们只能看到图片的正面,重构时没有任何关于整幅图片的线索。这样,如果n是块的数量,那么就会由n!种可能的重构。n不一定是一个很大的数量,假设一幅图片被分解成64块,那么可能的假设将会达到64!=1.27×1089。这么大的假设重构数量,孩子们不可能会重构出原始的图片。Puzzle加密算法由此而来。

Puzzle加密算法加密步骤

根据修改的Puzzle游戏规则,Puzzle视频加密算法包括了以下两个步骤:①分离每帧压缩视频数据;②搅乱分离视频数据的次序。步骤①相应于Puzzle游戏中把图片翻至正面。步骤②即是把视频数据分解成很多块,这些块被随机地洗牌,类似于搅乱块的正面。

1、分离每帧压缩视频数据

分离压缩视频数据是用一个小型加密算法来实现的。这种算法的基本思想是只有视频流的一小部分会用流密码来加密。另外一部分则不加以处理。过程如下:

给定一个压缩视频数据V(V1V2...VL)的L字节长的帧(不包含帧的头部)。头部之后开始的1(1<L)字节(V1V2...VL)是独立的,它会用由加密键k如SEAL或者是AES-CTR的流密钥来产生1个字节键流S(S1S2...SL)。视频数据的开始的1个字节会被作为关键流,独立于的第二个1字节。然后第二个1字节也会以相同的方式独立于第三个字节。该过程会一直重复下去直到帧的尾部。输出是L字节临时加密文本T(T1T2...TL)。

2、搅乱分离视频数据的次序

(1)分块

对长度为L的加密文本T,把它分解成具有相同长度b的n块,是一个典型的因式分解的问题,如L=n×b。假设两个变量(n,n)是两个常量,那么这个问题是很容易解决的。但不能通过这种方法来解决问题。如果先固定了b的值,那么可能在某些帧里b的值会很大,而某些帧的会很小,因为每个帧的长度L都是不同的。在另外一方面,n的值很大的时候,在交换块的时候将会引起一个很大的计算量。如果n的值太小,加密方案会很容易被破解。

为了解决这个问题,可以对n和n施加一些限制。块长度n应该为b=2m,其中m是一个整数。而n的值只能在mb和2mb之间变化,mb是一个预定义的常量。它表明了临时加密文本T应该至少被分成mb块。使用这些限制,m的值将会只是由下列的公式来唯一地确定:mb≤L/2m<2mb

块长度由b=2n来确定。真正的块数量m能够由以下的公式来计算:m=pn 如果pn为偶数,r=o _ m=pn-2 如果pn为偶数,r≠0 ,m=pn-1_如果pn为奇数

当pn是L/b的商,而r是L/b的余数时,上述公式将会使n的值总是偶数。这个操作对于下一步的搅乱块序是必需的。上述公式还表明如果pn是一个偶数或者r不等于零,那么在加密文本T尾部之前的一个或者两个块就可能在搅乱块次序过程中被分离出。

(2)乱序

块乱序的基本思想是加密文本T的n个块被分成两个相等的部分:顶部和底部。每个部分都包括了n/2个块。两个部分都可以根据排列P=P1P2..PL/2相互修改。该排列是从随机的顺序中继承过来的,它用来防止攻击者猜测出块的原始位置。为了使该算法更加有效,可以重用了在分离步骤中为了产生排列而生成的键流S=S1S2...SL。每个视频帧的键流S都是不同的,所以不同帧的排列也是截然不同的。当排列已经是可用的时候,可以通过把ih个块与临时加密文本T的Pith个块交换,从临时加密文本T=T1T2...TL里产生出加密文本C=C1C2...CL。一个很小的例子被用来解释搅乱块次序的过程。假定临时加密文本T被分解成256个块B1B2B256.从键流S继承过来的排列,产生的结果显示在下图中。

3、编码和解码

编码和解码过程上述Puzzle加密算法的部分编码过程总结如下。

加密文本能够通过相反的解码操作,在接收端重构原始的压缩视频序列。

Puzzle加密算法实现了很快的加密速度,并保持在一个适当的安全水平上,这样就可以适应现在大部分的多媒体应用需求,特别是高分辨率视频流。

小知识之加密算法:

数据加密的基本过程就是对原来为明文的文件或数据按某种算法进行处理,使其成为不可读的一段代码,通常称为“密文”,使其只能在输入相应的密钥之后才能显示出本来内容,通过这样的途径来达到保护数据不被非法人窃取、阅读的目的。 该过程的逆过程为解密,即将该编码信息转化为其原来数据的过程。