密碼學(xué)之資料加密標(biāo)準(zhǔn)(DES)
前言
接著前文的SPN,但是和前文的關(guān)系不大,所以不看前文也照樣可以閱讀本文。

一、Feistel Network
Feistel Network 分為balanced 和 unbalanced 兩種。balanced 的情況下,我們把輸入的長(zhǎng)度為 的bits分成長(zhǎng)度相等的左右兩個(gè)部分(叫做
和
);unbalanced 的情況下,左右兩個(gè)部分長(zhǎng)度不等。
Feistel network 一共有多輪組成,每一輪中,我們通過(guò)一個(gè)key schedule從我們的master key k中抽出我們的round key ,然后我們將右半部分
和我們的
一同輸入到我們預(yù)設(shè)的round function 中
. 然后做一個(gè)XOR運(yùn)算:
,
.


二、Data Encryption Standard (DES)
DES是一個(gè)運(yùn)用Feistel Network來(lái)進(jìn)行加密的流程,輸入的比特序列的長(zhǎng)度(同時(shí)也是block length)為64 bits, master key的長(zhǎng)度為56 bits,一共進(jìn)行16輪Feistel運(yùn)算。
因?yàn)槭?0世紀(jì)70年代提出來(lái)的加密標(biāo)準(zhǔn),現(xiàn)在看來(lái)56 bits的master key太短了,所以已經(jīng)不再被推薦使用。
*注意,DES是一個(gè)嚴(yán)格的加密流程,很多函數(shù)、矩陣都有預(yù)設(shè)值,但由于篇幅原因,這些預(yù)設(shè)值不在本文中列舉出來(lái)。
DES的具體流程如下,首先我們有一個(gè)初始的permutation叫做 ,以及它的逆運(yùn)算
.?
定義了我們輸入序列的shuffle方式,比方說(shuō)——
,代表了輸入值的第4個(gè)bit移動(dòng)到輸出值的第1個(gè)bit的位置上,輸入值的第3個(gè)bit移動(dòng)到輸出值的第2個(gè)bit的位置上,以此類推下去。所以,其逆運(yùn)算
.

我們?cè)谧铋_(kāi)始的時(shí)候用來(lái)對(duì)輸入的plaintext的所有bit切換順序,在最末尾的時(shí)候,用
對(duì)我們的block再一次切換順序然后輸出我們的ciphertext.

然后,我們進(jìn)行Feistel加密運(yùn)算,只不過(guò)在這里,我們的round function是一個(gè)SPN block.

如圖所示,我們給出一個(gè)32-bit的序列R ,然后進(jìn)行一個(gè)擴(kuò)張運(yùn)算: ,E是一個(gè)預(yù)設(shè)的表格,比方說(shuō),給出一個(gè)4-bit的序列,
將輸出一個(gè)6-bit的序列。其中,原輸入值的第1位的bit和第2位的bit重復(fù)出現(xiàn)了1次,以此來(lái)實(shí)現(xiàn)擴(kuò)張。

接下來(lái)我們做一個(gè)xor運(yùn)算:(顯然我們的round key長(zhǎng)度為48 bits)。然后我們將
切分為8個(gè)長(zhǎng)度為6 bits的值,每一個(gè)6-bit的子序列都輸入到一個(gè)S-Box:
中。
我們的S-Box由一個(gè)4行16列的表格組成。
比方說(shuō),我們的輸入的序列如下:

綠色位置的比特將決定我們的行,橘紅色位置的比特將決定我們的列,所以在此情況下,我們綠色位置的兩個(gè)比特00,和橘紅色位置的4個(gè)比特1101,決定了我們是第0行第13列。我們?cè)谖覀兊腟-Box表格中檢索第0行第13列后,返回的那個(gè)值就是我們的輸出值。
在這里,我們8個(gè)小塊,每一個(gè)小塊的S-box都是不同的,所以我們一共有8種不同的S-box。
最后我們將我們S-box的輸出值合并起來(lái),用一個(gè)permutation函數(shù)再將合并后的值進(jìn)行shuffle.

三、Triple Data Encryption Algorithm (TDEA)
TDEA(或者也叫做3-DES、TDES)是利用DES作為一個(gè)基本模塊,我們依舊使用長(zhǎng)度為56 bits的key和64 bits的輸入值,但在這里我們有3個(gè)master key .我們對(duì)輸入的plaintext m做如下的運(yùn)算:
其中為DES加密運(yùn)算,
是
的逆向運(yùn)算(即解密運(yùn)算)。
還有一個(gè)版本是使用2個(gè)master key的TDEA,公式和上述公式差不多,只是把替換為
,該版本已經(jīng)不再被推薦使用。

后記
下一篇文章介紹AES。
參考資料:
Jonathan Katz; Yehuda Lindell - Introduction to Modern Cryptography; Third Edition
FIPS 46-3, Data Encryption Standard
使用工具:Drawio: https://app.diagrams.net/

THE END.