應用密碼學——分組密碼

ww0809發表於2024-03-22

DES

演算法描述

明文分組為64位,初始金鑰64位,有效金鑰56位,輸出密文64位,16輪迭代的分組對稱密碼演算法。由置換、替換、異或、迴圈移位組成。

流程圖

image

加密過程

金鑰生成

  1. 64位初始金鑰先進行一個PC-1置換,目的是根據置換表去掉8位奇偶校驗位,並打亂剩下的56位有效金鑰的順序。將這56位分成C0和D0
  2. 兩部分分別根據LSi的值進行迴圈左移,左移後透過PC-2置換,然後合併作為48位子金鑰。
  3. 整個des中一共會左移十六輪,第1、2、9、16次是左移一位,其他都是左移兩位。

處理明文

  1. 初始置換IP
    先對明文(64位)進行一個初始置換IP,將明文分為L0、R0兩個32位塊。
    該過程並不會增加DES的安全性,但這種做法在16位和32位的匯流排出現之前將使得資料更容易載入到DES晶片中。
  2. 迭代
    進行16輪Feistel加密。每一輪都用一個從初始金鑰匯出的48位且每次不同的金鑰(金鑰生成過程如上文所述)。
    每一輪操作:
    (1)E擴充套件置換
    用E置換處理每一輪的R0。目的是把32位的R0擴充套件為48位,和金鑰長度相同,以進行異或操作。
    置換過程就是:針對4位元×8組,把每一組的第一位放在上一組的最後一位後面,把每一組的最後一位放在下一組的第一位前面。
    置換之後的R與該輪金鑰進行異或。
    (2)S盒替換
    把異或之後得到的48位送入透過8個內有不同替代表的S-盒,進行替代運算。每個S盒有6位輸入4位輸出,48位輸入分為8個6位元的分組,一個分組對應一個S盒。每一個S盒中是4行16列的表,盒中的每一項都是一個4位的數。用6位輸入的第一位和第六位確定所在行,中間四位確定列,對應一個格子裡的值,即該組的替代運算結果。
    (3)P盒置換
    S盒代替運算的32位輸出輸入P盒進行置換。
    (1)(2)(3)加起來構成f函式
    (4)左右交換
    P盒置換的結果與64位分組L0異或,然後左、右半部分交換,開始下一輪。
    注意第16輪中,最後一步不進行左右交換,而是直接把左右合併。
  3. 初始IP逆置換
    第16輪結束後,左右合併的結果進行IP逆置換。最後得到密文。

相關文章