一種自適應(yīng)綜合DCT系數(shù)置亂加密算法
在壓縮編碼過程中加密敏感數(shù)據(jù),常用的是加密DCT系數(shù),稱其為DCT系數(shù)加密算法,其中,加密過程位于壓縮編碼過程之中,DCT系數(shù)加密算法還存在很大的發(fā)展空間,具有較大的潛力尚待挖掘,因而成為當前乃至以后的研究熱點。
一、DCT系數(shù)加密算法
1、DCT系數(shù)加密算法
DCT系數(shù)加密算法主要包括t頻度域鼉亂算法、Zig -Zag置亂算法、分段Zig - Zag置亂算法和符號加密算法。
DCT系數(shù)加密算法的計算復雜度和差錯擴散性兩方面的性能都很優(yōu)越。然麗這3種算法在可靠性和對壓縮比的影響方面,DCT系數(shù)加密算法存在著較大的不足,這也是DCT系數(shù)加密算法不能被廣泛接受的主要原因。
2、自適應(yīng)綜合DCT系數(shù)置亂加密算法
自適應(yīng)綜合DCT系數(shù)置亂加密算法(以下簡稱“綜合加密算法)結(jié)合了頻度域置亂算法和分段Zig - Zag置亂算法的特性,充分利用了這兩種算法的優(yōu)點,摒棄了各自的不足,使得這兩種處理方法間優(yōu)勢互補。
綜合加密算法將加密處理過程置于1幀的幀內(nèi)預測之后,加密的是差分DCT系數(shù),是一種分組加密算法,他將欲加密的對象(即1幀圖像)先分成一定長度的許多組,每次只對其中的一組進行處理。在同一個8×8數(shù)據(jù)塊中,DCT系數(shù)塊按圖1進行劃分。

