王朝慶 ,賈立平
(1.山東廣播電視臺(tái),山東 濟(jì)南 250062;2.山東大學(xué) 軟件學(xué)院,山東 濟(jì)南 250101;3.大眾報(bào)業(yè)集團(tuán),山東 濟(jì)南 250014)
視頻加密是視頻版權(quán)保護(hù)領(lǐng)域的重要技術(shù)。常用的視頻加密方式包括全文件加密和部分?jǐn)?shù)據(jù)加密等[1]。全文件加密算法將視頻文件看作普通的二進(jìn)制文件,用對(duì)稱加密算法對(duì)整個(gè)文件進(jìn)行全加密運(yùn)算。這種加密算法的優(yōu)點(diǎn)是加密算法成熟、算法安全性高、不用區(qū)分編碼方式,適用于各種格式的視頻內(nèi)容,能夠最大限度地保證視頻內(nèi)容的保密性;它的缺點(diǎn)是加密運(yùn)算量大,效率偏低。部分加密法考慮視頻編碼文件特有的格式,對(duì)其中的部分?jǐn)?shù)據(jù)有選擇地進(jìn)行加密,在安全性及保密性允許的范圍內(nèi)降低運(yùn)算量,提高加解密效率[2]。
以MPEG-2編碼為例,I幀在MPEG-2編碼中起到了關(guān)鍵的作用,如果I幀數(shù)據(jù)遭到損壞或者加密,就會(huì)干擾視頻的可用性。利用這個(gè)特點(diǎn),可以有選擇地對(duì)視頻進(jìn)行加密,達(dá)到版權(quán)保護(hù)的目的。
視頻加密領(lǐng)域常用的算法主要以對(duì)稱密碼算法為主,如DES、3DES、AES以及SM4算法等。
SM4算法又稱為SM4分組密碼算法,是我國國家密碼管理局公開發(fā)布的一種密碼算法[3]。目前SM4算法是我國對(duì)稱密碼算法的國家標(biāo)準(zhǔn),標(biāo)準(zhǔn)編號(hào)為GB/T 32907—2016。SM4算法是一種分組對(duì)稱密碼算法,它的明文分組為128位,密鑰長度也是128位,采用32輪輪函數(shù)加密的方式,加密密鑰與解密密鑰是同一組密鑰,加密算法與解密算法一致,在解密運(yùn)算時(shí)使用倒序的輪密鑰。SM4具體運(yùn)算過程包括定義相關(guān)函數(shù)、生成輪密鑰、構(gòu)造輪函數(shù)、加密及解密等步驟。
SM4運(yùn)算過程定義的相關(guān)函數(shù)有τ(A)、L(B)、L′(B)、T(.)及T′(.)等。
(1)τ(A)是一種非線性變換方法,其輸入A為4組長度為8的二進(jìn)制序列,其輸出定義為B,也是長度為8的二進(jìn)制序列。輸出值B可以根據(jù)輸入A的取值進(jìn)行查S盒表格來得到。每一組8位的輸入值分為高四位和低四位,高位值對(duì)應(yīng)S盒的列,低位值對(duì)應(yīng)S盒的行。例如,τ(D1)=C1。
(2)L(B)線性變換函數(shù),它的輸入值是非線性變換函數(shù)τ(A)的輸出值B。計(jì)算方法為:
(3)L′(B)線性變換函數(shù),它的輸入值也是τ(A)的輸出值B。計(jì)算方法為:
(4)T(·)為T函數(shù),是τ函數(shù)和L函數(shù)的復(fù)合函數(shù),表達(dá)式為:T(·)=L(τ(·))。
(5)T′(·)為T′函數(shù),與T函數(shù)類似,把L變換替換為L′ 變換,表達(dá)式為:T′(·)=L′(τ(·))。
SM4算法共進(jìn)行32輪加密運(yùn)算,每一輪運(yùn)算都要用到一組輪密鑰,共計(jì)32組輪密鑰,它們由128位的密鑰運(yùn)算得來。將加密秘鑰MK按照32位的長度分成4組,記作MK0,MK1,MK2,MK3。輪密鑰的生成公式為:
式中:FKi為常量,取值分別為FK0=(A3B1BAC6),F(xiàn)K1=(55AA3350),F(xiàn)K2=(677D9197),F(xiàn)K3=(B27022DC)。CKi也是常量,可查表獲得。由此可得到32組輪密鑰rki,i=0,1,…,31。
輪函數(shù)表達(dá)式為:
加密過程會(huì)迭代使用輪函數(shù)32次。
將輸入的128位明文分組拆分為4組32位的分組,設(shè)為X0、X1、X2、X3。用Y0、Y1、Y2、Y3標(biāo)識(shí)加密后的密文。
先進(jìn)行32輪迭代運(yùn)算,運(yùn)算公式為:
經(jīng)過32輪的迭代運(yùn)算,再將迭代運(yùn)算式的輸出進(jìn)行一次反序變換:
至此,加密過程完成。
SM4算法的解密函數(shù)與加密過程中的函數(shù)相同,只是使用的輪密鑰的順序不同,在進(jìn)行解密運(yùn)算時(shí)要倒序使用構(gòu)造好的輪密鑰。
通常情況下,視頻文件都是經(jīng)過編碼壓縮的文件。常用的編碼方式有MPEG-2、H.264以及AVS+等。視頻文件主要由I幀、P幀及B幀3種視頻幀組成。I幀也叫幀內(nèi)編碼,是指本幀中的內(nèi)容全部來自于自身的原始圖像,無需參考其他圖像的數(shù)據(jù)。P幀即預(yù)測編碼幀,它根據(jù)前面的I幀或者P幀的數(shù)據(jù)進(jìn)行運(yùn)動(dòng)補(bǔ)償運(yùn)算得來,依賴于其他幀的數(shù)據(jù),因此不能單獨(dú)工作。B幀即雙向預(yù)測編碼幀,它將位于自身前面和后面的幀作為參考幀,對(duì)前面的幀進(jìn)行前向運(yùn)動(dòng)補(bǔ)償預(yù)測,對(duì)后面的幀做后續(xù)運(yùn)動(dòng)補(bǔ)償預(yù)測[4]。
圖像組層又稱為GOP組層,它由一系列連續(xù)的圖像幀組成。在MPEG-2的GOP組中,I幀作為第一幀出現(xiàn),是后續(xù)的B幀或者P幀的參考幀。一個(gè)標(biāo)準(zhǔn)GOP組的組成結(jié)構(gòu)如圖1所示。
圖1 GOP組結(jié)構(gòu)圖
通過分析視頻幀格式可知,I幀在視頻文件中起到了關(guān)鍵幀的作用,用加密算法將I幀數(shù)據(jù)進(jìn)行加密,即可干擾當(dāng)前幀及后續(xù)預(yù)測幀的解碼,從而防止非授權(quán)的使用。授權(quán)用戶可以利用密鑰進(jìn)行解密,恢復(fù)出I幀的明文,進(jìn)而可以正常使用。這樣既可以大幅降低加密運(yùn)算的運(yùn)算強(qiáng)度,提升加密效率,又可以防止侵權(quán)行為的發(fā)生。
加密步驟如下。
(1)利用編碼后視頻中的標(biāo)識(shí)位,準(zhǔn)確定位I幀數(shù)據(jù)位置,并將數(shù)據(jù)讀取出來。
(2)調(diào)用SM4算法對(duì)該幀數(shù)據(jù)進(jìn)行加密。
(3)將加密后的數(shù)據(jù)寫入原文數(shù)據(jù)所在的位置。
(4)遍歷所有關(guān)鍵幀,并全部執(zhí)行加密運(yùn)算。
解密步驟如下。
(1)查找I幀標(biāo)識(shí)位,取出對(duì)應(yīng)加密后的I幀數(shù)據(jù)。
(2)調(diào)用SM4解密算法,對(duì)加密數(shù)據(jù)進(jìn)行解密。
(3)將解密后的數(shù)據(jù)寫入原來的位置。
(4)遍歷所有加密幀,并逐一解密。
利用node.js語言進(jìn)行編程實(shí)現(xiàn),示例視頻為一段演播室新聞素材,視頻素材分辨率為1 920*1 080,時(shí)長10 s,編碼方式為MPEG-2。
原視頻解碼后的圖像如圖2所示,加密后的視頻經(jīng)過解碼后的畫面如圖3所示,解密后再次解碼得到的圖像如圖4所示。
圖2 原始圖像
圖3 加密后圖像
圖4 解密后圖像
由實(shí)驗(yàn)仿真可知,本算法可以對(duì)1 920*1 080分辨率的視頻文件進(jìn)行加密,加密運(yùn)算量相對(duì)較小,加密速度較快。加密以后的視頻文件在解碼時(shí)會(huì)出現(xiàn)大量的馬賽克或者不同顏色的色條,整個(gè)畫面的細(xì)節(jié)丟失,無法辨認(rèn)視頻內(nèi)容,沒有觀看價(jià)值。用SM4解密后的視頻可以正常播放,主觀評(píng)價(jià)與原始視頻沒有差異。經(jīng)過SM3哈希算法[5]確認(rèn),解密后的文件與原始文件擁有相同的哈希值,證明該算法的加解密過程不會(huì)對(duì)原始文件產(chǎn)生損傷。
本文利用視頻編碼的特點(diǎn),設(shè)計(jì)了一種只針對(duì)I幀數(shù)據(jù)的加密方法,降低了視頻加密運(yùn)算的復(fù)雜度,提升了加密運(yùn)算效率。同時(shí),加密算法采用國產(chǎn)商用密碼算法SM4,加密強(qiáng)度更高,安全性更有保證。實(shí)驗(yàn)仿真證明,該方法可以提升加密效率,并有效保護(hù)視頻版權(quán)不受侵害。