2008年1月17日 星期四

Symmetric Encryption (對稱式加密)

簡介

Symmetric Encryption - 對稱式加密,其特色在於加解密所使用的金鑰(key)是相同的!

兩方要進行秘密訊息的傳送之前,必須協議出一個共同的,用來加解密的金鑰(key)以及所使用的演算法;如此一來訊息一來一往之前才可以被正確的加解密。

當 然這樣的方式會衍生出一些問題,因此才會有 Asymmetric Encryption(非對稱式加密) 的產生,來改善一些 Symmetric Encryption 的缺點;然而 Symmetric Encryption 在實際的應用上有其實用性,因此目前還是持續不斷的被使用當中。

在加解密運作的機制中,有兩大重要部分,除了金鑰(key)之外,另外一個即為加解密所使用的演算法(algorithm)

在實際應用上,金鑰(key)是一個檔案,內容為一群無意義的英文與數字的集合,長度範圍有可能介於 64~1024 bits (甚至更大) 之間,妥善由通訊雙方秘密保管好。

而演算法(algorithm)則是透明公開的,隨時可以從網路或是其他地方取得演算法的相關使用方法與規則。

以下先針對對稱式加密演算法的型態(Type)與模式(Mode)進行說明,後面再介紹目前常用的演算法.......


演算法型態(Algorithm Type)

演算法在型態部分,有分成兩種,分別是:

Stream Cipher

此種方式是將 plain text 中的每一個 bit 逐一加密,然而此種方式在效率上並不好,因此目前比較為大家所熟悉且常用的演算法,都不是使用 stream cipher 的方式進行處理。

Block Cipher

此種方式將 plain text 分成多個 block(區塊) 後,一次針對一個 block 進行加密處理。

此種方式有個很明顯的問題存在,就是當所加密的 plain text 相同時,加密的結果也會相同;如此一來,有心人就可以根據加密的結果,判斷出訊息中的哪幾個部分是相同的,進而嘗試進行破解。

當然,這個問題是很顯而易見的,因此就有人提出不同的解決方式,這個部分會繼續在演算法模式(Algorithm Mode)中進行說明。


演算法模式(Algorithm Mode)

演算法模式(Algorithm Mode)是針對 Block Cipher 所設計的一系列加解密方式,其中有四個重要的模式,分別是:
  1. Electronic Code Block (ECB)
  2. Cipher Block Chaining (CBC)
  3. Cipher Feedback (CFB)
  4. Output Feedback (OFB)

前 面兩種模式所使用的為 block cipher,因此加密時是以一個區塊為單位進行處理;而後面兩種雖然也是屬於 block cipher,但由於加入了 Initialization Vector 以及 Offset 的觀念,因此處理起來類似stream cipher 的方式。

以下針對四種模式逐一介紹:(解密方式多為加密方式的反推,所以以下僅說明加密的方式)

Electronic Code Block

首先,先用圖來表示 ECB 加密的過程:
顯而易見的,ECB 即為標準的 block cipher,將要加密的 plain text 分為多個 64 bits 的區塊,並用同一支金鑰進行加密的動作。

由於重複的加密訊息有可能出現,因此僅適合用來加密長度很短的訊息。


Cipher Block Chaining

有鑑於此,有人提出了 CBC,即是用來解決上面缺點,以下先用圖來表示加密的過程:
其中一開始的 IV 值是隨機產生的,接著當使用金鑰加密第一個區塊的 plain text 後,在將加密後的結果作為加密第二個區塊的輸入

如此一來,即使兩個區塊的 plain text 內容是相同的,也不會有同樣的 cipher text 出現了!


Cipher Feedback

有時候在某些情況下,還是必須針對一個一個字元來加密,例如:在終端機打字傳送訊息至遠方。

此時便會使用 stream cipher,而在 CFB 模式中,每個資料加密的單元(通常為 8 bits)會小於一般區塊的大小(通常為 64 bits),以下用圖來說明:

實際上詳細運作方式可能沒辦法從圖上看的出來,不過大概如下:
  1. IV 與金鑰進行加密(假設結果為 64 bits)
  2. 取 64 bits 結果的前面 8 bits 與 plain text 進行 XOR 的運算
  3. IV 左移 8 個 bits,並將運算後的 8 bits 加到 IV 之後(這個部分圖片沒有畫出來.....不過此時 IV 還是 64 bits)
  4. 將第三個步驟所產生的結果作為下一回合的輸入
  5. 重複上面步驟直到所有內容加密完成

