Puzzle加密算法

隨著互聯(lián)網(wǎng)的發(fā)展,網(wǎng)絡(luò)多媒體的應(yīng)用正在變得越來(lái)越受歡迎。為保證利潤(rùn)或機(jī)密,必須對(duì)視頻進(jìn)行加密,常規(guī)的加密算法只能針對(duì)文本數(shù)據(jù),所以很需要一個(gè)加密視頻數(shù)據(jù)的特殊算法。那么我們今天就給大家介紹一個(gè)加密視頻數(shù)據(jù)的特殊算法——Puzzle加密算法,算法隨時(shí)都能夠整合到已存在的視頻系統(tǒng),而不需要理會(huì)它們的具體實(shí)現(xiàn)。

Puzzle加密算法的原理

Puzzle加密算法的靈感得益于兒童游戲Puzzle。在Puzzle游戲里,會(huì)把一個(gè)完整的圖片分解成很多無(wú)序的小片,以使小孩不能把完整的圖片辨認(rèn)出來(lái)。

當(dāng)他們進(jìn)行這個(gè)游戲的時(shí)候,必須花費(fèi)很多的時(shí)間來(lái)把碎片重新組合成原始的圖片。一些聰明的小孩根據(jù)不同片斷的正面,甚至在沒(méi)有整個(gè)原始圖片的情況下就能夠重構(gòu)。雖然我們不能直接地把Puzzle游戲應(yīng)用到加密一副圖片,但是,如果我們稍微修改一下游戲規(guī)則,小孩將不能重構(gòu)原始的圖片。修改如下:

孩子們只能看到圖片的正面,重構(gòu)時(shí)沒(méi)有任何關(guān)于整幅圖片的線索。這樣,如果n是塊的數(shù)量,那么就會(huì)由n!種可能的重構(gòu)。n不一定是一個(gè)很大的數(shù)量,假設(shè)一幅圖片被分解成64塊,那么可能的假設(shè)將會(huì)達(dá)到64?。?.27×1089。這么大的假設(shè)重構(gòu)數(shù)量,孩子們不可能會(huì)重構(gòu)出原始的圖片。Puzzle加密算法由此而來(lái)。

Puzzle加密算法加密步驟

根據(jù)修改的Puzzle游戲規(guī)則,Puzzle視頻加密算法包括了以下兩個(gè)步驟:①分離每幀壓縮視頻數(shù)據(jù);②攪亂分離視頻數(shù)據(jù)的次序。步驟①相應(yīng)于Puzzle游戲中把圖片翻至正面。步驟②即是把視頻數(shù)據(jù)分解成很多塊,這些塊被隨機(jī)地洗牌,類似于攪亂塊的正面。

1、分離每幀壓縮視頻數(shù)據(jù)

分離壓縮視頻數(shù)據(jù)是用一個(gè)小型加密算法來(lái)實(shí)現(xiàn)的。這種算法的基本思想是只有視頻流的一小部分會(huì)用流密碼來(lái)加密。另外一部分則不加以處理。過(guò)程如下:

給定一個(gè)壓縮視頻數(shù)據(jù)V(V1V2...VL)的L字節(jié)長(zhǎng)的幀(不包含幀的頭部)。頭部之后開(kāi)始的1(1<L)字節(jié)(V1V2...VL)是獨(dú)立的,它會(huì)用由加密鍵k如SEAL或者是AES-CTR的流密鑰來(lái)產(chǎn)生1個(gè)字節(jié)鍵流S(S1S2...SL)。視頻數(shù)據(jù)的開(kāi)始的1個(gè)字節(jié)會(huì)被作為關(guān)鍵流,獨(dú)立于的第二個(gè)1字節(jié)。然后第二個(gè)1字節(jié)也會(huì)以相同的方式獨(dú)立于第三個(gè)字節(jié)。該過(guò)程會(huì)一直重復(fù)下去直到幀的尾部。輸出是L字節(jié)臨時(shí)加密文本T(T1T2...TL)。

2、攪亂分離視頻數(shù)據(jù)的次序

(1)分塊

對(duì)長(zhǎng)度為L(zhǎng)的加密文本T,把它分解成具有相同長(zhǎng)度b的n塊,是一個(gè)典型的因式分解的問(wèn)題,如L=n×b。假設(shè)兩個(gè)變量(n,n)是兩個(gè)常量,那么這個(gè)問(wèn)題是很容易解決的。但不能通過(guò)這種方法來(lái)解決問(wèn)題。如果先固定了b的值,那么可能在某些幀里b的值會(huì)很大,而某些幀的會(huì)很小,因?yàn)槊總€(gè)幀的長(zhǎng)度L都是不同的。在另外一方面,n的值很大的時(shí)候,在交換塊的時(shí)候?qū)?huì)引起一個(gè)很大的計(jì)算量。如果n的值太小,加密方案會(huì)很容易被破解。

為了解決這個(gè)問(wèn)題,可以對(duì)n和n施加一些限制。塊長(zhǎng)度n應(yīng)該為b=2m,其中m是一個(gè)整數(shù)。而n的值只能在mb和2mb之間變化,mb是一個(gè)預(yù)定義的常量。它表明了臨時(shí)加密文本T應(yīng)該至少被分成mb塊。使用這些限制,m的值將會(huì)只是由下列的公式來(lái)唯一地確定:mb≤L/2m<2mb

塊長(zhǎng)度由b=2n來(lái)確定。真正的塊數(shù)量m能夠由以下的公式來(lái)計(jì)算:m=pn 如果pn為偶數(shù),r=o _ m=pn-2 如果pn為偶數(shù),r≠0 ,m=pn-1_如果pn為奇數(shù)

當(dāng)pn是L/b的商,而r是L/b的余數(shù)時(shí),上述公式將會(huì)使n的值總是偶數(shù)。這個(gè)操作對(duì)于下一步的攪亂塊序是必需的。上述公式還表明如果pn是一個(gè)偶數(shù)或者r不等于零,那么在加密文本T尾部之前的一個(gè)或者兩個(gè)塊就可能在攪亂塊次序過(guò)程中被分離出。

(2)亂序

塊亂序的基本思想是加密文本T的n個(gè)塊被分成兩個(gè)相等的部分:頂部和底部。每個(gè)部分都包括了n/2個(gè)塊。兩個(gè)部分都可以根據(jù)排列P=P1P2..PL/2相互修改。該排列是從隨機(jī)的順序中繼承過(guò)來(lái)的,它用來(lái)防止攻擊者猜測(cè)出塊的原始位置。為了使該算法更加有效,可以重用了在分離步驟中為了產(chǎn)生排列而生成的鍵流S=S1S2...SL。每個(gè)視頻幀的鍵流S都是不同的,所以不同幀的排列也是截然不同的。當(dāng)排列已經(jīng)是可用的時(shí)候,可以通過(guò)把ih個(gè)塊與臨時(shí)加密文本T的Pith個(gè)塊交換,從臨時(shí)加密文本T=T1T2...TL里產(chǎn)生出加密文本C=C1C2...CL。一個(gè)很小的例子被用來(lái)解釋攪亂塊次序的過(guò)程。假定臨時(shí)加密文本T被分解成256個(gè)塊B1B2B256.從鍵流S繼承過(guò)來(lái)的排列,產(chǎn)生的結(jié)果顯示在下圖中。

3、編碼和解碼

編碼和解碼過(guò)程上述Puzzle加密算法的部分編碼過(guò)程總結(jié)如下。

加密文本能夠通過(guò)相反的解碼操作,在接收端重構(gòu)原始的壓縮視頻序列。

Puzzle加密算法實(shí)現(xiàn)了很快的加密速度,并保持在一個(gè)適當(dāng)?shù)陌踩缴希@樣就可以適應(yīng)現(xiàn)在大部分的多媒體應(yīng)用需求,特別是高分辨率視頻流。

小知識(shí)之加密算法:

數(shù)據(jù)加密的基本過(guò)程就是對(duì)原來(lái)為明文的文件或數(shù)據(jù)按某種算法進(jìn)行處理,使其成為不可讀的一段代碼,通常稱為“密文”,使其只能在輸入相應(yīng)的密鑰之后才能顯示出本來(lái)內(nèi)容,通過(guò)這樣的途徑來(lái)達(dá)到保護(hù)數(shù)據(jù)不被非法人竊取、閱讀的目的。 該過(guò)程的逆過(guò)程為解密,即將該編碼信息轉(zhuǎn)化為其原來(lái)數(shù)據(jù)的過(guò)程。