分組密碼體制【密碼學筆記】

分組密碼的基本概念

​ 分組密碼在加密過程當中不是將明文按字符逐位加密,而是首先要將待加密的明文進行分組,每組的長度相同,而後對每組明文分別加密獲得密文。加密和解密過程採用相同的密鑰,稱爲對稱密碼體制。算法

​ 例如將明文分爲\(m\)塊:\(P_{0},P_{1},P_2,…,P_{m-1}\),每一個塊在密鑰做用下執行相同的變換,生成\(m\)個密文塊:\(C_0,C_1,C_2,…,C_{m-1}\),每塊的大小能夠是任意長度,但一般是每塊的大小大於等於64位(塊大小爲1比特位時,分組密碼就變爲序列密碼)。安全

以下圖所示是通訊雙方最經常使用的分組密碼基本通訊模型。網絡

​ 一個分組密碼系統(Block Cipher System,簡稱BCS)能夠用一個五元組來表示:\(BCS=\{P,C,K,E,D\}\)。其中,P(plaintext)、C(ciphertext)、K(key)、E(encryption)、D(decode)分別表明明文空間、密文空間、密鑰空間、加密算法、解密算法。app

\(X=\{x_0,x_1,…,x_{n-2},x_{n-1}\}\)爲一組長度爲 \(n\) 的明文塊,在密鑰\(K=\{k_0,k_1,…,k_{t-1}\}\)的加密做用下獲得密文塊\(Y=\{y_0,y_1,…,y_{m-2},y_{m-1}\}\),其中\(x_i,y_j,k_r∈GF(2)\),且
\[ 0≤i≤n-1,0≤j≤m-1,0≤r≤t-1 \]
  若\(n=m\),明文塊長度等於密文塊長度,稱之爲無數據擴展和壓縮的分組密碼
  若\(n>m\),明文塊長度大於密文塊長度,稱之爲有數據壓縮的分組密碼
  若\(n<m\),明文塊長度小於密文塊長度,稱之爲有數據擴展的分組密碼函數

爲了保證分組密碼的安全強度,設計分組密碼時應遵循以下的基本原則:測試

  • 分組長度足夠長,防止明文窮舉攻擊,例如DES(Data Encryption Standard)、IDEA(International Data Encryption Algorithm)等分組密碼算法,分組塊大小爲\(64\ bit\),在生日攻擊下用\(2^{32}\)組密文,破解成功的機率爲\(0.5\),同時要求\(2^{32}×64\ bit=2^{15}\ MB\)大小的存儲空間,故在目前環境下采用窮舉攻擊DES、IDEA等密碼算法是不可能的\(2^{15}MB\),也便是\(32G\)內存,這個是作獲得的。作不到的是窮舉 \(2^{32}\) 組密文。);而AES明文分組爲\(128\ bit\),一樣在生日攻擊下用\(2^{64}\)組密文,破解成功的機率爲\(0.5\),同時要求存儲空間大小爲\(2^{64}×128\ bit=2^{48}\ MB\),因此採用窮舉攻擊AES算法在計算上就更不可行。加密

  • 密鑰量足夠大,同時須要儘量消除弱密鑰的使用,防止密鑰窮舉攻擊,可是因爲對稱密碼體制存在密鑰管理問題,密鑰也不能過大。
  • 密鑰變換足夠複雜,能抵抗各類已知攻擊,如差分攻擊、線性攻擊、邊信道攻擊等,即便得攻擊者除了窮舉攻擊外找不到其它有效的攻擊方法。
  • 加密和解密的運算簡單,易於軟硬件高速實現。
  • 數據擴展足夠小,通常無數據擴展。
  • 差錯傳播儘量小,加密或解密某明文或密文分組出錯,對後續密文解密的影響也儘量小。spa

分組密碼的原理

20世紀40年代末,香農在遵循柯克霍夫原則( 即便密碼系統的任何細節已爲人悉知,只要密匙(key)未泄漏,它也應是安全的。 )前提下,提出了設計密碼系統的兩個基本方法——擴散和混淆,目的是抗擊攻擊者對密碼系統的統計分析。設計

  • 擴散:將明文的統計特性(每一個字母出現的頻度)散佈到密文中去,實現方式是使得明文的每一位影響密文中多位的值,等價於密文中每一位均受明文中多位的影響。在分組密碼中,對數據重複執行某個置換,再對這一置換做用於一函數,可得到擴散。
  • 混淆:使密文和密鑰之間的統計關係變得儘量複雜,使得攻擊者沒法獲得密文和密鑰之間的統計,從而攻擊者沒法獲得密鑰。

代替—置換網絡結構(S-P結構)

  1949年,香農在他的論文中提出了一種乘積密碼,實現混淆和擴散。乘積密碼一般伴隨一系列置換與代替操做,常見的乘積密碼是迭代密碼。許多分組密碼重複一個或幾個步驟:代替而後換位,以後再代替,再換位等,而且每一個步驟的過程都由密鑰來控制。目前的大多數分組密碼同時使用代替-置換網絡以達到混淆和擴散的目標。 代替-置換網絡是由多重代替變換(S)和置換變換(P)構成,以下圖所示,S代替操做起到混淆的做用,P置換操做起到擴散的做用。3d

Feistel密碼結構

  最典型的乘積密碼是在1973年由Feistel提出的,整個處理過程包括多輪的代替和置換操做,主密鑰可生產一個子密鑰集\(k_i\),每輪使用一個子密鑰。在每輪中,明文被分爲左右兩部分,分別記爲\(L_0\)\(R_0\),兩部分分別進行交換,其中一個部分與子密鑰混合,進行相應變換(能夠把F視爲一個函數),其中 \(\oplus\) 是異或運算。

在進行完 \(n\) 輪迭代以後,左右兩半合併在一塊兒再產生密文。示意圖以下

加密過程邏輯關係
\[ L_{i}=R_{i-1}\\ R_{i}=L_{i-1}\oplus F(R_{i-1},k_{i}) \]
解密過程邏輯關係
\[ R_{i-1}=L_i\\ L_{i-1}=R_{i}\oplus F(L_{i},k_{i}) \]
加密解密過程使用的是同一個F函數。

爲了保證分組密碼的安全性,與分組密碼算法原則很是相似,Feistel網絡結構實現與如下參數和特性有關:

  • 分組大小:分組越大則安全性越高,但加密速度就越慢。分組密碼設計中最爲廣泛使用的分組大小是64比特。
  • 密鑰大小:密鑰越長則安全性越高,但加密速度就越慢。如今一般使用128比特的密鑰長度
  • 輪數:多輪結構具備更高足夠的安全性。通常輪數取爲16。
  • 子密鑰產生算法:該算法的複雜性越大,則密碼分析的困難性就越大。
  • 輪函數(F):輪函數的複雜性越大,密碼分析的困難性也越大。

DES算法(數據加密標準)

基本屬性

  • 分組長度爲64 bits (8 bytes)
  • 密文分組長度也是64 bits。
  • 密鑰長度爲64 bits,有8 bits奇偶校驗位,有效密鑰長度爲56 bits。
  • 加解密使用同一算法。
  • 算法主要包括:初始置換IP、16輪迭代的乘積變換、逆初始置換\(IP^{-1}\)以及16個子密鑰產生器。

整體流程圖

初始置換

初始置換 \(IP^{-1}\)。將64 bit明文的位置進行置換,獲得一個亂序的64 bit明文組,以下圖,將本來在第58位的字符放到第1位;將本來在第50位的字符放到第2位,依次。置換完成後分紅左右兩段,每段爲32 bit,以\(L_0\)\(R_0\)表示。

逆初始置換

逆初始置換 \(IP^{-1}\)將16輪迭代後給出的64 bit組進行置換,獲得輸出的密文組。輸出爲陣中元素按行讀得的結果。

是IP的逆操做,知足\(Y=IP^{-1}(X)=IP^{-1}(IP(M))\),好比剛纔把第1位字符放到了第40位,如今就要換回來。

\(IP\)\(IP^{-1}\) 在對加密意義上做用不大,它們的做用在於加密過程打亂原來輸入的明文順序。

密鑰生成

密匙用於變換時參與F函數運算。

其中第八、1六、......64位是奇偶校驗位,不參與DES運算。

PC表示縮小選擇換位(置換選擇),LS表示循環左移,C、D表示密匙兩個部分。

置換選擇(PC)

輪結構(F變換)

DES採用了典型的Feistel結構,一次迭代過程圖以下

知足
\[ L_{i}=R_{i-1}\\R_{i}=L_{i-1}\oplus F(R_{i-1},k_{i}) \]
F函數的變換過程以下,DES算法的安全性關鍵在於非線性函數F的性質。F以長度爲32位的比特串做爲輸入,產生的中間結果爲48位,並在最終產生長度爲32位的比特串做爲輸出。

選擇擴展運算 E盒

E-擴展運算是擴位運算,將32比特擴展爲48比特,用方陣形式能夠容易地看出其擴位其中粗方框中的爲原始輸入數據,邊上的兩列是擴展數據。最右列是第二列(原數據的第一列)向上循環移動一位,最左列是倒數第二列(原數據的最後一列)向下循環移動一位。

