金融安全算法介紹系列4——DES

前言:

爲了方便查看博客,特意申請了一個公衆號,附上二維碼,有興趣的朋友可以關注,和我一起討論學習,一起享受技術,一起成長。

在這裏插入圖片描述


1. 定義

1.1 DES:

全稱爲 Data Encryption Standard,即數據加密標準,是一種使用密鑰加密的塊算法,1977 年被美國聯邦政府的國家標準局確定爲聯邦資料處理標準(FIPS),並授權在非密級政府通信中使用,隨後該算法在國際上廣泛流傳開來

DES 密鑰爲 8 個字節共64位,有效密鑰長度爲 56 位,每隔 7 比特會設置一個錯誤校驗位,即每個字節第 8 位爲奇偶校驗位,不參與加解密運算,因此第 8 位不相同的兩個密鑰對同一串明文數據進行加密後得到的結果是相同的。

1.2 2DES:

2DES 指的是密鑰長度爲 16 個字節,是原來單 DES 的兩倍。

1.3 3DES:

也稱爲Triple DES,是三重數據加密算法(TDEA,Triple Data Encryption Algorithm)塊密碼的通稱。它相當於是對每個數據塊應用三次 DES 加密算法。由於計算機運算能力的增強,原版 DES 密碼的密鑰長度變得容易被暴力破解;3DES 即是設計用來提供一種相對簡單的方法,即通過增加 DES 的密鑰長度來避免類似的攻擊,而不是設計一種全新的塊密碼算法。

三重 DES 是使用 DES 進行“加密→解密→加密”這樣的過程,可以表示爲 EDE(Encryption→Decryption→Encryption)。目的是爲了使三重 DES 能夠兼容普通的 DES,當三次 DES 加密使用的密鑰相同時,三重 DES 就等同於普通的 DES。

加密、解密和加密這三個過程使用不同的密鑰,這樣的三重 DES 稱爲 DES-EDE3。三重 DES 的解密過程也是和加密正好相反,按照密鑰 3、密鑰 2、密鑰1 的順序分別執行 “解密→加密→解密” 這樣的順序進行操作。三重 DES 的處理速度不高,效率較低。

在這裏插入圖片描述

2. DES 所需參數

key: 8 個字節共 64 位的工作密鑰(2DES,3DES 祕鑰長度擴展爲 16 字節,24 字節);

data: 8 個字節共 64 位的需要被加密或被解密的數據;

mode: DES 工作方式,加密或者解密。

3. DES 加解密過程

在這裏插入圖片描述

DES 是一種分組加密算法。分組加密算法指的是 DES 每次只能對固定 8 個字節(64位)的數據進行加密或者解密;若數據長度超過 8 個字節,則需要分組,每 8 個字節爲一組,不足 8 個字節的需要填充 8 個字節(進行補位)。

4. DES 加解密方式

4.1 ECB

電子密碼本模式(Electronic codebook)是最簡單的塊密碼加密模式,加密前根據加密塊大小(DES 爲 64 位)分成若干塊,之後將每塊使用相同的密鑰單獨加密,解密同理。

在這裏插入圖片描述
ECB 模式由於每塊數據的加密是獨立的因此加密和解密,故可以並行計算;

而 ECB 模式最大的缺點是相同的明文塊會被加密成相同的密文塊,在某些環境下不能提供嚴格的數據保密性。

數據參考,hex 格式

明文:
	49906f82d1de4320e4096a816579cdad
祕鑰:
	43b88066cf30007e
密文:
	336674a0cdfc74153a78f930e4e22712

4.2 CBC

CBC (Cipher Block Chaining)模式對於每個待加密的密碼塊在加密前會先與前一個密碼塊的密文進行異或,然後再用加密器加密。第一個明文塊與一個叫初始化向量( initialization vector)的數據塊異或。

