分組密碼在加密過程當中不是將明文按字符逐位加密,而是首先要將待加密的明文進行分組,每組的長度相同,而後對每組明文分別加密獲得密文。加密和解密過程採用相同的密鑰,稱爲對稱密碼體制。算法
例如將明文分爲\(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)未泄漏,它也應是安全的。 )前提下,提出了設計密碼系統的兩個基本方法——擴散和混淆,目的是抗擊攻擊者對密碼系統的統計分析。設計
1949年,香農在他的論文中提出了一種乘積密碼,實現混淆和擴散。乘積密碼一般伴隨一系列置換與代替操做,常見的乘積密碼是迭代密碼。許多分組密碼重複一個或幾個步驟:代替而後換位,以後再代替,再換位等,而且每一個步驟的過程都由密鑰來控制。目前的大多數分組密碼同時使用代替-置換網絡以達到混淆和擴散的目標。 代替-置換網絡是由多重代替變換(S)和置換變換(P)構成,以下圖所示,S代替操做起到混淆的做用,P置換操做起到擴散的做用。3d
最典型的乘積密碼是在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網絡結構實現與如下參數和特性有關:
初始置換 \(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表示密匙兩個部分。
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-擴展運算是擴位運算,將32比特擴展爲48比特,用方陣形式能夠容易地看出其擴位其中粗方框中的爲原始輸入數據,邊上的兩列是擴展數據。最右列是第二列(原數據的第一列)向上循環移動一位,最左列是倒數第二列(原數據的最後一列)向下循環移動一位。
函數F將擴展置換獲得的48位輸出與子密鑰 \(k_i\)(48位)進行異或運算。
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置換是對8個S盒的輸出進行變換,能夠擴散單個S-盒的效果,以下圖所示,規則同 \(IP\) 和 \(IP^{-1}\)。
最後再來看一眼總流程,在執行16輪後,執行逆初始置換。
因爲使用了Feistel網絡結構,所以DES的解密和加密使用同一算法,但子密鑰使用的順序相反。
DES運用了置換、替代、代數等多種密碼技術,算法結構緊湊,條理清楚,並且加密與解密算法相似,便於工程實現。然而從DES誕生之日起人們就對它的安全性持懷疑態度,並展開了激烈的爭論,主要的反對意見以下:
對DES的S盒,迭代次數,密鑰長度等的設計準則有爭議
由於DES算法中的參數都是固定的,人們擔憂若在算法是否存在後門,在這些爭議中,對S盒的設計準則的質疑最爲強烈。由於:除了S盒之外,DES中的全部運算都是線性的(如計算兩個輸出的異或,先造成兩個輸入的異或計算輸出其結果都是相同的)。所以,S盒做爲DES的非線性組件對安全性是相當重要的。
S盒的設計準則尚未徹底公開,咱們仍然不知道S盒的構造中是否使用了進一步設計的準則。這也令人們的猜想沒法獲得消除,關於S盒的爭議仍在繼續。關於S盒的設計,密碼學家在這方面作出了許多工做,發表了大量的文獻,能夠參考一些文獻得到進一步的知識。
DES存在一些弱密鑰和半弱密鑰
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有這樣那樣的不足,可是做爲第一個公開密碼算法的密碼體制成功地完成了它的使命,它在密碼學發展歷史上具備重要的地位。
太多了,這一段暫時不整理了。
也叫電子碼本模式,是最簡單的模式,直接利用加密算法分別對分組數據組加密。明文分紅64比特的分組進行加密,必要時填充,每一個分組用同一密鑰加密,一樣的明文分組獲得相同的密文。
ECB模式的特性:
也叫密碼分組連接模式,比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}\)及後面的分組解密將不會受中錯誤比特的影響。
DES是分組長爲64比特的分組密碼。下圖是CFB(Cipher Feed Back)模式示意圖。設傳送的每一個單元(如一個字符)是\(j\)比特長,一般取\(j=8\),與CBC模式同樣,明文單元被連接在一塊兒,使得密文依賴是前面全部的明文。
CFB模式的特性 :
OFB(Output Feed Back)模式的結構相似於CFB,將分組密碼算法做爲一個密鑰流產生器,其輸出的j比特密鑰直接反饋至分組密碼的輸入端,同時這j比特密鑰和輸入的j比特明文段進行異或運算,以下頁圖所示。不一樣之處以下:OFB模式是將加密算法的輸出反饋到移位寄存器,而CFB模式中是將密文單元反饋到移位寄存器,克服了CBC和CFB的錯誤傳播所帶來的問題。
OFB模式的特性:
計數器模式,與CFB、OFB模式相似,CTR(Counter)模式也可將分組密碼轉換爲流密碼,使用與明文分組規則相同的計數器長度產生密鑰流,與明文分組進行異或。加密不一樣的分組所使用的計數器值必須不一樣,解密採用相同方案,可是使用加密函數而非解密函數。
CTR模式的特性: