第十七個知識點:描述和比較DES和AES的輪結構


第十七個知識點:描述和比較DES和AES的輪結構

這是密碼學52件事中的第17篇.本周我們描述和比較DES和AES的結構.

DES和AES都是迭代分組密碼的例子.分組密碼通過重復使用一個簡單的輪函數來得到它的安全性.輪函數得到一個n-bit的輸入和返回一個n-bit的輸出,其中n是密碼塊的大小.輪數r可以是可變的也可以是固定的.一般來說輪數的增加會增強塊密碼的安全水平.Round函數每輪使用的密鑰都是從主密鑰k獲得的,使用密鑰調度算法將k生成多個k分別使用在不同的輪.解密過程就試每輪的密鑰都是可逆的,解密只需要反過來使用.在DES中,函數需要是不可逆的,但是整個函數是可逆的.對於AES(Rijndael)來說,不僅僅整個函數都是可逆的,每輪函數也都是可逆的.

DES

實際上,DES密碼是Feistel密碼的變種.Feistel密碼有趣的屬性就是每輪的輪函數都是可逆的,無論\(F\)怎么選擇:

\[L_i = R_{i-1} \]

\[R_i = L_{i-1} \oplus F(K_i,L_i) \]

因此,解密形式就是

\[R_{i-1} = L_i \]

\[L_{i-1} = R_i \oplus F(K_i,L_i) \]

通過這種方法,我們可以為函數F選擇任意的函數,並且我們仍然可以得到一個加密函數,它可以使用秘鑰進行反轉。加密和解密功能可以使用相同的代碼/電路。我們只需要以相反的順序使用圓形密鑰來解密。作為Feistel密碼設計的一個變體,DES具有以下明顯的特點:

  • 輪數r是16
  • 塊的長度是64bits
  • 密鑰長度是56bits
  • 輪密鑰\(K_1,K_2...K_16\)每個是48bits
  • 在Feistel網絡最開始和結束都使用了一個置換

總結一下DES密碼對64位明文的加密操作:

  • 執行一個初始的置換
  • 將塊的左半部分和右半部分分開
  • 執行下面的步驟十六輪,每輪有六個步驟
    • 擴展置換,右半部分的32bit被擴展成48bit
    • 上面的48bit和密鑰異或相乘得到48bit長的輸出
    • 將上面的48bit分割成8個6bit的值
    • S-Box:每6bit的值通過8個不同S-Box之一,產生4bit的輸出.每個S-Box是一個四行六列的矩陣.六個輸入和矩陣進行乘積,得到列.Bits 1和6生成行號,bits 2,3,4,5指定列號.最后S-Box的輸出就是這個表中的元素
    • P-Box:我們現在有8個4bit的輸出,把他們組合成一個32bit的值.然后用這個p-box置換,就得到了F的值
  • 將另外半塊加在一起
  • 執行一個最終的置換

DES密鑰調度算法接受56bit的密鑰,這個56bit的密鑰實際上是一個64bit的密鑰,有8bit是校驗位.首先最開始置換這個密鑰(64bit輸入同時56bit輸出,因此丟失了奇偶校驗位).然后用一個叫PC-1的矩陣來置換一下:

1556779448038

這樣就從一個64bit的流中得到了一個56bit的輸出.對這個56bit的輸出,我們分割成左右兩部分\(C_0,D_0\),每個有28bit,然后我們生成一些\(C_i,D_i\),其中\(1 \le i \le 16\).這個算法就是每次循環移動一位或者兩位,具體按照下面的表格:

1556779615661

這樣得到了16個\(C_i,D_i\).每對組合起來還是56bit,在分別用下面的PC-2來置換.生成48bit的密鑰.

1556779703552

注意,對於許多現代應用程序來說,56位的密鑰長度是不夠的,因此通常使用DES時要使用三個密鑰和主密碼的三個迭代。這種版本稱為三重DES或3DES。在3DES中鍵長等於168。還有另一種使用DES三次的方法,但是使用兩個鍵而不是三個鍵,鍵長為112。在這個3DES的雙鍵版本中,我們使用了3DES的基本結構,但是第一鍵和第三鍵是相等的。然而,雙密鑰3DES並不像人們最初認為的那樣安全。

有關實際值(S-Boxes、P-Boxes和所有排列表)的更多細節可以在[1]中找到。

AES

AES算法,不像DES,是一個不依賴Feistel網絡的塊密碼設計方案.然而AES和DES還是有很多相似的地方.它使用一個重復的輪數來獲取安全性.每一輪由替換和置換,還有一個密鑰疊加組成.AES有一個強數學結構,它的大部分操作都是基於\(GF(2^8)\)的.然而不像DES,加解密操作都是不同的.

AES在\(F_2^8[x]\)中用多項式識別32位的字.AES是參數化的,即可以使用128,192,256三種形式.對每一個形式,密鑰長度和輪數都是不同的.

為了讓我們的討論更加簡單,我們僅僅考慮10輪,128bit的情況.AES操作一個內部的4*4的矩陣(S(4,4)),稱為狀態矩陣.每輪密鑰也是一個4*4的矩陣.AES使用下面四個操作.

1556786881092

下面是算法的偽代碼:

AddRoundKey(S, K0) 
for i = 1 to 9 do 
      SubBytes(S) 
      ShiftRows(S) 
      MixColumns(S) 
      AddRoundKey(S, Ki) 
end 
SubBytes(S) 
ShiftRows(S) 
AddRoundKey(S, K10) 

下面是密鑰擴展算法

W0 =K0,W1 =K1,W2 =K2,W3 =K3 
for i = 1 to 10 do 
      T = RotBytes(W4i−1) 
      T = SubBytes(T) 
      T = T ⊕ RCi 
      W4i = W4i−4 ⊕ T 
      W4i+1 = W4i−3 ⊕ W4i 
      W4i+2 = W4i−2 ⊕ W4i+1 
      W4i+3 = W4i−1 ⊕ W4i+2 
end

\[K_i = (W_{i,0},W_{i,1},W_{i,2},W_{i,3}) \]

for all \(i\),\(0 \le i \le 10\)

References: [1] http://www.cs.bris.ac.uk/~nigel/Crypto_Book/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM