1. 程式人生 > >幾種常用的加解密的方法

幾種常用的加解密的方法

參考連結:http://www.drmsoft.cn/DRM_Encryption/How_to_encrypt_video.html

和安一起解決視訊加密的需求,瞭解了一些相關的視訊加解密的方法,故把相關的知識貼在這裡

1. 全部加密(Naive Algorithm)

也就是使用標準 加密方法(比如DES)加密整個視訊流。將視訊位元流同傳統的文字資料同樣對待,沒有利用視訊壓縮後資料流的特殊結 構。這種方法顯然計算量巨大,很難保證視訊的實時傳輸。

2. 選擇性加密(Selective Algorithm)

選擇性 加密是基於信源特徵的視訊加密方法的主要方向,其中可分為以下幾類:

(1) 基本的選擇性加密演算法是基於視訊 IPB幀結構的。這其 中最有代表性且最早提出的一種加密方法是僅僅加密I幀。然而, Agi and Gong 表明由於幀間的相關性和主要是由於P幀和B幀中的I-block沒有加密,這種僅加密I幀的方法不能達 到一個令人滿意的密級。這樣,有人提出加密I幀的同時還應加 密PB幀中的 I塊。但這樣增大 了計算量,同時視訊影象中的運動資訊也沒有被加密,保密性仍不夠好。

於是,有人提出 利用提高視訊序列中I幀頻率的方法來 增加加密的內容從而提高密級。但這樣很明顯會增大加密的資料量,大大增加計算量,同時減小視訊壓縮率。

(2) 僅加密頭資訊的方法:MPEG、H26X序列都按一定結構組織影象資料。例如,圖片組、圖片(幀)、片組、片、巨集塊組、巨集塊等 ,都由一個頭資訊開始,後接影象資料。經編碼後的視訊資料,要按標準規定的特定結構排列組織,收方按相同 的標準結構解碼,才能正確恢復原視訊影象。

該演算法的原理是對這些頭資訊資料加密,將其變成隨 機序列,再與其它資料混合,使接收方在不知道金鑰的情況下難以區分結構資訊資料和視訊資訊資料,更難以知 道資料結構和資料的具體內容,難以按原資料結構解碼接收到的視訊編碼資料,無法獲得原影象,達到加密目的 。

該演算法僅加密頭資訊,安全性較低。因為按照編碼標 準,頭資訊具有固定的位置和內容,所以含資訊量很小,加密的意義不大。只要能分辨出頭資訊和視訊資料,就 可以恢復視訊影象,並且一旦知道頭資訊,金鑰和密碼演算法也很容易破譯。事實上,基於MPEG、H26x等標準的視訊資料結構比較固定,視訊資料本身又有很強的特徵,這種加密方式比較 容易破譯。

該演算法不降低壓縮率。增加計算量很小,適用於各種 標準視訊或影象壓縮編碼資料。

經過該演算法加密的視訊編碼資料沒有通用的資料結構 資訊,全部為隨機序列。為便於合法收方接收,需加入加密同步資訊,或保留原來部分同步資訊,只加密其它結 構資訊。如果加密結構資訊誤碼,合法收方恢復視訊影象也很困難。

(3) Meyer and Gadegast 設計了一種新的似MPEG位元流,稱之為 SECMPEG。SECAM既能使用標準加密演算法DES和RSA又能實現不同級別的密級。但SECMPEG與標準的MPEG不相容,需要設計專門的編解碼器。

第一級:加密所 有的頭資訊(Headers)

第二級:加密所 有的頭資訊(Headers)和I-Block中的DC和AC係數

第三級:加密 I幀和 PB幀中的所有 I-Block

第四級:加密所 有的資料

(4) 選擇性加密的另一個主要的方向是由Bharat Bhargava等提出的加密DCT符號,運動向量MV符號。文獻[5]中將僅加密I幀的DCT符號位的方法稱為VEA演算法。第二種方 法除了加密I幀,還要加密 PB幀的 DCT符號位和運動向量MV的符號位稱之為MVEA演算法。相對保密性要好得多的第三種方法是使用 金鑰加密(如DES或IDEA)的密碼學演算法來對DCT係數或運動向量 MV符號位進行加密 ,作者稱之為RVEA演算法。

選擇性加密的保 密性根據具體使用什麼方法而定,一般選擇性加密的計算量不大,且通常不會增大碼流大小(改變I幀頻率的選擇性 加密演算法除外)。

3. Zig-Zag置亂演算法(Zig-Zag Permutation Algorithm)

Zig-Zag置亂演算法的基本思想:使用一個隨機的置亂序列來代替 Zig-Zag掃描順序,來將各個8×8塊的DCT係數對映成一個1×64向量。

基本演算法由三步組成,步驟如下:

(1)產生一個基數為64的置亂序列表;

(2)把DC係數分成兩個較小值的數。假設 DC是二進位制數d7d6d5d4d3d2d1d0,將它分成兩個數d7d6d5d4和d3d2d1d0,它們的範圍都在[0,15]。然後將DC系 數置為d7d6d5d4,將原最後一個AC係數置為d3d2d1d0。(這種分離處理是基於以下兩點:(1)通常DC係數值 遠大於AC係數值,因此亂序後很容易被識別。分離變小後就難於從AC係數中區分出來;(2)最末一個AC係數作 用很小,通常為0,可以用其存放d3d2d1d0,恢復時取0值,不影響圖象質量,也不增加資料量。)

(3)用隨機置亂序列表將經分離處理的8× 8塊對映成1×64序列(vector)。

該演算法設計者自己指出,上述基本 演算法對已知明文攻擊是脆弱的,因此提供了兩種附加方法增強演算法的安全性(security):

方法1: 將每8個塊分成一組,把8個DC係數組合在一起(每系 數8位,恰好64位),然後運用DES加密。加密的結果按位元組映射回到8個塊中,然後(按上面1~3步驟)用分離 過程和置亂對每塊進行加密。

方法2: 產生兩張不同的置亂序列表(表1和表2),對每個8×8 塊拋擲硬幣,反面用表1,正面用表2。拋幣產生的正反序列和兩張表作為密碼。

Zig-Zag置亂演算法有嚴重的安全性問題[1]。文獻[1]提供兩種可以成功破解該演算法的方法。Zig-Zag置亂演算法速度很 快,不影響視訊的實時傳輸。但是經過加密的視訊壓縮後碼流大小將顯著增加。因為運用非zig-zag順序將8×8塊對映到1×64的向量,將會極大減少連續零個數,從而減少壓縮率。文獻[1]表明 視訊流大小經加密後增加可達46%(表中最大值)。考慮到MPEG視訊流資料量的巨大,這種大小增量是很難容 忍的。

4.改變 Huffman碼錶演算法

改變Huffman碼錶的視訊加密演算法原理是:對於熵 編碼用Huffman編碼的視訊編碼標準,將通用Huffman碼錶修改後使用,修改後的特殊 Huffman碼錶作為金鑰。非法接收方無此特殊碼錶,不能正確解碼視訊(影象)資訊。

該演算法的安全性取決於保持壓縮率不變的前提下, Huffman碼錶的可變空間(密碼空間)。文獻[8]做了定量的分析。

改變Huffman碼錶,一般會降低 壓縮率。Huffman編碼是對資料流中出現頻率高的位組合模式對應短碼字,出現頻率低的位組合模式對應長碼字, 達到縮短平均碼字,壓縮資料的目的。Huffman碼錶通過統計碼流中各種位組合模式出現的概率製作。本演算法在改 變各組合模式對應的Huffman碼字時,保持對應碼字長度不變,即保持了特定出現概率的組合模式對應的特定碼字 長度不變,也就保持了原壓縮率不變。

該演算法完全不增加計算量。適用於使用Huffman編碼的各種視訊和影象壓縮編碼標準和演算法。其缺點是安全性較差(金鑰空間小)。

5. 基於統計規律的視訊加密演算法

基於統計規律的 視訊加密演算法在文獻[1]中稱 之為VEA演算法(Video Encryption Algorithm)。文獻[1]認為,壓縮和 加密之間具有共同點,即兩者都致力於去除冗餘資訊(Redundant information)。經MPEG壓縮編碼的碼流具有一定的隨機性。文獻[1]把碼流分成以位元組為單元的流,每位元組單元的 值為整數0~255。按位元組測試統計(Byte-by-Byte),編碼後位元組值在0~255上的分佈接近均勻,最高的位元組出現 頻率低於0.0178, 方差為10-6。最高相鄰位元組對(digrams:pairs of two adjacent numbers)的出現頻率低於10-4,因此提出以下設想:將I幀分為8或16(通常16)大塊( chunk),在任何chunk中,沒有重複的位元組模式。依據這個設想提出下面的VEA演算法。

(1)設一I幀的某個chunk為如下形式:a1 ,a2,a3,a4,...,a2n-1,a2n。

(2)選擇奇數號的位元組組成奇佇列(Odd List),選擇偶數號的位元組組成偶佇列(Even List)。

(3)將兩個新資料流異或 

(4)選擇一種加密函式(例如DES)來加 密偶佇列a2,a4,...,a2n。得到的密文為:c1,c2,…,cn, E(a2,a4,…,a2n).

容易看出:如果a2a4…a2n沒有 重複模式(repeated pattern),VEA演算法密級就決定於function E。 因為a2,a4,…,a2n對a1,a3,…,a2n-1雖是簡單異或,卻是一次一 密亂碼本(one-time pad)加密金鑰,這是公認非常保密的。

該方法不加密頭資訊結構格式等資料,只加密影象數 據本身。將待加密資料分為兩半,一半用密碼方法(函式E)加密,另一半用簡單異或,因 此總體減少了計算量,提高了計算速度。前一半的計算速度取決於E。

該方法不影響壓縮率。適用於壓縮的視訊(或影象) 編碼資料,而且壓縮效果越好,加密效果也越好。

6. 純置亂演算法 (Pure Permutation Algorithm)

基於上一節中的 統計結果,我們知MPEG視訊的位元組流有一個非常低的位元組對出現頻率。因此,通常的利用資料頻率,位元組對頻率特性等密碼 分析方法對此沒有用(至少很難)。

Pure Permutation Algorithm 應運而生:Pure Permutation Algorithm簡單的置亂位元組流。置亂密碼序列的基數是根據密級和應用需求動態 可變的。比如我們可以用64個數的置亂序列 或 一個長的 I幀的 1/8的置亂序列。

Pure Permutation Algorithm的問題在於它對已知明文攻擊非常脆弱。

一旦通過比較密文和已知原始幀資料,獲取了隨機置亂序列,所有的幀將很容易被破譯。為了找出隨機置亂序列 ,我們需要已知隨機序列長度倍數大小的明文。然而注意到MPEG資料流的單一性(unicity)和幀 大小在同一個數量級上,因此基於Shannon’s Theorem,如果已知一個I幀資料足以破譯整個隨機序列。