對稱加密算法介紹

對稱加密算法是一種隱藏數(shù)據(jù)含義的數(shù)據(jù)變換機制,該算法提供兩個函數(shù):數(shù)據(jù)加密和數(shù)據(jù)解密。

它們之所以稱為對稱的,是因為消息發(fā)送方和接收方必須使用相同的密鑰來加密和解密數(shù)據(jù)。

加密函數(shù)將數(shù)據(jù)和密鑰值作為輸入,生成并輸出與輸入消息大致等長的隨機字節(jié)序列;解密函數(shù)與加密函數(shù)同樣重要,它以加密函數(shù)輸出的隨機字節(jié)序列和加密函數(shù)使用的密鑰作為輸入,生成原始數(shù)據(jù)。

“對稱”一詞是指,要成功地解密數(shù)據(jù),必須使用用于數(shù)據(jù)加密的密鑰值來解密。

對稱加密算法旨在保護數(shù)據(jù)的機密性。例如,如果Alice要向Bob發(fā)送一份機密文檔,可以使用電子郵件;然而電子郵件的隱私性和明信片一樣差。為防止未知方打開該文檔,Ali ce可以使用對稱加密算法和適當?shù)拿荑€來加密數(shù)據(jù),然后通過電子郵件將其發(fā)送出去。在郵件發(fā)送至Bob的過程中任何打開郵件的人看到的只是隨機字節(jié)序列,而不是機密文檔。Bob收到加密郵件后,將數(shù)據(jù)和Alice使用的密鑰值輸入Alice使用的對稱加密算法的解密函數(shù),該函數(shù)將輸出原始數(shù)據(jù),即機密文檔。

對稱加密算法介紹

最簡單的對稱密鑰加密算法凱撒加密算法

一種簡單的對稱密鑰加密算法是旋轉(zhuǎn)加密算法,也稱為凱撒加密算法。這種算法是這樣加密數(shù)據(jù)的:將每個字母替換為其后的第n個字母。例如,如果n(廣義“密鑰值”)等于3, 那么用字母D代替字母A,用字母E代替字母B,用字母F代替字母C,依此類推。對于字母表末尾的字母,則繞回到開頭,用字母Z代替字母W,字母A代替字母X,字母B代替字母Y,字母C代 替字母Z等。

因此,當使用密鑰值為7的旋轉(zhuǎn)加密算法來加密明文消息“WINNERS USE JAVA” 時,密文為“DPUULYZ BZL QHCH”。即使沒有計算機協(xié)助,攻擊者也能輕易破解旋轉(zhuǎn)加密算 法,因為只需嘗試所有可能的密鑰值(只有26種),便能破解密加密數(shù)據(jù)。

然而,也有很多經(jīng)過實踐檢驗的對稱加密算法可供選擇,如DES、IDEA、AES(Rijndael )、Twofish和RC2等。對于對稱加密算法,和任何加密算法一樣,明智的開發(fā)人員會選擇一種經(jīng)實踐檢驗的算法,而不是從頭開發(fā)。經(jīng)實踐檢驗的算法都經(jīng)過大量的詳 細審查,如Rijndael和Twofish算法,有很多算法因為漏洞和弱點而被淘汰了[RSA02]。

對稱加密算法有兩種:塊加密算法和流加密算法。

塊加密算法每次加密一個數(shù)據(jù)塊(通常 為8或16字節(jié));流加密算法是相對較新的算法,通常比塊加密算法快。但塊加密算法更常用 ,這可能是由于它們已使用了較長時間,可免費使用的算法很多[RSA02]。塊加密算法的例子有DES、IDEA、AES(Rijindael)和Blowfish;流加密算法的例子有RC4和WAKE。由于與SSL 一起用于所有Web瀏覽器中,Ron Rivest的RC4是應(yīng)用最廣泛的流加密算法,但要采用該算法 必須有RSA公司的許可證。在某些模式下,塊加密算法能模擬流加密算法的行為。

高級加密標準(Advanced Encryption Standard,AES)

在對稱加密算法中,對AES應(yīng)特別予以關(guān)注,因為它已取代DES成為美國政府認可的對稱 加密算法標準。AES算法稱為“Rijndael”,其發(fā)明者是比利時密碼學(xué)家Joan Daemen和Vinc ent Rijmen,美國國家標準和技術(shù)研究所(NIST)從21種加密算法中將其挑選出來。

自1977年以來,DES一直都是美國聯(lián)邦政府加密敏感信息的標準方法[AES01]。但是隨著計算能力的不斷提高,DES也逐漸滑向極易攻破的危險境地。1987年,美國政府啟動了旨在標準化 加密算法的Capstone項目,其中還包括稱為Skipjack的算法,但由于該算法是保密的,密碼 學(xué)家不能分析其弱點,鑒于此以及其他一些情況[RSA03]),雖然Skipjack算法最終于199 8年公開發(fā)表了,但還是未能得到廣泛普及[Schneier04]。

1997年,NIST宣布將DES的替代算法命名為AES,并將從公開參選的多種算法中甄選,任何人都可以遞交參選算法,任何算法都將公諸于眾,并將根據(jù)多種評判標準(包括運算速度 和操作的簡易度)來決出勝出者。2000年10月2日,Rijndael算法擊敗決賽對手Bruce Schne ier的Twofish算法和Ron Rivest的RC6算法脫穎而出。Rijndael是一種塊加密算法,其密鑰長 度為128、192或256位,塊長度為128、192或256位。

AES競賽是計算機安全領(lǐng)域中一項里程碑式的活動,它體現(xiàn)了對一項重要概念的認同,即 從長遠看,公開審查的加密算法比秘密開發(fā)的算法更加安全。