2012年2月15日 星期三

密碼學的第五課:對稱式加密法


大家好,在情人節剛過的隔天就要來上密碼學,實在為難大家了~

今天要進入近代密碼學的一個分類:對稱式加密法。

之前雖然有稍微介紹過,不過我想混篇幅怕大家忘記,還是幫大家複習一下:
對稱式加密法簡單來說,就是加密金鑰和解密金鑰是一樣,
也就是加密方式和解密方式是對稱的。
它的好處是進行資料加解密的速度很快;
不過,很顯而易見地,這樣的方式就會有個缺點:
當很多人彼此間要通訊的時候,為了要有彼此間的鑰匙,金鑰的管理就會變得很複雜。
用簡單的數學來算,
當2個人要通訊的時候,每個人就要保管1把鑰匙;
當3個人要通訊的時候,每個人就要保管2把鑰匙;
...
當n個人要通訊的時候,每個人就要保管(n-1)把鑰匙,
而且還必須知道哪把鑰匙是屬於哪個人的;整個網路就會有n*(n-1)/2把鑰匙。
如果網路上有500個人要通訊的時候,整個網路就需要124,750把鑰匙。
不僅金鑰的管理上很複雜,怎麼把這些鑰匙分配給大家也會是個難題。

除了金鑰管理和分配的問題外,另一個問題就是發送方與接收方的鑰匙都一樣,
因此發生爭議的時候(譬如密文外洩),法院(或第三方仲裁)沒辦法判斷是誰做的,
也就是無法達到不可否認性( Non-repudiation)。
這就好像同卵雙胞胎犯案,由於DNA都一樣,到底是誰犯案是分不出來的。(這是雙胞胎的好處嗎?)
自由電子報- 同卵雙胞胎哥哥犯案弟弟被捕 2010年5月21日
同卵雙胞胎兄犯案錯逮弟 蘋果日報 2010年7月28日
名偵探柯南在416集和417集也有出現過類似的劇情,http://zhidao.baidu.com/question/326663220.html?fr=qrl&cid=100&index=3
不過,好的推理小說都應該會遵守推理小說十誡
當中就有提到:「除非先寫出有雙胞胎,否則凶手不準是雙胞胎」
所以大家還是可以放心推理~

雖然對稱式加密法有上述的缺點,
不過由於它加解密的速度比非對稱式加密法快上許多,
因此在網路世界中仍被大量地使用。

一般而言,對稱式加密分為2種運算方式:
串流加密 (Stream Cipher) 與 區塊加密 (Block Cipher)

串流加密就是對明文一個位元一個位元地加密,就好像是明文不斷的流動進入加密器中加密,加密快速,因此能夠做到及時(real time response)的效果,適合用在語音傳輸加密中,譬如VoIP;

而區塊加密則是把明文切成固定大小的區塊,並用相同的密碼演算法和密鑰對每組分別進行加密和解密。由於要收集一定的資料量才可以做加密的動作,因此比較適合用來做檔案的加密,譬如電子郵件加密或銀行交易轉帳。

DES(資料加密標準,Data Encryption Standard)和AES(高級加密標準,Advanced Encryption Standard)是美國聯邦政府核定的二種區塊加密法標準。
2001年,DES已經被AES所取代,同時也已經不再作為國家標準科技協會(NIST)的標準。
因此我們就簡單來介紹一下AES的內容,讓大家對AES有簡單的概念。

AES(發音如ASS)是比利時密碼學家Joan Daemen和Vincent Rijmen所設計,
因此早期也稱為Rijndael加密法(結合二人的名字,音同Rain doll)
(叫晴天娃娃 Sunny doll不是很好嗎,幹麻叫雨娃? 可能是密碼學讓人想哭吧~)


AES的區塊長度固定為128 位元,密鑰長度則可以是128,192或256位元。
它的加密過程是在一個4×4的位元組矩陣上運作,依據密鑰長度的不同而須經過不同的加密回合數(迴圈數):128位元密鑰版本有10個加密回合,192位元密鑰版本有12個加密回合,256位元密鑰版本則有14個加密回合。
而除了最後一回合外,每回合均包含4個步驟:

  1. AddRoundKey — 矩陣中的每一個位元組都與該次回合金鑰(round key)做XOR運算;每個子密鑰由密鑰生成方案產生。
  2. SubBytes — 透過一個非線性的替換函數,用查找表的方式把每個位元組替換成對應的位元組。
  3. ShiftRows — 將矩陣中的每個橫列進行循環式移位。
  4. MixColumns — 為了充分混合矩陣中各個直行的操作。這個步驟使用線性轉換來混合每行內的四個位元組。

最後一個加密回合中省略MixColumns步驟,而以另一個AddRoundKey取代。

整個加密的流程如下圖:



而解密的流程則是加密流程的逆向,因此很容易實作,如下圖:


維基百科中有更詳細的說明,zh.wikipedia.org/zh-tw/高級加密標準
(照例,看看右邊的圖就好,想更了解的話,再參考左邊的文字說明)

如果看圖還覺得不夠生動,這裡也做好動畫,用互動式的方式可以更容易了解!
http://www.cs.bc.edu/~straubin/cs381-05/blockciphers/rijndael_ingles2004.swf

總之,AES是目前對稱式加密法最著名的加密方式,許多密碼學研究也都在討論其安全性與破解。
學習密碼學也應該對它有初步的了解,也許哪天你發現了一個AES演算法的弱點,
你也可以大叫「我發現了一個ASS AES hole」了!

沒有留言:

張貼留言