如此一來,便可以類似 stream cipher 的方式進行加密,而不用在乎每個區塊的 plain text 長度了!


Output Feedback

OFB 的步驟幾乎與 CFB 是相同的,僅是輸出入稍有差異,以下用圖來表示:

參考資料
  1. Stream cipher
  2. Block cipher
  3. Block cipher modes of operation
  4. IBM - developerWorks:對稱密碼學



常用的加密演算法

說到常用的對稱式加密演算法,大概就是 DESTriple DESIDEABlowfishRC5AES 這一些演算法了。

這一些演算法的處理方式,大概都不會跳脫上面部分所提到的那幾種模式,也就是 Substitution 以及 Transposition 的交互運用,其中的差異僅在於其複雜度而已。

演算法的細節在這邊就不進行說明了,網路上有很多資料可以查,以下大概僅簡介一下:

DES (Data Encryption Standard)

DES 屬於 block cipher,每個區塊的大小為 64 bits,所使用的金鑰長度為 56 bits(其實原本的金鑰長度為 64 bits,但是有 8 bits 會被捨棄不用),經過一連串複雜的 substitution 以及 transposition 的運算處理過程,產生出 64 bits 的 cipher text。

加密過程可以參考此網頁

其實 DES 已經是個強度很強的加密演算法,以目前電腦的運算能力進行破解,也要花上很多年。


Triple DES

DES 雖然加密強度已經很強,不過當未來出現了運算能力更強的電腦,或是平行運算技術更加成熟後,難保不會在短時間內被破解,因此就有人提出 Triple DES 的演算法。

顧名思義,Triple DES 即是將 plain text 進行三次 DES 的運算處理,有兩種方式:
  1. 使用三把金鑰(K1, K2, K3)
    這個部分比較容易瞭解,很單純的在三次 DES 加密的過程中,分別使用不同的三把金鑰。
  2. 使用兩把金鑰(K1, K2)
    這個部分則是有些變化,大概說明其運作步驟:
    (1) 第一次 DES 加密使用金鑰 K1,假設產生的加密結果為 C1
    (2) 第二次則是以金鑰 K2 對 C1 進行解密,假設產生 C2
    (3) 最後一次則是再以金鑰 K1 對 C2 進行加密

透過此種多重加密的方式,確保 Triple DES 的安全性再更上一層! (當然也要多花點運算處理的時間.....)


IDEA (International Data Encryption Algorithm)

IDEA 亦屬於 block cipher,其加密強度比起 DES 更強,因為所使用的金鑰為 128 bits,而每一次處理的區塊資料長度一樣為 64 bits。

不過由於這是有專利的,因此相較於 DES,並沒有這麼普及。

運作原理大致上跟 DES 不會差異太多,只是一些細節的部分有所差異,詳細過程可以參考以下兩篇文章:
  1. International Data Encryption Algorithm
  2. IDEA 密碼系統


RC5

RC5 也是屬於 block cipher,此演算法是相當有彈性的,不僅可以自訂每個加密區塊的長度,也可以自訂加密的回合數與金鑰的長度,加上只使用了電腦的基本運算(加法、XOR ... etc),因此不僅彈性很大,速度也很快。

而由於 RC5 演算法相較於其他演算法,所需要的記憶體比較少,因此也可以用在可攜式的裝置上。

其他詳細的說明及演算法的運作方式可以參考以下文章:
  1. RC5
  2. RC5 密碼系統
  3. RC5 操作模式


Blowfish

Blowfish 演算法優點在於速度快、記憶體花費少、加解密的過程簡單(僅使用到基本運算)、可自訂金鑰長度。

而此演算法適合用在通訊連結上,因此像是 VPN 連線的加密,就有使用 Blowfish 演算法。


AES (Advanced Encryption Standard)

由於對於暴力破解法,DES 有可能被破解的風險,因此美國政府提出了一個強度更強的演算法,進而想要將加解密演算法標準化,準備當電腦運算能力發展到很強,DES 必須被淘汰時的候補演算法標準,這就是 AES 的由來。

相較於 DES,AES 演算法中所使用的區塊長度為 128 bits,金鑰長度也提高到 128 bits 以上,因此 cipher text 被破解的機會便更低了。

若要瞭解 AES 詳細的運作方式,可以參考以下文章:
  1. AES 基本架構
  2. AES 加密演算法 - 加密編碼
  3. AES 加密演算法 - 金鑰擴充
  4. AES 解密演算法

沒有留言:

張貼留言