在這裏插入圖片描述
CBC 模式相比 ECB 有更高的保密性,然而由於對每個數據塊的加密依賴與前一個數據塊的加密,加密過程無法並行。與 ECB 一樣在加密前需要對數據進行填充,不是很適合對流數據進行加密。

常用的模式爲 ECB 和 CBC ,對於 CFB ,OFB 等此處不再介紹。

數據參考,hex 格式

明文:
	9e04f099dcef0e375b4e32c940c3f408
祕鑰:
	9b970c594cf8df52
IV:
	f51baf08b595f304
密文:
	e9abb65d1b14bd4383460b87a3c0d7c9

5. 填充方式

5.1 ZeroPadding

數據長度不對齊時使用 0 填充,否則不填充。

eg:

... | DD DD DD DD DD DD DD DD | DD DD DD DD 00 00 00 00 |

5.2 PKCS7Padding

如果數據長度需要填充 n(n>0) 個字節纔對齊,那麼填充 n 個字節,每個字節數值爲 n;如果數據本身已經對齊,則填充一塊長度爲塊大小的數據,每個字節都是塊大小。

... | DD DD DD DD DD DD DD DD | DD DD DD DD 04 04 04 04 |

5.3 PKCS5Padding

塊大小固定爲 8 字節,爲 PKCS7Padding 的子集。

加密: 數據字節長度對 8 取餘,餘數爲 m,若 m>0,則補足 8-m 個字節,字節數值爲 8-m,即差幾個字節就補幾個字節,字節數值即爲補充的字節數,若爲 0 則補充 8 個字節的 8 ;

解密: 取最後一個字節,值爲 m,則從數據尾部刪除 m 個字節,剩餘數據即爲加密前的原文。

6. Feistel 網絡

在 Feistel 網絡中,加密的各個步驟稱爲輪 (round),整個加密過程就是若干次輪的循環。DES 是一種 16 輪循環的 Feistel 網絡。

在這裏插入圖片描述
如上圖,輸入 64 bit 的明文,會被左右兩部分,每部分都是 32 bit。右側直接向下,成爲輸出的一部分。同時,右側部分與子密鑰輸入輪函數,輪函數的輸出再與左側部分進行異或,異或後的結果,即爲加密後的左側,左側輸出與右側輸出結合起來,就是經過一輪後的輸出。在 Feistel 網絡的每一輪中,都需要使用不同的子密鑰。這一輪加密的核心是輪函數。

每輪的操作步驟如下:

(1) 將輸入的 64 位分爲左右兩個 32 位;

(2) 將輸入右側的 32 位直接向下落到輸出的右側 32 位;

(3)將輸入右側作爲輪函數的入參輸入;

(4)輪函數根據輸入右側的 32 位和 子密鑰兩個入參,生成一串看上去隨機的比特序列輸出;

(5)將輪函數的輸出和輸入左側 32 位進行異或運算,結果向下落到輸出的左側 32 位。

在 Feistel 網絡中,每完成一輪,就會將左右兩側進行對調,然後使用不同的子密鑰再繼續進行一輪的運算,如此循環往復,經過多輪循環後,就得到最後的加密結果。DES 就是經過 16 輪循環的 Feistel 結構加密算法。

在這裏插入圖片描述
解密步驟和加密步驟完全相同的,只不過子密鑰的順序是逆序的。因爲要和之前加密的順序配合在一起。假設是 n 輪網絡,子密鑰 1 - n,要想還原成明文,異或的順序要逆序反過來,這樣才能利用 a ⊕ a = 0,異或的結合律,還原明文。


參考:

  1. Block cipher mode of operation
  2. DES
  3. 3DES
  4. 常用加解密算法總結1-DES、TDES、3DES
  5. 安全體系(一)—— DES算法詳解
  6. Padding (cryptography)
  7. 對稱加密和分組加密中的四種模式(ECB、CBC、CFB、OFB)
  8. DES算法
  9. 漫遊對稱加密算法
  10. Crypto Stuff
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章