對稱式加密(Symmetric-Key Algorithm)

前言

在密碼學中我們討論加密(Encrution)方法時,也同時包含解密(Decryption)。而加密的方案(scheme)各有優缺點,從簡單易懂的方案到相對複雜的方案都有其優缺點。其中我們以金鑰的種類區分為對稱式加密(Symmetric-Key Algorithm)與非對稱式加密(Asymmetric cryptography)兩大類。

對稱式加密

凱薩加密(Caesar cipher)

假設Alice想要傳送訊息給Bob(密碼學中常用的A與B就是他們),但是不想要給除了自己與Bob以外的人知道訊息的內容,那要怎麼辦呢?
Alice與Bob事前研擬計畫,他們加密金鑰為3。這個金鑰只有他們Alice與Bon知道。當Alice想要傳送訊息”Hello”,使用這個金鑰將每一個字元向後推3個字元,輸出密文”Khoor”並傳送給Bob,而Bob收到後只需使用相同的金鑰就可以返回明文”Hello”。


這類的加密方式我們稱作對稱式加密,因加密金鑰(Encryption key)與解密金鑰(Decryption key)相同。如果攻擊者Evn(Evil?)想要知道密文的內容,這個加密法只需要嘗試最多25次就可以推出正確的明文(暴力破解法or窮舉法),因此我們需要更好的加解密方法。

DES加密(Date Encryption Standard)

DES Framework
  1. 將訊息(明文plantext)分割或是擴充(padding)成64bits
  2. 位元交換
    位元交換
  3. 訊息與金鑰(K1 ~ K16)進行XOR運算
    i. 進行位元交換後區分左右兩個區塊
    ii. 將右邊R0與第1把key輸入CipherFuction,輸出的結果與左邊L0進行XOR運算,輸出的結果成為下一輪的R(R1)
    iii. 右邊R0輸出成下一輪的L(L1)
    iv. 重複(i.)~(iii.)16次,輸出L15與R15
  4. 反位元交換
    反位元交換
  5. 輸出密文
  6. 解密時將key反向輸入即可回復成明文(即K16 ~ K1)
加密函數(CipherFunction)
DES Cipher Function
  1. 右邊Rn(32bits)會輸入擴充函數(Expansion Function)擴充為48bits
    擴充函數
  2. 輸出的結果與key進行XOR運算
  3. 每6bits分割為一個區塊(yield),共分割為8個區塊
  4. 每一個區塊會輸入選擇函數(Selection Function)
    DES S1 selection function
    這個步驟會將原本的6bits在表中選擇(selection)對映的值輸出成4bits,每一個Selection Function的對映的輸出都不同
  5. 最後將8個區塊共32bits輸入置換函數(Permutation Function)輸出下一輪的右邊Rn+1
    DES P function
金鑰排程(KeySchedule)

在16輪的訊息與金鑰位元交換中,每一輪的key都不相同,但是在DES中我們不會使用16把key,而是將1把key分為16把子金鑰

DES key schedule
  1. key(64bits)輸入選擇置換1(Permuted Choice 1),輸出key(56bits)並分為2個28bits的半金鑰(C0與D0),其中的8bit作為奇偶校正,不進行運算
    選擇置換1
  2. 半金鑰依照製作順序向左1~2bits位移
    DES key left shift
  3. 位移後的結果輸入選擇置換2(Permuted Choice 2),輸出金鑰K1
    選擇置換2
  4. 重複(1.)~(3.)16次,輸出K1 ~ K16,共16把key

結論

DES加密相較凱薩加密更為複雜,但主要使用位元位移與XOR運算讓明文轉換密文的步驟更為混亂,足夠混亂是加密相當重要的概念,為了抵擋不知名的攻擊者,我們並不想要讓這些攻擊者透過比較明文與密文來發現其中的關聯。DES雖然將一把金鑰分為16把子金鑰,但是加解密仍然使用同一把金鑰,因此我們也將DES區分在對稱式加密這個類別。