視頻加密算法之幀異或
視頻加密算法通常需要根據(jù)應(yīng)用場合的需要在安全性、壓縮比、實時性、數(shù)據(jù)格式不變性、數(shù)據(jù)可操作性等性能要求中做出折中考慮。為此我們提出了一種針對H.264標(biāo)準(zhǔn)的新型視頻加密算法,彌補(bǔ)了選擇性加密壓縮比變化及熵編碼加密編碼器不通用的問題。
一、幀異或視頻加密算法
1、加密算法思想
算法的基本思路是將密鑰決定的另一幀圖像異或在原始圖像幀上,對視覺重疊圖像進(jìn)行精心處理使其不明顯降低H.264視頻編碼效率,在保持視頻流能夠正常解碼的同時使非授權(quán)的圖像理解變得不可行。
以圖1為例說明這一加密原理。圖像幀(a)是重疊圖像,它雖然并不是近似噪聲圖像,但在安全要求并不十分高的網(wǎng)絡(luò)視頻應(yīng)用場合,這樣令人煩躁的圖像已經(jīng)達(dá)到了足夠的加密效果。事實上它是由圖像(b)和(b)反轉(zhuǎn)180°并向左下平移后的圖像幀(c)疊加產(chǎn)生的。遵循密碼協(xié)議的設(shè)計要求,假設(shè)異或平移操作是公開的,但圖像(c)需要合法密鑰才能獲得,則合法用戶可以容易地將圖像幀(a)與(c)=次異或還原原始圖像幀(b),非法用戶則只能看到可理解性極低的疊加圖像(a)。從密碼破譯角度看,不知道(c)的情況下從(a)恢復(fù)出(b)在計算上是困難的,并且必須包含人工的視覺理解過程。
幀異或視頻加密算法在整個視頻應(yīng)用的過程如圖2所示。在圖像異或過程中如何確保壓縮率不變并決定密鑰嵌入位置是本文的研究重點。
2、算法過程
首先以偽代碼形式說明幀異或視頻加密算法的異或(加密)過程。
幀異或視頻加密算法
輸入:待加密原始圖像序列Ori_Seq[N];由密鑰種子忍生成的流密鑰Key_Str[41;滑動窗口大小為2w。
輸出:加密后的圖像序列Cry_Seq[N]
寄存器說明:i,j,t分別用于標(biāo)記當(dāng)前操作的原始圖像幀,異或圖像幀和流密鑰比特位;
1)從原始圖像序列中取出下一組以I幀開始的待加密原始圖像幀組(I幀后均為時空相關(guān)性較強(qiáng)的P、B幀),記為Ori_Seq[x]至Ori_Seq[y],i-x,轉(zhuǎn)步驟2);
2)根據(jù)滑動窗口和流密鑰確定一個以I幀開始的時空相關(guān)性較強(qiáng)的異或圖像幀組,具體操作為:根據(jù)Key_Str[i]至Key_Str[升w-1]的wbit流密鑰定位Ori_Seq[x]之前的擴(kuò)個已解碼圖像幀(滑動窗口)中的一個異或圖像幀,:找到距其最近的I幀Xor_Seq[m]及其后的P、B幀,記為Xor_Seq[m]至Xor_Seq[n],t+ -w,轉(zhuǎn)步驟3);
3)若i<y,按序取出原始圖像幀組中的一幀圖像Ori_Seq[i]:,根據(jù)Key_Str[t]至Key_ Str[t.+[logz]一1]的lbit流密鑰定位Xor_Seq[m]至Xor_Seq[n]中的一個異或圖像幀Xor_Seq[j],轉(zhuǎn)步驟4)將Ori_Seq[i]與XorSeqD]異或;否則轉(zhuǎn)步驟1; 4)若()ri_Seq[i]采用幀內(nèi)預(yù)測,首先檢查Ori_Seq[i]和Xor_Seq[j]是否均適用細(xì)節(jié)集中模型(人臉或細(xì)粒度近景一粗粒度背景的典型圖像),若是,轉(zhuǎn)步驟5),否則轉(zhuǎn)步驟6);若Ori_Seq[j]采用幀間預(yù)測,轉(zhuǎn)步驟7); 5)若均為細(xì)節(jié)集中模型,采用宏觀“套取”策略進(jìn)行異或,使用矩形套索將Xor_Seq[j]的細(xì)節(jié)整體“摳出”“套取”在Ori_Seq[i]的細(xì)節(jié)部分,并向左上各作10像素位平移。(以防細(xì)節(jié)完全相同情況出現(xiàn)異或無效),將二者異或以產(chǎn)生加密圖像Cry_Seq[i]在相應(yīng)位置宏塊的像素值。當(dāng)Xor_Seq[j]的細(xì)節(jié)存在多個時,按右下一左上逆序選用以增加圖像不可理解度;Xor_Seq[j]細(xì)節(jié)矩形框大小超過Ori_Seq{[i]細(xì)節(jié)尺寸時,只截取左上相應(yīng)大小矩形框;Xor_Seq[j]細(xì)節(jié)矩形框不足以覆蓋Ori_ Seq[i]細(xì)節(jié)時,將Xor_Seq[j]細(xì)節(jié)塊循環(huán)賦值填充達(dá)到相應(yīng)大??;Xor_Seq[j]細(xì)節(jié)數(shù)量多于Ori_Seq[i]時,拋棄剩余細(xì)節(jié);Xor_S eqDl細(xì)節(jié)數(shù)量少于Ori_Seq[i]時,循環(huán)使用Xor_Seq[j]細(xì)節(jié)。細(xì)節(jié)“套取”工作完畢后,加密圖像Cry_Seq[i']剩余位置宏塊的像素通過直接異或Ori_Seq[ii]和Xor_Seq[j]的對應(yīng)位置獲得,若Xor_Seq[j]在相應(yīng)位置為4×4細(xì)粒度塊,則不作異或處理(避免增加圖像復(fù)雜度):,i+十,轉(zhuǎn)步驟3); 6)只要Ori_Seq[i]或Xor_Seq[j]中的一個由于細(xì)節(jié)過于分散不便宏觀“摳出”,即使用微觀套取方式。按右下一左上逆序選擇Xor_Seq[j]中的4×4細(xì)粒度宏塊,按左上c一右下順序異或在Ori_Seq[i]的4×4宏塊上,若Xor_Seq [j]4×4宏塊過多,丟棄剩余部分,若塊數(shù)較少,則循環(huán)使用,生成Cry_Seq[i],i++.轉(zhuǎn)步驟3); 7)幀間預(yù)測一律采用微觀“套取”。將Xor_Seq[j]視為一個材料池,其中的宏塊按照運動補(bǔ)償分割尺寸的不同分為如下五組:A.I6×16、B 16×8或8>< 16、C.8×8、D.8 X4或4×8、E.4'7x4;Ori_Seq[i]中的運動補(bǔ)償塊同樣按照此分割劃人五個類中,各組仍按右下一左上的逆序分別異或,即Ori_SeqCi]中16×16的運動補(bǔ)償分割只與Xor_Seq j]中的16 X16分割異或,Xor_Seq[j]各組材料過多丟棄,不足則循環(huán)使用,對于B組和D組中的分割塊,異或時若出現(xiàn)二者尺寸顛倒的情況,將Xor_Seq[j]相應(yīng)分割塊順序翻轉(zhuǎn)900后使用,生成Cry_Seq[z],i++,轉(zhuǎn)步驟3)。
幀異或視頻加密算法的去異或(解密)過程與加密過程相反且類似,是一個由加密圖像序列C ry_Seq[N]和異或圖像序列Xor_Seq[n]再次異或恢復(fù)原始圖像序列Ori_ Seq[N]的過程,不再展開。
二、加密算法實現(xiàn)細(xì)節(jié)
1、套取策略和分類方式
“套取”是對矩形圖像塊或宏塊異或在原始圖像幀上這一工作的形象說明。其工作的原則是:異或圖像塊(宏塊)只是用于降低原始圖像可理解度的“材料”,其可理解性不需保持,因而隱藏其宏觀圖像的“套取”規(guī)則更合適;同時,“套取”規(guī)則應(yīng)當(dāng)保證疊加圖像的編碼性能相比原圖像序列沒有明顯下降,即保證壓縮率不變。
幀異或視頻加密算法的“套取”策略和宏塊分類方式都是公開確定的,這滿足安全密碼協(xié)議設(shè)計的要求,同時也是保證方案正常運行的必要條件,只有解碼器端做出與編碼器端相同的“套取”判斷并將塊或宏塊以相同方式分類,才能保證去異或操作為異或操作的逆操作。
2、異或圖像塊使用方式
異或圖像的相應(yīng)塊(宏塊)是循環(huán)使用的,并且無論在宏觀“套取’’或微觀“套取”過程中,都是按從右下到左上逆序取用的。
這是因為在宏觀套取中,不能要求異或圖像的細(xì)節(jié)尺寸大小和數(shù)量與原始圖像非常近似,因而對異或圖像的每個細(xì)節(jié),應(yīng)當(dāng)按原始圖像細(xì)節(jié)的尺寸大小進(jìn)行裁剪或拼接(以對原始圖像細(xì)節(jié)達(dá)到最小覆蓋為標(biāo)準(zhǔn)),逆序使用異或細(xì)節(jié)塊能進(jìn)一步降低視覺可理解性;同時,如果異或細(xì)節(jié)比需要的更多,則將多余細(xì)節(jié)塊丟棄,若異或細(xì)節(jié)塊過少(不足以將全部原始圖像細(xì)節(jié)覆蓋),則循環(huán)使用。
微觀套取中只涉及相應(yīng)尺寸宏塊材料的“數(shù)量問題”,當(dāng)異或宏塊數(shù)量不夠時同樣需循環(huán)使用。需要注意的是在幀間預(yù)測模式中,由于尺寸分割方式更多,須將這些“材料”按五種不同“規(guī)格”分類,分別逆序循環(huán)使用。
3、壓縮率保證
一個I幀及其后的一組P、B幀序列表示一組時空相關(guān)性較強(qiáng)的視頻序列,而P、B幀的使用可以有效降低碼率。不難想象,用于異或的相應(yīng)異或幀組也必須是以一個I幀打頭的一組P、B幀序列,中間的P、B幀序列在疊加后具體幀間編碼使用情況可以根據(jù)疊加幀的相關(guān)性重新確定。
1)幀間預(yù)測
通過異或疊加在原始幀上的圖像同樣是有意義的連續(xù)視頻運動圖像,因而運動殘差、運動矢量描述和MV預(yù)測在減小疊加圖像碼率方面的處理就仍然是有效的。幀異或視頻加密方案只需保證原本使用幀間預(yù)測的幀仍適用幀間預(yù)測,但具體預(yù)測方式可能發(fā)生變化。
H. 264的幀間預(yù)測較幀內(nèi)情況稍為復(fù)雜,主要原因是其樹狀結(jié)構(gòu)的運動補(bǔ)償分割,只能采取微觀套取方式:將異或圖像視為一個材料池,運動補(bǔ)償按照分割尺寸的不同分為如下五組:A 16×16、B.16×8和8X16、C 8×8、D.8×4和4×8、E.4×4;而后將原始圖像中的運動補(bǔ)償塊同樣按照此分割劃入五個類中分別異或,即原圖像中16×16的運動補(bǔ)償分割只與異或幀中的16×16分割異或;對于B組和D組中的分割塊,取用時若出現(xiàn)尺寸顛倒的情況,將異或幀相應(yīng)分割塊順序翻轉(zhuǎn)90°后使用。
2)幀內(nèi)預(yù)測
對于幀內(nèi)預(yù)測而言,其亮度預(yù)測類型分4×4和16×16兩種。疊加圖像和原始圖像的相同位置宏塊可以選擇相同尺寸分割中不同的模式進(jìn)行預(yù)測,這種選擇僅改變編碼數(shù)值但不改變碼率。幀內(nèi)編碼的圖像幀通常是細(xì)節(jié)較多較復(fù)雜的獨立圖像,圖像的不規(guī)則疊加會導(dǎo)致均勻漸變色塊大小的成倍減少,這對碼率的影響是比較明顯的。在宏觀套取中并不能保證異或圖像中細(xì)節(jié)位置總是與原圖像中的細(xì)節(jié)位置接近,故此時應(yīng)將異或圖像細(xì)節(jié)平移“套取”在原始圖像細(xì)節(jié)附近。
小知識之H.264
H.264,同時也是MPEG-4第十部分,是由ITU-T視頻編碼專家組(VCEG)和ISO/IEC動態(tài)圖像專家組(MPEG)聯(lián)合組成的聯(lián)合視頻組(JVT,Joint Video Team)提出的高度壓縮數(shù)字視頻編解碼器標(biāo)準(zhǔn)。這個標(biāo)準(zhǔn)通常被稱之為H.264/AVC(或者AVC/H.264或者H.264/MPEG-4 AVC或MPEG-4/H.264 AVC)而明確的說明它兩方面的開發(fā)者。