該DCT系數(shù)塊被兩條斜線分隔成A,B和C三個區(qū)域,對A區(qū)的系數(shù)進行頻度域置亂加密,對B區(qū)中的系數(shù)進行Zig - Zag置亂加密,對于每個8×8塊內(nèi)部的區(qū)域劃分在不同的組內(nèi)是不一樣的,即圖1的分界線的位置是相應(yīng)可調(diào)的。這也正是綜合加密算法的獨特之處。關(guān)于塊內(nèi)的區(qū)域劃分策略(即各條分界線位置的確定)在后面將詳述。
為了增加算法的可靠性,必須使每一次加密的密鑰是不同的,因而,這要求加解密雙方都應(yīng)存有一份相同的密鑰庫,并根據(jù)一定的方法從中取出相同的密鑰。
二、綜合加密算法
1、加密組長度
加密組長度按既定的模式進行變化,比如,通過查表獲取等。原則上說,圖像所能包含的宏塊總數(shù)(設(shè)值為n)即為加密組長度的上限。然而,若整幀圖像只包含一個加密組,則加密強度就不會很高,原因是所有B區(qū)的系數(shù)就只用到一個加密密鑰。若把上限值設(shè)為n-1顯然也不行,因為當一個加密組的長度正好取為n-1時,另一個加密組的長度就只能為1 。隨圖像的復雜度和幀的類型的不同,這個值也有所不同。根據(jù)對多種類型視頻圖像的觀察分析,綜合加密算法將這個下限值設(shè)定為5(對于此值的準確性目前沒有統(tǒng)計數(shù)據(jù)支持,有待進一步確認>。以此為根據(jù),對于不同類型圖像的加密組的長度上限就應(yīng)為
n-5。然而,對于4GIF圖像,n-5=1.579。當一個加密組的長度接近該值時,由于需要緩沖,會占用較大的存儲空間,同時也會帶來較大的編碼遲延。因而,在不對算法的可靠性造成影響的前提下,規(guī)定所有加密組的長度不得超過255。采用255作為加密組長度上限,除了是從算法計算復雜度的角度考慮外,還因為這個值只需1個字節(jié)就能存放,從而減小相應(yīng)的加密參數(shù)表所占的存儲器空間。
在某一個確定的幀內(nèi),加密組的長度值是通過查表獲得的。因此,對于不同的分辨率、不同的幀類型存在對應(yīng)的加密組長度表。幀中加密組的序號和表中的每一個表項一一對應(yīng)。很顯然,為了保證加密組長度的限制,這些表項需經(jīng)過專門的設(shè)計。為了保證各幀之間加密組劃分的可變性,必須為該類型的幀提供多個不同的查找表,以進行輪換使用。通過權(quán)衡查找表對存儲器空間的占用和算法的可靠性,綜合加密算法規(guī)定為每一類型的幀提供50個不同的查找表。當然,由于B幀的出現(xiàn)頻率最高,查找表重復利用的頻率也就最高。但B幀攜帶的信息量是最少的,從對單位信息量的加密強度考慮,各類型幀之間相差不大。
綜合加密算法采用的是加密組元素位置固定策略。并且同組元素也不是遍及整個幀的零散分布的宏塊,而是采用相鄰宏塊組成同一個加密組。因為差分DCT系數(shù)在相鄰宏塊之間不具有相關(guān)性。
2、塊內(nèi)加密區(qū)域的劃分
如圖1所示,第1條和第2條分界線將整個8×8的塊分成3個部分:A區(qū)、B區(qū)和C區(qū)。綜合加密算法對這3個區(qū)的DCT系數(shù)分別對待:對A區(qū)進行頻度域置亂處理,對B區(qū)進行Zig - Zag置亂處理,對C區(qū)的系數(shù)不做處理。綜合加密算法除了對A,B區(qū)的系數(shù)進行了相應(yīng)的加密處理以外,對C區(qū)的系數(shù)和P幀、B幀的運動向量都未進行加密處理。在頻率域,不同頻度的系數(shù)是不相關(guān)的,因而C區(qū)的系數(shù)同A區(qū)和B區(qū)不相關(guān),攻擊者不能從C區(qū)的系數(shù)中得到任何對破解加密數(shù)據(jù)有用的信息。對B區(qū)進行頻度域置亂會使最終的編碼數(shù)據(jù)量大幅增加,其原因是參與加密的塊的DCT系數(shù)分布在B區(qū)的差異性最大。然而在同一塊內(nèi)對B區(qū)的Zig - Zag置亂對最終生成的編碼數(shù)據(jù)量的影響是不定的,經(jīng)過平均后,總體上對壓縮比不會產(chǎn)生影響。因而,B區(qū)的最佳位置應(yīng)該是加密組中各塊的DCT系數(shù)分布差異最大的區(qū)域。通過對同組中所有塊的全部DCT系數(shù)進行比較,可以找到B區(qū)的最佳位置。然而這種比較的計算盤是巨大的,對于實時視頻傳輸應(yīng)用領(lǐng)域,對處理器的計算能力的要求會很高。若對各塊間DCT系數(shù)分布差異進行更深入的分析,可以找到另一種相對較簡單的劃分策略。我們對加密過程進行了模擬,并對圖2各塊間DCT系數(shù)的分布差異進行了統(tǒng)計。

統(tǒng)計操作的過程如下:
(1)每個加密組長度的確定。將1~64的序號寫在64張紙片上,并通過隨機抽取的方式獲得一組數(shù)字(共4個):9,43,55,15。
(2)每個加密組首宏塊位置的確定。將1— 300的序號寫在300張紙片上,并通過隨機抽取的方式獲得一組數(shù)字(共4個):127,256,204,49。例如,圖6(a)的宏塊總數(shù)為320,考慮到加密組本身的長度,因而將首宏塊的位置人為限制在300范圍內(nèi),這并不會對統(tǒng)計產(chǎn)生較大影響。
(3)在獲得的每個加密組中,以首宏塊為標準,在其后的每一個宏塊中,凡是其同頻系數(shù)是否為零的情況與首宏塊不符合的,就使該頻度處的值加1。
統(tǒng)計結(jié)果如圖2所示,這里只羅列了宏塊的第3個亮度塊的情況,圖中已經(jīng)表明了3個區(qū)域的劃分??梢?,這4對分界線標號的平均比值約為4,即近似滿足式(1)的關(guān)系,式中a和b分別是第1條分界線和第2條分界線的標號。圖中分界線的標號定義為所在位置處的DCT系數(shù)的2個腳標的和,如圖1所示,比如,左上角的那條分界線(簡稱為第1條分界線)的標號為3,右下角的那條(簡稱為第2條分界線)的標號為9。
![]()
因此,只要求出第1條分界線的位置,就可以推出第2條分界線的位置。找到每個8×8塊的最后一個DCT系數(shù),所謂“最后”,是指按Zig - Zag排序后處在1×64序列的最后一個非零系數(shù)。計算并記錄該系數(shù)的位置值,這個值等于該系數(shù)在原8×8塊中的兩個腳標的和,比如在圖3中,黑點系數(shù)的位置值為6。求出加密組內(nèi)所有最后DCT系數(shù)的位置值的平均值,將該值作為第2條分界線的標號。

2、加密參數(shù)的傳遞
采用綜合加密算法進行加解密的雙方必須使以下參數(shù)保持一致,才能正常運行:密鑰、各加密組的長度、塊內(nèi)第2條分界線的標號。對于密鑰,由于加解密雙方都保存著相同的密鑰表,并且按照某種規(guī)律從中提取密鑰。因而,在加解密過程中是不需要傳遞密鑰的。對于各加密組的長度,和密鑰一樣,加解密雙方可按照相同的算法來確定整個視頻序列中每一個加密組的長度值。但和密鑰不同的是,這里存在一個同步的問題。在一個視頻序列中,若某個宏塊丟失,將會導致其后所有加密組的錯位,從而在解密時就失去同步。值得慶幸的是,在當前的所有壓縮編碼標準中,對壓縮后的宏塊都有一個標號,解密方就可以利用這個標號來實現(xiàn)同步,而不是根據(jù)實際接收到的宏塊個數(shù)來確定加密組的起始位置。因而,加密組的長度參數(shù)在加解密雙方是不需要傳遞的。對于塊內(nèi)第2條分界線的標號,是根據(jù)加密組DCT系數(shù)的分布情況計算出來的,是根據(jù)圖像的內(nèi)容自適應(yīng)更改的。斛密方不可能事先知道第2條分界線的標號,也不能夠從加密后的DCT系數(shù)中計算得到。因而,這是必須通過傳遞才能告知解密方的參數(shù)。當知道a值就能夠求出b值,且一般情況下a<b,因而傳遞第1條分界線的標號比傳遞第2條分界線的標號要更為合理些,這可使對應(yīng)的Huffman碼字較短。
因此,在綜合加密算法中,傳遞的是第1條分界線的標號。
3、密 鑰
對于每一次加密計算,都需從密鑰表中獲得對應(yīng)的密鑰,這是一個對存儲器的訪問過程,通常會占用一個總線周期。確定加密組長度的過程也是一個查找過程。因而,若這兩種參數(shù)通過一次查找就可全部獲得,則可以減少一次對存儲器的訪問開銷。要達到這一目的是很簡單的,只要將這兩個參數(shù)放置在查找表的同一個表項中即可。然而,在一個視頻流中,同類型幀的加密組長度與加密組序號之間的對應(yīng)關(guān)系每50幀就重復一次,這將導致所使用的密鑰也會每50幀重復一次。若欲使密鑰與加密組長度之間不具有這樣的綁定關(guān)系,即對于每一個加密組,密鑰是可任意選擇的,那么,就必須對密鑰單獨進行一次存儲
器的訪問,并為所有的加密組單獨生成密鑰表項。欲使密鑰使用的重復頻率低予每50幀一次,則表項的總量將是巨大的。因此,為不增加算法的計算復雜度和對存儲器的訪問次數(shù),綜合加密算法將密鑰與加密組長度綁定在一起,存放在查找表的同一個表項中。
每幀的平均加密組個數(shù),如表1所示。每個宏塊共有6個小塊,50幀內(nèi)包含的加密組的總和為7 000。密鑰空間為42 000。這個值可用16比特的二進制,即2個字節(jié)表示。

4、分界線標號在加密組中位置
由于加密組的最大長度為255,因而分界線標號在加密組中位置只需用1個字節(jié)來表示。為了增加對該參數(shù)傳輸可靠性,需采用一數(shù)多傳的策略。是否需要對每一個放置該參數(shù)的位置都分別表示呢?其實,沒有這個必要。因為隱藏分界線標號所放位置的目的,是為了避免加密組同步信息的暴露。只要這個放置位置在不同的加密組之間是變化的,則同一加密組中一數(shù)多傳的各個參數(shù)間的位置是否具有相對的變化是不重要的‘們。綜合加密算法規(guī)定:對每個分界線標號在加密組中的位置參數(shù)只傳2次,中間間隔2個宏塊,只標出第一個放置的位置。
分界線標號的放置位置同樣是通過查找的方式獲得的。由于該參數(shù)是和加密組一一對應(yīng)的,因而可以同加密組長度參數(shù)和加密密鑰共同存于一個表項中。這樣,通過對存儲器的一次訪問,就可將3個參賽全部取出。圖4表示的是查找表表項中3個參數(shù)的存放情況。

5、DCT系數(shù)的置亂處理過程
綜合加密算法采用線性反饋移位寄存器作為隨機序列發(fā)生器,圖5所示的是16級移位寄存器。假設(shè)在加密處理以前,已經(jīng)獲得了足夠大的緩沖區(qū),緩沖區(qū)的結(jié)構(gòu)和加密組的結(jié)構(gòu)一樣,也是由宏塊組成的,只不過這些塊內(nèi)沒有數(shù)據(jù)。對于長度為俺,B區(qū)DCT系數(shù)為m個的加密組。其置亂處理過程如下:
(1)將16位的密鑰送人移位寄存器。
(2)先進行16次移位操作。
(3)其后每移位一次就進行如下操作;
①將最新輸出的log2n位數(shù)據(jù)(設(shè)為x)和n比較,若x≤n,則將加密組內(nèi)第x塊的A區(qū)系數(shù)從該加密組剔除。并存入緩沖區(qū)中塊號最小的空塊內(nèi),同時加密組的長度減1,即n= n-1,若x>n,不做處理。
②將最新輸出的log2m位數(shù)據(jù)(設(shè)為y)和m比較,若y≤m,則將加密組所有B區(qū)的第y個系數(shù)從B區(qū)剔除,并存人緩沖區(qū)相應(yīng)各塊的B區(qū)中序號最小的空位置處,同時加密組的長度減1,即m=m-1,若y>m,不做處理。
(4)以上循環(huán)滿足以下任一條件就結(jié)束:
(a)所有塊的A區(qū)系數(shù)和所有的B區(qū)系數(shù)都被移入緩沖區(qū)。
(b)移位次數(shù)(不包括最開始的16次)為療和拼中最大值的3倍,即3×max(n,m)。
當循環(huán)是根據(jù)b條件結(jié)束的,則將原加密組中剩下的部分數(shù)據(jù)按順序存入緩沖區(qū)的剩余空間內(nèi)。
(5)將緩沖區(qū)的全部系數(shù)移回加密組。

三、加密算法的實驗結(jié)果
由于加密所需的參數(shù)查找表制作的工作量非常大,利用該表的目的只是為了增加加密的可靠性,由于在算法的可靠性方面目前還不具備實驗的條件,所以,實驗采用的是一個近似的簡化算法。該簡化算法在對圖像加密后的效果方面和對壓縮比的影響方面和原綜合加密算法是一樣的。該簡化算法只用了一個16 b的偽隨機二進制碼作為密鑰,每個加密組的長度固定為16個宏塊。
1、加密效果
對圖6(a)采用簡化的綜合加密方法進行處理,得到的效果如圖6(b)所示,將該圖與原來的用兩種算法得到的圖像分別進行比較,發(fā)現(xiàn)綜合加密算法的加密效果比頻度域置亂算法要好,和全Zig - Zag置亂算法的加密效果相當。
另外,由于綜合加密算法對絕大多數(shù)的DCT系數(shù)進行了文件加密處理,采用簡單的過濾方式對加密后的圖像進行處理是無法恢復原圖像信息的。比如,將圖6(b)中加密了的全部DCT系數(shù)屏蔽掉(即全部置零)后得到的圖像幾乎完全不可恢復,如圖6(c)。不像頻度域加密那樣,某些高頻信息清晰可見。由于圖6(b)中未加密的高頻系數(shù)太少,所攜帶的信息的能量太小,不仔細觀察,幾乎不能感知其存在。

2、 對壓縮比的影響
在不進行加密處理的情況下,對圖6(a)進行壓縮后得到的數(shù)據(jù)量為26703 B,采用簡化算法后得到的壓縮數(shù)據(jù)為29906 B??梢?,該算法使得壓縮比有所下降,下降幅度為12%。和分段Zig - Zag置亂算法使壓縮比下降的幅度15%相比,綜合加密算法略有優(yōu)勢,但比全Zig - Zag置亂算法和頻度域置亂算法的性能要高許多。
小知識之DCTDCT又稱離散余弦變換,是一種與傅立葉變換緊密相關(guān)的數(shù)學運算。在傅立葉級數(shù)展開式中,如果被展開的函數(shù)是實偶函數(shù),那么其傅立葉級數(shù)中只包含余弦項,再將其離散化可導出余弦變換,因此稱之為離散余弦變換。










