Encryption

DES算法中如何生成每輪密鑰?

  • November 4, 2021

我正在閱讀我在網上找到的關於加密 DES 算法的幻燈片,我對每輪密鑰的生成有點困惑。從下面的幻燈片中,我了解到每個輪密鑰都是通過根據輪次向左移動 1 位或 2 位來獲得的。我不明白的是左半邊C_i和右半邊的排列D_i

在幻燈片中,它說左半部分C_i14 17 11 24 1 5 3 28 15 6 21 19 23 19 12 4 26 8 16 7 27 20 13 2。這個例子中的數字是隨機的嗎?我正在閱讀的一本教科書也使用相同的數字進行回合C_i,我看不到這裡的聯繫。C_0不包含14,所以我不太確定左移位是如何導致14fromD到 to 的C。我誤解了這裡的問題嗎?

滑動

數字 $ {14,17,11,24,1,5,3,\dots} $ 來自置換選擇PC-2。那麼讓我解釋一下 16 輪 DES 密鑰調度:

DES 輸入密鑰大小為 64 位,其中包含 56 位密鑰和 8 個奇偶校驗位。奇偶校驗位是每 8 位的第 8 位(按字節)。所以它們都是八的倍數: $ {8, 16, 24, 32, 40, 48, 56, 64} $ . 置換選擇PC-1用於從 64 位輸入密鑰中刪除這些位。所以PC-1給出 56 位作為輸出。

在輪 $ i\ (1 \le i \le 16) $ , 有一個 56 位輸入, $ C_{i-1} $ 作為左半邊和 $ D_{i-1} $ 作為右半部分(每個 28 位)。這兩半向左旋轉(為了解密,使用右旋轉)。對於加密,輪換金額 $ {1, 2, 9, 16} $ 是一個,在其他回合中是兩個。對於解密,一輪右旋轉一位 $ {2,9,16} $ 在所有其他輪次中向右旋轉兩位。由於旋轉的輸入是 $ C_i $ 和 $ D_i $ ,旋轉的輸出是 $ C_{i+1} $ 和 $ D_{i+1} $ 傳遞到下一輪( $ i+1 $ ) 作為輸入。

畢竟,圓 $ i $ 有一個 48 位輸出,命名為 $ K_i $ . 這個子密鑰是從置換選擇PC-2生成的,它需要 $ C_i $ 和 $ D_i $ 作為 56 位輸入和輸出子密鑰。

現在我想你現在明白這些數字是從哪裡來的了。整個過程如下圖所示(加密):

DES加密

圖片來源:Christof Paar 和 Jan Pelzl 的《理解密碼學》,第 3 章

引用自:https://crypto.stackexchange.com/questions/33072