Puzzle加密算法

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

Puzzle加密算法的原理

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

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

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

Puzzle加密算法加密步驟

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

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

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

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

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

(1)分塊

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

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

塊長度由b=2n來確定。真正的塊數(shù)量m能夠由以下的公式來計(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ù)時,上述公式將會使n的值總是偶數(shù)。這個操作對于下一步的攪亂塊序是必需的。上述公式還表明如果pn是一個偶數(shù)或者r不等于零,那么在加密文本T尾部之前的一個或者兩個塊就可能在攪亂塊次序過程中被分離出。

(2)亂序

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

3、編碼和解碼

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

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

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

小知識之加密算法:

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