Implementation

用於 8 輪 DES 的旋轉台

  • April 10, 2014

我正在嘗試使用 NIST 論文和關於 DES 的維基百科文章從頭開始實現 DES。

我完成了 16 輪 DES,但我似乎無法讓 8 輪 DES 工作。我想這是因為我把旋轉表弄錯了。我用於 16 輪版本的旋轉表直接來自 Wikipedia 的 DES 補充材料,而 8 輪版本相同,中間取出幾個 2 以使長度為 8。{ 1, 1, 2 , 2, 1, 2, 2, 1 } 用於加密,{ 0, 1, 2, 2, 1, 2, 2, 1 } 用於解密,它使用反向密鑰調度程序進行解密。顯然,這是錯誤的,我找不到用於創建旋轉表的表或算法。

如果有人可以指出我,將不勝感激。

問題是,要使所有密鑰的解密可靠地工作,子密鑰必須相同,以便加密和解密順序顛倒。對於許多 DES 實現,這意味著密鑰調度中的輪換總和應該是 $ 28 $ , C 和 D 寄存器的寬度。

使用說 $ 15,2,2,2,2,2,2,1 $ 而不是你的 $ 1,1,2,2,1,2,2,1 $ 並且您應該飛行(假設程式碼處理這些較大的值,並且不使用在刪除 DES 密鑰調度表中的第一個值之後啟用的優化 $ 1,1,2,2,2,2,2,2,1,2,2,2,2,2,2,1 $ , 這 $ 15 $ 其餘條目是回文)。注意:我已經更改了我的建議值,以便使用的子鍵與上一個中的子鍵匹配 $ 8 $ 標準 DES 中的多輪加密;它重用了 DES 設計人員在根據關鍵時間表製作 PC-2 時所做的一些工作。

或者,使用 $ 1,1,2,2,2,2,2,2 $ 用於加密並通過 $ 14 $ 解密前。這樣我們使用與第一個相同的子鍵 $ 8 $ 標準 DES 中的多輪加密。


更新:修改後的問題告訴我們,實現使用不同的表進行加密和解密。在這種情況下, $ 1,1,2,2,2,2,2,2 $ 用於加密和 $ 14,2,2,2,2,2,2,1 $ 解密應該可以工作(在相反方向和使用生成的子密鑰之前進行旋轉計數)。第一個解密值必須等於加密值之和 $ \pmod{28} $ . 通過刪除第一個加密值並反轉列表來獲得以下解密值。

注意:通過考慮旋轉計數與 PC-2 的相互作用,應注意所有密鑰位的使用大致均勻且有規律。因為懶所以先保留原圖 $ 8 $ $rotations,這至少在這方面不是災難性的。

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