與子密鑰異或

函數F將擴展置換獲得的48位輸出與子密鑰 \(k_i\)(48位)進行異或運算。

S盒運算

S盒運算由8個S盒函數構成
\[ S(x_1,x_2,\cdots ,x_{48})=S_1(x_1\cdots x_6)||S_2(x_7\cdots x_{12})||\cdots||S_8(x_{43}\cdots x_{48}) \]
其中,每個S盒函數都是6比特的輸入,4比特的輸出。值就是對應表\(S_i\)\((x_1x_6)_B\) (表示的二進制數)行和\((x_2x_3x_4x_5)_B\)列上的值。

​ S盒是函數F的核心所在,同時,也是DES算法的關鍵步驟。實際上除了S盒之外,DES的其餘運算都是線性的,而S盒是非線性的,它決定了DES算法的安全性。48位的比特串(分爲8個6位分組)在通過8個S盒進行代替運算後,獲得8個4位的分組,它們從新組合在一塊兒造成一個32位的比特串。這個比特串將進行下一步運算:P盒置換。

P盒置換

P置換是對8個S盒的輸出進行變換,能夠擴散單個S-盒的效果,以下圖所示,規則同 \(IP\)\(IP^{-1}\)

最後再來看一眼總流程,在執行16輪後,執行逆初始置換。

DES算法的解密

因爲使用了Feistel網絡結構,所以DES的解密和加密使用同一算法,但子密鑰使用的順序相反。

DES算法的安全性

​ DES運用了置換、替代、代數等多種密碼技術,算法結構緊湊,條理清楚,並且加密與解密算法相似,便於工程實現。然而從DES誕生之日起人們就對它的安全性持懷疑態度,並展開了激烈的爭論,主要的反對意見以下:

  1. 對DES的S盒,迭代次數,密鑰長度等的設計準則有爭議

    ​ 由於DES算法中的參數都是固定的,人們擔憂若在算法是否存在後門,在這些爭議中,對S盒的設計準則的質疑最爲強烈。由於:除了S盒之外,DES中的全部運算都是線性的(如計算兩個輸出的異或,先造成兩個輸入的異或計算輸出其結果都是相同的)。所以,S盒做爲DES的非線性組件對安全性是相當重要的。

    ​ S盒的設計準則尚未徹底公開,咱們仍然不知道S盒的構造中是否使用了進一步設計的準則。這也令人們的猜想沒法獲得消除,關於S盒的爭議仍在繼續。關於S盒的設計,密碼學家在這方面作出了許多工做,發表了大量的文獻,能夠參考一些文獻得到進一步的知識。

  2. DES存在一些弱密鑰和半弱密鑰

  3. DES的56位有效密鑰沒法知足安全性要求

    ​ 1993年,R.Session和M.Wiener給出了一個很是詳細的密鑰搜索機器的設計方案,它基於並行的密鑰搜索芯片,此芯片每秒測試\(5×10^7\)個密鑰,當時這種芯片的造價是10.5美圓,5760個這樣的芯片組成的系統須要10萬美圓,這一系統平均1.5天便可找到密鑰(最差狀況:$ \dfrac {2^{56}-1}{24\times 60\times 60\times 5\times 10^{7}\times 5760} \approx 2.9 $,平均1.5),若是利用10個這樣的系統,費用是100萬美圓,但搜索時間能夠降到2.5小時。可見這種機制是不安全的。

    儘管DES有這樣那樣的不足,可是做爲第一個公開密碼算法的密碼體制成功地完成了它的使命,它在密碼學發展歷史上具備重要的地位。

AES算法

太多了,這一段暫時不整理了。

對稱密碼體制的工做模式

ECB模式

​ 也叫電子碼本模式,是最簡單的模式,直接利用加密算法分別對分組數據組加密。明文分紅64比特的分組進行加密,必要時填充,每一個分組用同一密鑰加密,一樣的明文分組獲得相同的密文。

ECB模式的特性:

  • ECB運行模式在給定的密鑰下,同一明文組總產生一樣的密文組。
  • 具備連接依賴性,各組的加密獨立於其它分組,重排密文分組,將致使相應的明文分組重排。
  • 具備無錯誤傳播的特色,單個密文分組中有一個或多個比特錯誤只會影響該分組的解密結果。
  • 安全性有限。因爲同一明文產生一樣的密文,這會暴露明文數據的格式和統計特徵。

CBC模式

