視頻分層加密算法

隨著可伸縮視頻編碼SVC( Scalable Video Coding)的普及,針對可伸縮視頻的安全問題也越來越受到重視。目前大部分加密方案都是針對H.264/AVC編碼標準來設(shè)計的。為此我們分析SVC新采用的技術(shù),并率先提出了一種針對其特點的新的分層加密方案。

一、H.264 SVC的新特性

1、空間可分級

在H.264/AVC的SVC擴展中,空間可伸縮性采用的是分層的方法,通過金字塔式的空間分解來生成多個不同空間分辨率的信號。每個空間分辨率都是一個新的空間編碼層??臻g多分辨率信號的產(chǎn)生是通過下采樣濾波器來實現(xiàn)的,圖1所示為一個兩層空間分級的SVC編碼結(jié)構(gòu)。

視頻分層加密算法

H264/SVC在空間分層結(jié)構(gòu)的基礎(chǔ)上,對每一層分別實現(xiàn)時間可分級和質(zhì)量可分級。每一層內(nèi)的編碼都使用了H264/AVC中幀內(nèi)和幀間預(yù)測編碼技術(shù),而相鄰層之間使用了SVC獨有的層間預(yù)測編碼技術(shù)。由于低層是由高層通過下采樣得到的,因此在相同的分辨率情況下,每一個高層幀都有與之相對應(yīng)的低層幀,兩者之間存在著顯而易見的相關(guān)性,即層間冗余。顯然,為了獲得更高的壓縮效率,有必要通過各種層間預(yù)測技術(shù)來消除層間冗余,這也是空間可伸縮性技術(shù)的關(guān)鍵所在。設(shè)計層間預(yù)測算法的目的是盡可能利用基本層的信息提高增強層的編碼效率。

2、質(zhì)量可分級

在每一個空間層中,SVC將利用MGS編碼來實現(xiàn)質(zhì)量可分級( SNR Scalability)o MGS將壓縮效率與漂移效應(yīng)中,通過引入關(guān)鍵幀達到較好的效果。關(guān)鍵幀即時域最基本層的圖像(圖2(d)的兩個條紋標識的幀為關(guān)鍵幀)。這些關(guān)鍵幀的重構(gòu)是通過基本層實現(xiàn)的。因此增強層幀的丟棄造成的漂移僅僅只能作用在當前關(guān)鍵幀到下一個關(guān)鍵幀之間,實現(xiàn)了對漂移效應(yīng)限制。圖2描述了在質(zhì)量可分級時可能的幾種選擇。

視頻分層加密算法

(a)基礎(chǔ)層預(yù)測

所有的預(yù)測全都在基本層完成。這樣做的明顯缺陷就是編碼的效率低下。因為所有的參考幀都是基本層,所以參考幀品質(zhì)差,那么殘差也會大,進而編碼出的比特就會多。

(b)增強層預(yù)測

克服了(a)的缺點,所有參考幀都用最“清楚”的圖像,這樣編碼效率最好。但這種結(jié)構(gòu)仍然有問題,一旦解碼端只收到基本層,而增強層都丟失了。那么就會造成解碼出問題,并且這種問題會一直傳播下去直到下一個IDR,即漂移效應(yīng)。

(c)雙循環(huán)預(yù)測

通過分析想到用這種結(jié)構(gòu)來克服(a)和(b)的問題。但這樣的結(jié)構(gòu)仍然會存在漂移效應(yīng)。

(d)關(guān)鍵幀預(yù)測

SVC標準使用的方法,實際是一種(a)和(b)的折中方案。關(guān)鍵幀就是時間層id為O的圖像(圖中用條紋標明)o對關(guān)鍵幀而言,它們將采用基本層來實現(xiàn)預(yù)測,而非關(guān)鍵幀,則全部使用最“清楚”的圖像作為參考幀。

二、針對SVC新特性實現(xiàn)的分層加密方案

針對SVC出現(xiàn)的新特性,目前還沒有出現(xiàn)相關(guān)的加密方案,而本文將利用空間可分級中的層間預(yù)測以及質(zhì)量可分級這些新的技術(shù)特征來設(shè)計一個新的分層加密方案。本方案的分層加密共分三層,保密性依次加強。加密的對象是一個二層空間分級編碼視頻,為了在解碼的過程中不產(chǎn)生混亂,在對質(zhì)量可分級以及層間預(yù)測進行加密的時候采用不同的密鑰K、K'。

1、第一層加密:層間預(yù)測運動向量

