分組密碼是將明文訊息編碼表示後的數字序列劃分成長為n的組,每個組(可稱為長度為n的向量)分別在金鑰控制下變換成等長的輸出數字序列。
其加密函式e:v_n × k → v_m。 其中v_n和v_m分別為n維和m維的向量空間,k為金鑰空間。它與流密碼不同之處在於輸出的每一位數字不是只與相應時刻輸入的明文數字有關,而是與一組長為n的明文數字有關。這種密碼實質上是字長為n的數字序列的代換密碼。
混淆(confusion)是一種加密操作,使得金鑰與密文之間的關係變得模糊(通過代換器來完成,即s盒)
擴散(diffusion)是一種加密操作,使得乙個明文符號能夠分散為多個密文符號,其目的是隱藏明文本元出現次數的統計概率。
feistel提出利用乘積密碼可獲得簡單的代換密碼,乘積密碼指順序地執行兩個或多個基本密碼系統,使得最後的密碼強度高於每個基本密碼系統產生的結果。其思想實際上是shannon提出的利用乘積密碼實現混淆和擴散思想的具體應用。
feistel加密結構
加密演算法的輸入是分組長為2w的明文和乙個金鑰k,將每組明文分成左右兩半l和r,在進行完n輪迭代後,左右兩半再合併到一起產生密文分組。第i輪迭代的前一輪輸出的函式:
l_i = r_
r_i = l_ xor f(r_, k_i)
feistel解密結構
解密過程本質上和加密過程是一樣的,演算法使用密文作為輸入,但使用子金鑰k_i的次序與加密過程相反。這一特徵保證了解密和加密可採用同一演算法。
明文分組長度為64位元,金鑰長度為56位元。在加密過程中將有三個階段:
乙個初始置換ip,用於重新排列明文分組的64位元資料。
進行具有相同功能的16輪變換,每輪變換中都有置換和代換運算,在第16輪變換的輸出後,將結果分成左右兩半,並交換次序。
最後再經過乙個逆初始置換逆ip從而產生64位元密文。
這裡需要注意的是,無論是初始置換還是最終的逆初始置換,都不能增減des的安全性。其設計的初衷並不被人所知,但是看起來其目的是將明文重新排列,使之適應8-bit暫存器。其對映規則如下:矩陣為8×8矩陣,自左至右,自上至下依次排位,矩陣中的某次位數目即為明文中該次位的位元值對映到buffer的偏移量。
f函式在des的安全性中起到了至關重要的作用,f函式的作用是將上一輪的右半邊的結果,以及該輪所獲得的金鑰作為輸入資料,輸出結果是通過異或操作來加密。
在f函式最開始時,首先將32-bit資料擴充套件為48-bit資料,參照的方法為通過e矩陣進行擴充套件。擴充套件(或稱為對映)方法與ip形似。
第二步,48-bit的結果將會按位與該輪對應的子金鑰(48位)異或。
第三步,將48-bit資料切分成8個6-bit資料,分別作為8個不同的代換盒子(s-box)的輸入資料,s-box用於實現代換操作。每乙個s-box包含64個實體,存放於4×16的矩陣之中。其代換規則如下:取6-bit資料中最高位位元數以及最低位位元數作為行數,剩餘四位在中間的位元數作為列數,由此可以取出s-box中某行某列的數,該數為0-15之間,即輸出結果為4-bit資料。
對於s-box的設計有以下特性:
每乙個s-box都是以6-bit資料作為輸入,4-bit資料作為輸出
輸出資料與輸入資料無線性關係
如果6-bit資料中最高位與最低位的值是確定的,剩餘四位是變化的,則輸出的4-bit資料不得出現重複
如果輸入到s-box中的資料中有一位不同,則輸出的資料必須要求至少有兩位不同
如果輸入到乙個s-box中的兩個資料有在中間位元位上有兩個不同,那麼輸出資料必須至少有兩位不同
如果輸入到乙個s-box中的兩個資料在頭兩個位元位上有不同,在最後兩位上相同,那麼兩個輸出資料必須不同
s-box是des加密中最重要的元素,因為他們實現了非線性加密 : s(a) xor s(b) != s(a xor b)
輸入des的56-bit金鑰首先要經過乙個置換運算,其置換規則與上文ip矩陣類似。這裡需要首先明確一點,des的輸入金鑰通常是64-bit的,真實的56-bit金鑰生成的演算法是:將64-bit分成8組,每組8-bit,僅取每組前7-bit組成56-bit金鑰。每個子金鑰是為48-bit。
56-bit金鑰首先將會分成兩部分,這兩部分將會各自迴圈移位。其移位規則如下:
我們可以發現,16輪過後,兩個子部金鑰正好旋轉了28-bit,即旋轉一周。
在每一輪中,為了生成48-bit子金鑰,需要進行子置換,其輸入資料為旋轉後得到的金鑰捨去8-bit,而後再用乙個6×8的矩陣進行置換,置換規則如上所述。所以,56-bit的金鑰中每一位,都會在16輪中的14輪裡使用到。
des的解密和加密使用同乙個演算法,但是子金鑰使用的順序卻是相反的
因此在解密過程中,子金鑰的迴圈移位規則與加密過程有不同
而在feistel網路中的解密解析如下:
我們可以分析得出:
解密l0 = 加密r16
解密r0 = 加密l16 = 加密r15
解密l1 = 解密r0 = 加密l16 = 加密r15
解密r1 = 解密l0 xor f(解密r0, k16) = 加密r16 xor f(加密l16, k16) = (加密l15 xor f(加密r15, k16)) xor f(加密r15, k16) = 加密l15
如此,可以推算出解密演算法可逆。
分組密碼在加密的時候,明文分組長度是固定的,但在實際應用過程中往往難以保證明文的長度。因此為了能在各種場合使用des,定義了des的四種執行模式:
電碼本(ecb)模式:每個明文組獨立地以同乙個金鑰進行加密,用於傳送短資料
密碼反饋(cfb)模式:每次只處理輸入的位元,將上次密文用作加密演算法的輸入,用以產生偽隨機輸出,再將該輸出與當前明文異或獲取當前密文,主要用於傳送資料流和認證
輸出反饋(ofb)模式:與cfb類似,但本次加密演算法的輸入為前一次加密演算法的輸出,主要用於在有干擾通道上的資料流傳送。
RSA密碼體制
公鑰密碼學中大部分引用了數論的成果,所以必要在介紹rsa密碼體制之前,詳細介紹一下所使用的幾個數論的知識點 歐幾里得演算法主要是解決最大公約數問題,記兩個正整數 r 0 和 r 1 的 gcd 表示 gcd r 0,r 1 在公鑰體系中,安全性依賴於大整數的因式分解通常是不可能的。所以人們通常使用一...
對稱金鑰密碼體制和公開金鑰密碼體制
一 對稱金鑰密碼體制 資料加密標準 des 是對稱分組密碼體制,它的金鑰長度為64位,實際金鑰長度即主金鑰為56位,用於生成每輪加密迴圈體制的金鑰,將64位明文加密為64位暗文。加密迴圈體制位數為16位,從k1,k2.k16,解密過程與之相反,從k16.k1,des的加密金鑰與解密金鑰相同,屬於對稱...
古典密碼 單錶密碼體制
如果明文中不同的位置的同一明文本母在密文中對應的密文字母相同,則稱其為單錶密碼體制。代表性的單錶密碼 1.移位或加法密碼 2.乘數或乘法密碼 3.仿射密碼 4.金鑰短語密碼 下面分別舉乙個例子 1.加法密碼演算法 p c k zm zm ek x x k mod m y c dk y y k mod...