​ 也叫密碼分組連接模式,比ECB模式實現複雜、更安全,所以它是最廣泛使用的對稱密碼運行模式。CBC模式中加密過程第一個明文分組與初始矢量IV(Initial Vector)進行異或運算,然後面的明文分組和前一密文分組也作異或運算,再使用相同的密鑰送至加密算法加密,造成一條鏈,這樣每一個明文分組的加密函數輸入與明文分組之間再也不有固定的關係。

CBC模式的特性:

  • CBC模式各密文分組不只與當前明文組有關,並且經過反饋做用還與之前的明文組有關。在CBC模式下,最好是每發一個消息,都改變IV,好比將其值加1,這樣即便是兩個相同的明文使用相同的密鑰,也將產生不一樣的密文,這樣大大提升了安全性。

  • 錯誤傳播:若某組密文組\(C_j\)出錯時,則會影響到分組\(C_j\)\(C_{j+1}\)的解密(由於\(P_j\)依賴\(C_{j-1}\)\(C_j\)\(P_{j+1}\)依賴\(C_j\)\(C_{j+1}\)),即該組恢復的明文\(P_j\)和下一組\(P_{j+1}\),通常來講徹底隨機的(50%有錯),所以若密文\(C_j\)有錯,但\(C_{j+1}\)以後沒有錯誤,\(C_{j+2}\)及後面的分組解密將不會受中錯誤比特的影響。

CFB模式

DES是分組長爲64比特的分組密碼。下圖是CFB(Cipher Feed Back)模式示意圖。設傳送的每一個單元(如一個字符)是\(j\)比特長,一般取\(j=8\),與CBC模式同樣,明文單元被連接在一塊兒,使得密文依賴是前面全部的明文。

​ CFB模式的特性 :

  • 輸入相同明文,改變IV會致使相同的明文輸入獲得不一樣的加密輸出,IV無需保密。若待加密消息必須按字符(如電傳電報)或按比特處理時,可採用CFB模式。CFB其實是將加密算法DES做爲一個密鑰流產生器,所以操做模式使得咱們能把分組密碼定義爲流密碼。另外,CFB模式除能得到保密性外,還能用於認證。
  • CFB與CBC的區別是反饋的密文長度爲j,且不是直接與明文相加,而是反饋至密鑰產生器。解密採用相同方案,可是使用加密函數而非解密函數。密文分組\(C_j\)依賴於\(P_j\)和前面的明文分組。
  • 在CFB模式中,若一個或多個比特錯誤出如今r比特的密文組\(C_j\)中,則會影響到分組\(C_j\)和後續[n/r]個密文分組的解密(直到n個比特的密文被處理,在此以後出錯的分組\(C_j\)徹底移出移位寄存器)。例如,對於8位(1個字節)的加密,則會產生9字節的錯誤。

OFB模式

​ OFB(Output Feed Back)模式的結構相似於CFB,將分組密碼算法做爲一個密鑰流產生器,其輸出的j比特密鑰直接反饋至分組密碼的輸入端,同時這j比特密鑰和輸入的j比特明文段進行異或運算,以下頁圖所示。不一樣之處以下:OFB模式是將加密算法的輸出反饋到移位寄存器,而CFB模式中是將密文單元反饋到移位寄存器,克服了CBC和CFB的錯誤傳播所帶來的問題。

OFB模式的特性:

  • 與CFB、CBC相同,輸入相同明文,改變IV會致使相同的明文輸入獲得不一樣的加密輸出。
  • OFB模式的傳輸過程當中的比特錯誤不會被傳播。例如Cj中出現一個或多個比特錯誤,在解密結果中只有Pj受到影響,之後各明文單元則不受影響。
  • 與CFB模式相比,更易受到對消息流的篡改攻擊,好比在密文中取1比特的補,那麼在恢復的明文中相應位置的比特也爲原比特的補。所以使得敵手有可能經過對消息校驗部分的篡改和對數據部分的篡改,而以糾錯碼不能檢測的方式篡改,所以對於密文被篡改難以進行檢測。

CTR模式

計數器模式,與CFB、OFB模式相似,CTR(Counter)模式也可將分組密碼轉換爲流密碼,使用與明文分組規則相同的計數器長度產生密鑰流,與明文分組進行異或。加密不一樣的分組所使用的計數器值必須不一樣,解密採用相同方案,可是使用加密函數而非解密函數。

CTR模式的特性:

  • CTR模式可以對多個分組的加、解密進行並行處理,進行異或以前的基本加密處理不依賴明文和密文的輸入。
  • CTR模式能夠看作是OFB模式的一種簡化,它使用計數器來更新輸入分組,而不是反饋。
  • 密文分組的處理與其它密文無關,實現簡單。
相關文章
相關標籤/搜索