淺析幀異或視頻加密算法的過程
基于H.264的幀異或視頻加密算法,滿足了視頻實(shí)時(shí)通信時(shí)的加密要求,幀異或加密算法的基本思路是將密鑰決定的另一幀圖像異或在原始圖像幀上,對(duì)視覺重疊圖像進(jìn)行精心處理使其不明顯降低H.264視頻編碼效率,在保持視頻流能夠正常解碼的同時(shí)使非授權(quán)的圖像理解變得不可行。
幀異或視頻加密算法過程
輸入:待加密原始圖像序列Ori_Seq[N];由密鑰種子k生成的流密鑰Key_Str[t];滑動(dòng)窗口大小為2w
輸出:加密后的圖像序列Cry_Seq[N]
寄存器說明:i,j,t分別用于標(biāo)記當(dāng)前操作的原始圖像幀,異或圖像幀和流密鑰比特位;
1)從原始圖像序列中取出下一組以I幀開始的待加密原始圖像幀組,記為Ori_Seq[x]至Ori_Seq[y],i=x,轉(zhuǎn)步驟2);
2)根據(jù)滑動(dòng)窗口和流密鑰確定一個(gè)以I幀開始的時(shí)空相關(guān)性較強(qiáng)的異或圖像幀組,具體操作為:
根據(jù)Key_Str[t]至Key_Str[t+w-1]的wbit流密鑰定位Ori_Seq[x]之前的2w個(gè)已解碼圖像幀中的一個(gè)異或圖像幀,找到距其最近的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+log2m-n]的[log2m-n ]bit流密鑰定位Xor_Seq[m]至Xor_Seq[n]中的一個(gè)異或圖像幀Xor_Seq[j],轉(zhuǎn)步驟4)將Ori_Seq[i]與Xor_Seq[j]異或;否則轉(zhuǎn)步驟1;
4)若Ori_Seq[i]采用幀內(nèi)預(yù)測(cè),首先檢查Ori_Seq[i]和Xor_Seq[j]是否均適用細(xì)節(jié)集中模型,若是,轉(zhuǎn)步驟5),否則轉(zhuǎn)步驟6);若Ori_Seq[i]采用幀間預(yù)測(cè),轉(zhuǎn)步驟7);
5)若均為細(xì)節(jié)集中模型,采用宏觀“套取”策略進(jìn)行異或,使用矩形套索將Xor_Seq[j]的細(xì)節(jié)整體“摳出”“套取”在Ori_Seq[i]的細(xì)節(jié)部分,并向左上各作10像素位平移,將二者異或以產(chǎn)生加密圖像Cry_Seq[i]在相應(yīng)位置宏塊的像素值。
6)只要Ori_Seq[i]或Xor_Seq[j]中的一個(gè)由于細(xì)節(jié)過于分散不便宏觀“摳出”,即使用微觀套取方式。按右下—左上逆序選擇Xor_Seq[j]中的4×4細(xì)粒度宏塊,按左上—右下順序異或在Ori_Seq[i]的4×4宏塊上,若Xor_Seq[j]4×4宏塊過多,丟棄剩余部分,若塊數(shù)較少,則循環(huán)使用,生成Cry_Seq[i],i++,轉(zhuǎn)步驟3);
7)幀間預(yù)測(cè)一律采用微觀“套取”。其中的宏塊按照運(yùn)動(dòng)補(bǔ)償分割尺寸的不同分為如下五組:

Ori_Seq[i]中的運(yùn)動(dòng)補(bǔ)償塊同樣按照此分割劃入五個(gè)類中,各組仍按右下—左上的逆序分別異或,即Ori_Seq[i]中16×16的運(yùn)動(dòng)補(bǔ)償分割只與Xor_Seq[j]中的16×16分割異或,Xor_Seq[j]各組材料過多丟棄,不足則循環(huán)使用,對(duì)于B組和D組中的分割塊,異或時(shí)若出現(xiàn)二者尺寸顛倒的情況,將Xor_Seq[j]相應(yīng)分割塊順序翻轉(zhuǎn)90°后使用,生成Cry_Seq[i],i++,轉(zhuǎn)步驟3)。
幀異或視頻加密算法的去異或(解密)過程與加密過程相反且類似,是一個(gè)由加密圖像序列Cry_Seq[N]和異或圖像序列Xor_Seq[n]再次異或恢復(fù)原始圖像序列Ori_Seq[N]的過程,不再展開。



