王朝慶 ,賈立平
(1.山東廣播電視臺,山東 濟南 250062;2.山東大學 軟件學院,山東 濟南 250101;3.大眾報業集團,山東 濟南 250014)
視頻加密是視頻版權保護領域的重要技術。常用的視頻加密方式包括全文件加密和部分數據加密等[1]。全文件加密算法將視頻文件看作普通的二進制文件,用對稱加密算法對整個文件進行全加密運算。這種加密算法的優點是加密算法成熟、算法安全性高、不用區分編碼方式,適用于各種格式的視頻內容,能夠最大限度地保證視頻內容的保密性;它的缺點是加密運算量大,效率偏低。部分加密法考慮視頻編碼文件特有的格式,對其中的部分數據有選擇地進行加密,在安全性及保密性允許的范圍內降低運算量,提高加解密效率[2]。
以MPEG-2編碼為例,I幀在MPEG-2編碼中起到了關鍵的作用,如果I幀數據遭到損壞或者加密,就會干擾視頻的可用性。利用這個特點,可以有選擇地對視頻進行加密,達到版權保護的目的。
視頻加密領域常用的算法主要以對稱密碼算法為主,如DES、3DES、AES以及SM4算法等。
SM4算法又稱為SM4分組密碼算法,是我國國家密碼管理局公開發布的一種密碼算法[3]。目前SM4算法是我國對稱密碼算法的國家標準,標準編號為GB/T 32907—2016。SM4算法是一種分組對稱密碼算法,它的明文分組為128位,密鑰長度也是128位,采用32輪輪函數加密的方式,加密密鑰與解密密鑰是同一組密鑰,加密算法與解密算法一致,在解密運算時使用倒序的輪密鑰。SM4具體運算過程包括定義相關函數、生成輪密鑰、構造輪函數、加密及解密等步驟。
SM4運算過程定義的相關函數有τ(A)、L(B)、L′(B)、T(.)及T′(.)等。
(1)τ(A)是一種非線性變換方法,其輸入A為4組長度為8的二進制序列,其輸出定義為B,也是長度為8的二進制序列。輸出值B可以根據輸入A的取值進行查S盒表格來得到。每一組8位的輸入值分為高四位和低四位,高位值對應S盒的列,低位值對應S盒的行。例如,τ(D1)=C1。
(2)L(B)線性變換函數,它的輸入值是非線性變換函數τ(A)的輸出值B。計算方法為:

(3)L′(B)線性變換函數,它的輸入值也是τ(A)的輸出值B。計算方法為:

(4)T(·)為T函數,是τ函數和L函數的復合函數,表達式為:T(·)=L(τ(·))。
(5)T′(·)為T′函數,與T函數類似,把L變換替換為L′ 變換,表達式為:T′(·)=L′(τ(·))。
SM4算法共進行32輪加密運算,每一輪運算都要用到一組輪密鑰,共計32組輪密鑰,它們由128位的密鑰運算得來。將加密秘鑰MK按照32位的長度分成4組,記作MK0,MK1,MK2,MK3。輪密鑰的生成公式為:

式中:FKi為常量,取值分別為FK0=(A3B1BAC6),FK1=(55AA3350),FK2=(677D9197),FK3=(B27022DC)。CKi也是常量,可查表獲得。由此可得到32組輪密鑰rki,i=0,1,…,31。
輪函數表達式為:

加密過程會迭代使用輪函數32次。
將輸入的128位明文分組拆分為4組32位的分組,設為X0、X1、X2、X3。用Y0、Y1、Y2、Y3標識加密后的密文。
先進行32輪迭代運算,運算公式為:

經過32輪的迭代運算,再將迭代運算式的輸出進行一次反序變換:

至此,加密過程完成。
SM4算法的解密函數與加密過程中的函數相同,只是使用的輪密鑰的順序不同,在進行解密運算時要倒序使用構造好的輪密鑰。
通常情況下,視頻文件都是經過編碼壓縮的文件。常用的編碼方式有MPEG-2、H.264以及AVS+等。視頻文件主要由I幀、P幀及B幀3種視頻幀組成。I幀也叫幀內編碼,是指本幀中的內容全部來自于自身的原始圖像,無需參考其他圖像的數據。P幀即預測編碼幀,它根據前面的I幀或者P幀的數據進行運動補償運算得來,依賴于其他幀的數據,因此不能單獨工作。B幀即雙向預測編碼幀,它將位于自身前面和后面的幀作為參考幀,對前面的幀進行前向運動補償預測,對后面的幀做后續運動補償預測[4]。
圖像組層又稱為GOP組層,它由一系列連續的圖像幀組成。在MPEG-2的GOP組中,I幀作為第一幀出現,是后續的B幀或者P幀的參考幀。一個標準GOP組的組成結構如圖1所示。

圖1 GOP組結構圖
通過分析視頻幀格式可知,I幀在視頻文件中起到了關鍵幀的作用,用加密算法將I幀數據進行加密,即可干擾當前幀及后續預測幀的解碼,從而防止非授權的使用。授權用戶可以利用密鑰進行解密,恢復出I幀的明文,進而可以正常使用。這樣既可以大幅降低加密運算的運算強度,提升加密效率,又可以防止侵權行為的發生。
加密步驟如下。
(1)利用編碼后視頻中的標識位,準確定位I幀數據位置,并將數據讀取出來。
(2)調用SM4算法對該幀數據進行加密。
(3)將加密后的數據寫入原文數據所在的位置。
(4)遍歷所有關鍵幀,并全部執行加密運算。
解密步驟如下。
(1)查找I幀標識位,取出對應加密后的I幀數據。
(2)調用SM4解密算法,對加密數據進行解密。
(3)將解密后的數據寫入原來的位置。
(4)遍歷所有加密幀,并逐一解密。
利用node.js語言進行編程實現,示例視頻為一段演播室新聞素材,視頻素材分辨率為1 920*1 080,時長10 s,編碼方式為MPEG-2。
原視頻解碼后的圖像如圖2所示,加密后的視頻經過解碼后的畫面如圖3所示,解密后再次解碼得到的圖像如圖4所示。

圖2 原始圖像

圖3 加密后圖像

圖4 解密后圖像
由實驗仿真可知,本算法可以對1 920*1 080分辨率的視頻文件進行加密,加密運算量相對較小,加密速度較快。加密以后的視頻文件在解碼時會出現大量的馬賽克或者不同顏色的色條,整個畫面的細節丟失,無法辨認視頻內容,沒有觀看價值。用SM4解密后的視頻可以正常播放,主觀評價與原始視頻沒有差異。經過SM3哈希算法[5]確認,解密后的文件與原始文件擁有相同的哈希值,證明該算法的加解密過程不會對原始文件產生損傷。
本文利用視頻編碼的特點,設計了一種只針對I幀數據的加密方法,降低了視頻加密運算的復雜度,提升了加密運算效率。同時,加密算法采用國產商用密碼算法SM4,加密強度更高,安全性更有保證。實驗仿真證明,該方法可以提升加密效率,并有效保護視頻版權不受侵害。