趙春暉, 高 陽
(哈爾濱工程大學(xué) 信息與通信工程學(xué)院, 黑龍江 哈爾濱 150001)
H.265,又稱高效視頻編碼(high efficiency video coding, HEVC)[1],是最新的視頻編碼標(biāo)準(zhǔn),相比它的前身H.264/AVC[2],H.265在相同視頻質(zhì)量的技術(shù)上可以提供2倍的數(shù)據(jù)壓縮率,或是以同樣的比特率大幅提高視頻質(zhì)量.H.265還支持超高清分辨率的視頻.鑒于此,越來越多的多媒體視頻應(yīng)用或系統(tǒng)采用H.265作為其視頻編碼解碼的標(biāo)準(zhǔn).
信息爆炸的時代,互聯(lián)網(wǎng)技術(shù)日新月異,視頻作為重要的信息載體與媒介,廣泛存在于社會生活的每一個角落,在視頻的用途越來越廣泛的同時,視頻信息的隱私性與安全性也越來越受人重視,視頻加密技術(shù)應(yīng)運而生.視頻加密算法可以分為全部加密算法與選擇性加密算法[3].全部加密算法即將視頻文件看作數(shù)據(jù),使用傳統(tǒng)加密算法,如高級加密標(biāo)準(zhǔn)(advanced encryption standard,AES)[4]加密完整的視頻流.這種算法計算數(shù)據(jù)量大,耗時長,且完全不考慮視頻格式,加密完畢后無法正常播放,必須設(shè)計專門的解碼器.選擇性加密算法則是在保證視頻格式規(guī)范的同時,通過對視頻數(shù)據(jù)中的某些對視頻質(zhì)量敏感的語法元素進行加密來保證安全性,目前已逐漸成為視頻加密算法的主流研究方向.
對H.265的視頻比特流而言,為保證符合碼流兼容性,并非所有語法元素都能被加密.我們必須選擇那些對碼流兼容性沒有影響的元素進行加密[5].H.265編碼過程的最后一步是熵編碼,它利用統(tǒng)計特性對數(shù)據(jù)進行無損壓縮,即用幾個比特表示出現(xiàn)頻率高的數(shù)據(jù),更長的比特表示出現(xiàn)頻率低的數(shù)據(jù).在熵編碼過程中,H.265使用的是基于上下文的自適應(yīng)二進制算術(shù)編碼(context based adaptive binary arithmetic coding, CABAC)框架.
絕大多數(shù)的H.265選擇性加密算法都是通過研究H.265的編碼框架,對H.265編碼比特流的部分語法元素進行加密.Z.Shahid和W.Puech使用AES算法加密了CABAC碼流中的量化參數(shù)變化量的截斷萊斯碼[6],對兼容性造成一定影響.G.Van Wallendael加密了運動矢量殘差的符號、殘差系數(shù)的符號、運動矢量預(yù)測候選的索引和運動矢量索引[7],可以達到較好的視覺加密效果.A.I.Sallam等人使用RC6算法對編碼過程中的運動矢量差和DCT系數(shù)的符號位及幅值殘差后綴進行了加密[8],比大多數(shù)AES算法更快.楊明宣對編碼后的H.265格式的視頻中的幀內(nèi)預(yù)測模式、運動矢量差和量化參數(shù)變化量的符號位和幅值后綴進行了AES加密[9],計算復(fù)雜度低且加密效果好.
本文提出了一種低計算復(fù)雜度、碼流兼容且高效的H.265選擇性加密算法,使用RC6-CFB算法對量化參數(shù)變化量的符號位及殘差后綴、MVD的符號位和絕對值后綴以及DCT系數(shù)符號位和幅值絕對值殘差后綴進行加密,保證了對幀內(nèi)和幀間的編碼過程的加密,且符號位本身的取值范圍為{0,1}比特,相當(dāng)于省略了二值化步驟,量化參數(shù)的殘差后綴和DCT系數(shù)幅值殘差后綴使用0階指數(shù)哥倫布編碼進行二值化,MVD絕對值后綴使用1階指數(shù)哥倫布編碼進行二值化,易于加密且保證了碼流兼容性.使用RC6算法的CFB模式,可以保證數(shù)據(jù)量不變,從而使壓縮率不變,且與AES算法相比,提高了加密速度.
根據(jù)加密和解密過程中使用的密鑰是否相同,加密算法可分為對稱加密算法(symmetric cipher)和非對稱加密算法(asymmetric cipher).對稱加密算法計算復(fù)雜度低,加密速度快,且加密安全性也很好,能夠抵抗多種攻擊,因此在信息安全領(lǐng)域得到了廣泛應(yīng)用.對稱加密算法根據(jù)對待加密數(shù)據(jù)的處理手段不同,又分為分組密碼(block cipher)和流密碼(stream cipher).其中的分組密碼將明文分為固定長度的比特組,稱為“塊”,對每個塊通過對稱密鑰進行固定的加密變換.確定性算法分組密碼是將明文消息編碼表示后的數(shù)字序列劃分成固定大小的組后,在密鑰的控制下對各組分別進行加密變換,從而獲得輸出數(shù)字序列.目前常用的分組密碼有AES、數(shù)據(jù)加密標(biāo)準(zhǔn)(data encryption standard, DES)[10]、RC6等.分組密碼由于其分塊加密的特性,特別適用于大容量數(shù)據(jù)加密.
高級加密標(biāo)準(zhǔn)AES,是在2001年由美國國家標(biāo)準(zhǔn)與技術(shù)研究所(NIST)提出的電子數(shù)據(jù)加密規(guī)范.
AES算法作為Rijndael算法的一個變體,其明文分組塊固定為128位,密鑰長度可以是128、192或256位.密鑰長度決定加密輪數(shù),128位密鑰的加密輪數(shù)為10輪,192位密鑰的加密輪數(shù)為12輪,256位密鑰的加密輪數(shù)為14輪[11].隨著加密輪數(shù)的增大,加密強度增強,安全性提高,計算的復(fù)雜度亦提高.
圖1為128位AES算法的加密流程框圖.首先將待加密的明文按每128位分成明文塊,并將每個明文塊按列主序組成一個 4×4 的矩陣;每輪加密包括4個步驟:字節(jié)替換(sub bytes)、行左移(shift rows) 、列混合(mix columns)以及輪密鑰加(add round key),其中第一輪只進行輪密鑰加,最后一輪沒有列混合.每一輪加密得到的結(jié)果,稱為狀態(tài)(state).
圖1 128位AES算法加密流程框圖Fig.1 Flow diagram of 128-bit AES encryption algorithm
RC6加密算法是1998年作為AES標(biāo)準(zhǔn)的候選算法提交給NIST的一種分組密碼[12].RC6的加密輪數(shù)、塊大小、密鑰大小均可修改,完整定義為RC6-w/r/b,其中w為字長,r為加密輪數(shù),b為密鑰字節(jié)長度.對于128位加密算法,定義為RC6-32/20/128,即使用32位加密塊,每塊加密20輪,加密密鑰為128位.
RC6繼承了RC5的循環(huán)移位思想,同時將AES的要求結(jié)合,使用了4個32位寄存器對128比特的字塊進行加密.由于不需使用S盒,故計算復(fù)雜度比AES算法低,速度更快.長度為b的加密密鑰被分為子密鑰并加載到數(shù)組S[0,…,2r+3]中.明文存入A,B,C,D四個寄存器中.加密過程的偽代碼如下:
Input(A,B,C,D)
B=B+S[0]D=D+S[1]
fori=1 tordo
t=(B×2B+1)<<
u=(D×2D+1)<< A=(A+t)<< C=(C+u)<< (A,B,C,D)=(B,C,D,A) A=A+S[2i+2] C=C+S[2i+3] Output(A,B,C,D) 其中輸入的A,B,C,D為字長為w的明文段,S為子密鑰,r為加密輪數(shù),輸出的A,B,C,D為加密后數(shù)據(jù). 2.1CABAC CABAC作為H.265編碼標(biāo)準(zhǔn)中的熵編碼方式[13],編碼過程分為3部分:二值化、上下文建模、二進制算術(shù)編碼,如圖2所示. 熵編碼器首先將輸入的非二值化的語法元素進行二值化,得到比特流.比特流按照H.265的規(guī)則,選擇常規(guī)編碼模式或旁路編碼模式進行算數(shù)編碼.由于二進制算術(shù)編碼本身對錯誤敏感,加密后很可能導(dǎo)致碼流不兼容,故選擇二值化后的比特流進行加密.又由于常規(guī)編碼模式下需要進行上下文模型的更新,若對采取常規(guī)編碼的語法元素加密,會進一步影響后續(xù)編碼,從而影響壓縮性能,故本算法僅對旁路編碼模式的語法元素進行加密.表1為二值化編碼方式的示例[14]. 圖2 CABAC編碼框圖Fig.2 CABAC encoding diagram 序號一元碼截斷一元碼cmax=7截斷萊斯碼cmax=7k階指數(shù)哥倫布碼k=0定長編碼cmax=7000000000110100101000121101101000110103111011101010010001141111011110110000101100511111011111011010011010161111110111111011100001111107111111101111111111010001000111 H.265使用的二值化方式一共有5種:一元碼、截斷一元碼、截斷萊斯碼、k階指數(shù)哥倫布碼和定長編碼.一元碼和截斷一元碼對每個輸入值的編碼長度不同,故不能達到加密前后比特率相同的條件[15].定長編碼長度固定,故只要加密后的值仍在碼表范圍內(nèi),就可保證兼容性.k階指數(shù)哥倫布碼雖然為變長編碼,二值化后的碼字格式為“前綴+‘1’+后綴”,其中后綴部分長度固定,故也可進行加密,同樣可以保證兼容性和壓縮率不變.綜合以上幾點分析,最終選擇了幀內(nèi)預(yù)測模式、DCT系數(shù)符號位和幅值絕對值殘差后綴以及MVD的符號位和絕對值后綴作為加密語法元素.圖3為加密算法的流程圖. 因為上下文模型的重置在片內(nèi)實現(xiàn),所以本文提出的算法在片的熵編碼階段獨立完成.每個語法元素的具體加密步驟如下. (1) 量化參數(shù) ① 量化參數(shù)符號位.由于符號位取值范圍為{0,1},不需要特別進行二值化,故將符號位比特提取出來后寫為字符串,直接用RC6算法進行加密,把符號位用密文替代,進入旁路編碼. ② 量化參數(shù)變化量殘差后綴.量化系數(shù)絕對值后綴使用0階指數(shù)哥倫布編碼進行二值化,故將其后綴比特及長度提取出來,將后綴內(nèi)容寫為字符串,使用RC6進行加密,加密完畢后按比特長度替換原內(nèi)容,進入旁路編碼. (2) MVD ① MVD符號位.與量化系數(shù)符號位加密步驟相同. ② MVD幅值絕對值后綴.MVD的幅值絕對值的后綴部分使用1階指數(shù)哥倫布編碼進行二值化.對該部分二值化后的碼字后綴進行RC6加密,按比特長度替代后進入旁路編碼. 圖3 H.265選擇性RC6加密算法流程圖Fig.3 RC6 H.265 partial encryption flow diagram (3) DCT系數(shù) ① DCT系數(shù)符號位.與DCT系數(shù)符號位加密步驟相同. ② DCT幅值絕對值殘差后綴.DCT的幅值絕對值殘差的后綴部分使用0階指數(shù)哥倫布編碼進行二值化.對該部分二值化后的碼字后綴進行RC6加密,按比特長度替代后進入旁路編碼. 本算法選取了4個不同分辨率和幀率的YUV視頻序列進行驗證,如表2所示. 表2 YUV視頻序列Table 2 YUV video sequences 本文的實驗平臺為Microsoft Visual Studio 2017集成開發(fā)環(huán)境上運行的HM16.14標(biāo)準(zhǔn)測試模型,編碼檔次為基本(main profile),采用的配置文件為encoder_lowdelay_main.cfg.測試序列的實驗平臺的內(nèi)存為4.00GB,CPU為Inter(R) Core(TM) i7-6560U CPU@2.20GHz. 本文對4個標(biāo)準(zhǔn)測試序列的加密效果從視覺效果、峰值信噪比(peak signal-to-noise ratio,PSNR)和結(jié)構(gòu)相似性(structural similarity index,SSIM)、直方圖、RC6算法的破解性及加密效率進行分析,驗證算法的兼容性、安全性和實時性. 四個視頻序列經(jīng)加密均滿足H.265的視頻編解碼標(biāo)準(zhǔn),可以由標(biāo)準(zhǔn)解碼器正常解碼播放,滿足了兼容性,其視覺效果如圖4所示.圖4a~圖4d的上排圖像分別為BasketballDrill,Soccer,Foreman,Bus的原始視頻圖像的第10幀,下排圖像為經(jīng)過加密后標(biāo)準(zhǔn)解碼器播放出來的第10幀圖像.從圖中可以看出,解碼后的視頻內(nèi)容基本無法辨認,視覺加密效果良好. PSNR是最常用的圖像質(zhì)量客觀評價標(biāo)準(zhǔn),PSNR值越小,視頻質(zhì)量越差,加密算法安全性越好.其公式見式(1). (1) 其中:I表示原始視頻圖像;I′表示加密后視頻圖像;M,N表示圖像尺寸;I(i,j)表示原始圖像中任意一點,max(I2)表示信號的峰值,取對數(shù),可將PSNR值換算成標(biāo)準(zhǔn)單位(dB). SSIM是一種基于人眼視覺特性(human visual system,HVS)的圖像質(zhì)量客觀評價準(zhǔn)則.SSIM提供了一種基于圖像結(jié)構(gòu)失真的方法來評價圖像質(zhì)量,綜合考慮了亮度、對比度和結(jié)構(gòu)3個因素,簡化后的公式見式(2). (2) 其中:x,y為原始視頻圖像和待測視頻圖像的子圖像;C1,C2為常數(shù);μ和σ分別表示均值和方差.SSIM系數(shù)通??梢员碚鲀煞鶊D像的主觀視覺相似度,取值范圍是[-1,1],相似度越高的兩幅圖像的系數(shù)越接近于1,否則其值越小. 表3為4個測試序列加密前后的PSNR均值和SSIM均值,從中可以看出,加密后的PSNR均值在10 dB左右,SSIM均值在0.3左右,加密效果良好. 圖4 測試序列加密前后第10幀圖像Fig.4 Frame #10 of test sequences before and after encryption(a)—BasketballDrill; (b) Soccer; (c)—Foreman; (d)—Bus. 表3 測試序列加密前后PSNR均值與SSIM均值 視頻幀直方圖是視頻幀內(nèi)像素在每個顏色強度級別上的分布的圖形表示.原始視頻幀的灰度直方圖和加密視頻幀的灰度直方圖是不同的[16].圖5為Bus原始與加密視頻序列第10幀的RGB分量的灰度直方圖,左側(cè)為原始序列,右側(cè)為加密序列.從圖5可以看出,RGB分量的直方圖均存在很大差異,說明加密效果良好. RC6算法作為AES候選算法的一種,它的密鑰為128位,密鑰空間為2128,這就保證了在現(xiàn)有技術(shù)下,RC6不會被暴力攻擊破解.而本文算法還可以對語法元素空間進行窮舉,各符號位的窮舉空間為2,量化參數(shù)變化量絕對值殘差窮舉空間為2k+1,MVD幅值絕對值殘差窮舉空間為2l+1,其中k為量化參數(shù)變化量后綴的長度,l為MVD殘差后綴的長度,此處未考慮DCT的符號位和量化參數(shù)的符號位以便計算.對于一個W×H分辨率的視頻,假設(shè)有m個幀內(nèi)編碼單元和n個幀間編碼單元(PU尺寸為32×32),則一幀圖像的窮舉空間的計算公式為 其中k,l,m,n均大于0,故S的取值范圍應(yīng)大于2WH/1024,對于一個352×288的視頻序列,它的每一幀的窮舉空間S≥299,也很難通過窮舉將加密語法元素破解. 表3為4個視頻序列每一幀的原始編碼時間和使用本算法后的加密編碼時間,并計算得出了加密時間與編碼時間的比值(encryption compression time ratio, ECTR).從中可以看出,視頻序列的分辨率越高,加密數(shù)據(jù)量越大,時間越長,而且由于HM16.14作為一個非商用的參考軟件,本身的編碼速度就不高,所以加密編碼時間長.但算法的ECTR在2%~3%,說明加密時間占比很低,基本滿足了實時性的要求. 表3 測試序列每幀原始耗時、加密耗時與ECTR 圖5 Bus第10幀加密前后RGB直方圖Fig.5 The RGB histogram of the tenth frame of the Bus video before and after encryption(a)—Bus第10幀R分量直方圖; (b)—Bus 第10幀G分量直方圖; (c)—Bus 第10幀B分量直方圖. 本文提出一種基于H.265編碼的高效選擇性加密算法,該算法在編碼流程的熵編碼片內(nèi)實現(xiàn),通過RC6算法加密量化變換系數(shù)的符號位和幅值絕對值后綴、MVD的符號位與幅值絕對值殘差以及DCT系數(shù)的符號位和幅值絕對值殘差后綴,在保證了碼流兼容性的前提下,實現(xiàn)了壓縮率不變且近實時的效果.通過對4個分辨率不同YUV測試序列進行加密實驗,證明算法加密的效果良好,加密視頻序列的PSNR值與SSIM值下降明顯,加密后的PSNR值在10左右,SSIM值在0.3左右,直方圖差異明顯,RC6算法的安全性可靠,且計算復(fù)雜度較低,加密速度快,進一步滿足了視頻加密的實時性需求.2 加密語法元素選擇
2.2 語法元素加密步驟
3 實驗分析
3.1 視覺效果
3.2 PSNR與SSIM
3.3 直方圖
3.4 破解性分析
3.5 加密效率
4 結(jié) 論