為了提高編碼效率,H.264/AVC采用運動估計的技術(shù),在編碼一個宏塊的時候,首先要獲得運動向量MV,MV是當前幀中需要編碼的宏塊,與參考幀中和該宏塊最相似的宏塊之間的位移矢量,編碼過程中獲得MV之后,由當前宏塊與參考宏塊做相減得到殘差,然后MV與殘差將被送往碼流進行傳輸。這種預(yù)測方式在AVC中稱為幀間預(yù)測。SVC相對AVC做了大幅的改動,由于可伸縮視頻在編碼的過程中將分成多個空間層,而空間層中的低層是由高層通過下采樣得到的,兩者具有顯而易見的相關(guān)性,而且冗余大部分時候比幀間冗余要小很多,因此在大部分的預(yù)測過程中,SVC采用相同幀中較低的空間層通過上采樣得到的重建圖像作為較高的空間層的參考圖像,這種方式稱為層間預(yù)測。 SVC提供三種層間預(yù)測的方法:層間幀內(nèi)預(yù)測、層間宏塊模式和運動參數(shù)預(yù)測、層間殘差預(yù)測。針對AVC的加密方案,所挑選的加密信息均為幀間預(yù)測中的信息,而由上面分析可知,SVC中的大部分預(yù)測是在層間進行的,因此,本方案的第一層加密,是針對層間預(yù)測中的運動向量來進行的。加密操作如圖3所示。在修改了層間的參考圖像的運動向量之后,上層的殘差也會有相應(yīng)的變化,因而導(dǎo)致圖像的編碼是不準確的。

視頻分層加密算法

加密原理就是在解碼的時候采用錯誤的預(yù)測值,所呈現(xiàn)出來的結(jié)果將會是大部分宏塊的偏移。由于SVC的層間預(yù)測有三種方式,不是每個宏塊都會采用層間運動向量預(yù)測模式,因此,每幀中采用該預(yù)測模式的宏塊數(shù)量是不確定的,所以我們將采用流加密的方式,這樣的加密方式會比較靈活,取密鑰K中的一位與宏塊的運動矢量的符號位進行異或,下文中P為符號位:

視頻分層加密算法

2、第二層加密:MGS關(guān)鍵幀

在SVC質(zhì)量可分級的MGS模式中,基礎(chǔ)層的關(guān)鍵幀會作為增強層幀編碼時候的參考幀,而基礎(chǔ)層的非關(guān)鍵幀又是使用增強層的幀作為參考幀,因此改變關(guān)鍵幀的重建幀將使得增強層所有的幀以及基層非關(guān)鍵幀受到累加化的影響。H.264中規(guī)定,宏塊是由16 x16像素組成的,而宏塊中的每個像素都由一個亮度值和兩個色度值來表征,亮度值表征像素的灰度,色度值表征像素的顏色,宏塊中的亮塊和色塊分別是由塊中像素的亮度值和色度值組成,如果對關(guān)鍵幀的重建幀中宏塊的亮塊和色塊進行改變,則增強層中的所有幀以及基本層的非關(guān)鍵幀都會受到很大影響,致使視頻質(zhì)量大幅下降。由于宏塊大小固定為16 x16像素,所以亮塊與色塊的數(shù)據(jù)量也是固定的,因此本方案第二層加密采用的是AES分塊加密技術(shù)對重建幀中宏塊的亮塊和色塊進行加密,這樣可以保證加密過程迅速完成并擁有很高的安全性。以下為實現(xiàn)代碼。

K' = getKey();

UInt size;

pcFrame - > getFuIIPeIYuvBuffer ( ) - > getYuvBufferCtrl ( ). getSize( size) ;

slze = size/8; 11 8 data constitute a AES encrytion block Xpel temp = temp' = new Xpel[8] ;

for(int i = 0; i < size; i++) { temp [1.8] = pcFrame - > getFuIIPeIYuvBuffer( )

- > getBuffer( ) [i* 8. . (i+l) * 8 -1] ; //get 8 data from YUV array

AES_Encrpt( temp [ 1. . 8 ] , K', temp' [1. . 8 ] ) ; //AES encryp-tion

pcFrame - > getFulIPeIYuvBuffer( ) - > getBuffer( ) [i* 8. . ( i + 1) *8 -1] = temp'[1..8];

}

3、第三層加密:層間預(yù)測運動向量以及MGS關(guān)鍵幀

在SVC的編碼流程中,視頻首先會被分成若干個空間層,空間層之間彼此采用層間預(yù)測的模式,而每個空間層中,會單獨進行質(zhì)量可分級,采用MGS的模式,因此第三級的方案將會利用層間預(yù)測的運動向量加密以及MGS中的關(guān)鍵幀加密同時進行,兼顧了層間與層內(nèi)的保密性,并且可以互相疊加,加密級別更高,安全性更顯著。圖4為本方案的分層加密結(jié)構(gòu)圖。

視頻分層加密算法

小知識之SVC

SVC是Switching Virtual Circuit的縮寫,意思是交換虛擬電路。