密碼學(xué)專題 - 對稱加密算法 - AES 算法
高級加密標(biāo)準(zhǔn) (AES) 是美國政府制定用來取代 DES 算法的標(biāo)準(zhǔn)壳猜。美國國家標(biāo)準(zhǔn)與技術(shù)研究所 (NIST) 并沒有采用委托設(shè)計的方法而是發(fā)起征集勾徽,尋求密碼學(xué)界的建議。共提交了 15 個提案统扳,其中 5 個被選入圍喘帚,最后 Rinjdael 算法被選中成為 AES,AES 在 2001 年成為標(biāo)準(zhǔn)咒钟。
AES 采用與 DES 不同的結(jié)構(gòu)吹由,并沒有采用 Fesitel 結(jié)構(gòu)。圖 3-2 表示了一輪 AES 算法的執(zhí)行細(xì)節(jié)朱嘴,隨后的幾輪執(zhí)行相似的步驟倾鲫。輸入 16 字節(jié) (128 位) 的明文,首先將明文與 16 字節(jié)的輪密碼進(jìn)行異或操作萍嬉,在圖中用 運算符來表示乌昔。然后進(jìn)入 8 位輸入 8 位輸出的 S 盒,這些 S 盒內(nèi)部結(jié)構(gòu)均是相同的壤追。輸入后按照特定的順序重新排列輸出磕道。最后分為 4 個組,使用線性混合函數(shù)進(jìn)行異或運算得到輸出結(jié)果行冰。
這就完成了一輪的運算溺蕉。整個 AES 算法的輪數(shù)為 10 ~ 14 輪,輪數(shù)的選擇取決于密鑰的長度悼做。AES 的密鑰長度為 128 位疯特、192 位、256 位贿堰。使用 128 位密鑰加密 10 輪辙芍,192 位密鑰加密 12 輪,256 位密鑰加密 14 輪羹与。AES 算法和 DES 算法一樣有一個子密鑰生成器來產(chǎn)生輪密鑰故硅,但子密鑰生成器有著不同的結(jié)構(gòu)。
AES 結(jié)構(gòu)有利也有弊纵搁。每一個執(zhí)行步驟都包含了多個并行運算吃衅,可以實現(xiàn)高速運算;另一方面腾誉,解密和加密運算完全不同徘层,需要逆轉(zhuǎn) S 盒的查找表,而且混合運算的逆運算也和原混合運算不同利职。
在 DES 算法中有一些功能相同的模塊趣效。異或運算把密鑰混到數(shù)據(jù)中,S 盒提供非線性猪贪,位變換和混合函數(shù)提供擴(kuò)散功能跷敬。AES 算法是一個非常清晰的設(shè)計,為分組密碼的各個部分劃分了清晰獨立的任務(wù)热押。
AES 算法一直是相當(dāng)積極的設(shè)計西傀。AES 的設(shè)計者曾經(jīng)描述了一個對執(zhí)行 6 輪的算法進(jìn)行攻擊的方法。這也意味著如果 AES 只被定義執(zhí)行 6 輪就會受到攻擊桶癣。因此作者提出了要根據(jù)密鑰的長度來選擇加密 10 ~ 14 輪拥褂。
在 AES 算法的選擇中,攻擊的方法已經(jīng)進(jìn)行了改進(jìn)牙寞,可以攻擊執(zhí)行 7 輪的 128 位密鑰饺鹃、8 輪的 192 位密鑰、9 輪的 256 位密鑰间雀。當(dāng)然尤慰,還要多預(yù)留出 3 ~ 5 輪的輪數(shù)以保證安全。從不同的角度來看:對于 128 位的密鑰雷蹂,在 Rijndael 被選為 AES 算法時最好的攻擊方法能夠攻擊 70% 的密碼算法伟端。換句話說,Rijndael 被選為 AES 是建立在未來攻擊方法都不會有大的改進(jìn)的前提之下的匪煌。
事實上责蝠,我們已經(jīng)看到了一些在 AES 密碼算法分析上取得的了不起的突破。有一種攻擊可以通過 4 個相關(guān)密鑰和 次運算攻破 192 位密鑰的 12 輪 AES 算法萎庭。還有一種攻擊可以通過 4 個相關(guān)密鑰和 次去處攻擊 256 位密鑰的 14 輪 AES霜医。另外,還有一種攻擊可以通過 2 個相關(guān)密鑰和 次運算攻擊 256 位密鑰的 14 輪 AES 算法中的 10 輪驳规。
這些攻擊都取得了巨大的成果肴敛。這表明 AES 算法已經(jīng)不符合我們對分組密碼安全的定義。對于 192 位密鑰和 256 位密鑰 AES 算法的攻擊僅限于理論,在實際中不存在医男,所以目前不準(zhǔn)備對這些理論上的攻擊采取任何補(bǔ)救砸狞。但是根據(jù)攻擊的定義,192 位和 256 位的 AES 算法已經(jīng)從理論上被攻破镀梭,當(dāng)然刀森,隨著時間的推移更巧妙、更有效的攻擊可能會出現(xiàn)报账。
業(yè)界仍然為 AES 在實際系統(tǒng)中的應(yīng)用而感到擔(dān)憂研底。我們知道現(xiàn)階段應(yīng)用 AES 是一個很合理的決定,因為它是美國政府的標(biāo)準(zhǔn)透罢,使用標(biāo)準(zhǔn)避免了很多爭議和問題榜晦,但必須認(rèn)識到,在今后的密碼學(xué)發(fā)展中仍然會遇到很多較嚴(yán)重的問題羽圃。如果你正在開發(fā)一個系統(tǒng)或者制定協(xié)議標(biāo)準(zhǔn)乾胶,為了便于今后用另一種分組密碼替換 AES,建議你保證可擴(kuò)展性和靈活性统屈。
5 個 AES 候選算法分別為:Rijndael胚吁、Serpent、Twofish愁憔、RC6 和 MARS腕扶。
項目源代碼
項目源代碼會逐步上傳到 Github,地址為 https://github.com/windstamp吨掌。
Contributor
- Windstamp, https://github.com/windstamp