5.2 密碼學(xué)專題 - 對(duì)稱加密算法 - AES 算法

密碼學(xué)專題 - 對(duì)稱加密算法 - AES 算法

高級(jí)加密標(biāo)準(zhǔn) (AES) 是美國(guó)政府制定用來(lái)取代 DES 算法的標(biāo)準(zhǔn)。美國(guó)國(guó)家標(biāo)準(zhǔn)與技術(shù)研究所 (NIST) 并沒(méi)有采用委托設(shè)計(jì)的方法而是發(fā)起征集,尋求密碼學(xué)界的建議。共提交了 15 個(gè)提案,其中 5 個(gè)被選入圍,最后 Rinjdael 算法被選中成為 AES,AES 在 2001 年成為標(biāo)準(zhǔn)。

AES 采用與 DES 不同的結(jié)構(gòu),并沒(méi)有采用 Fesitel 結(jié)構(gòu)。圖 3-2 表示了一輪 AES 算法的執(zhí)行細(xì)節(jié),隨后的幾輪執(zhí)行相似的步驟。輸入 16 字節(jié) (128 位) 的明文,首先將明文與 16 字節(jié)的輪密碼進(jìn)行異或操作,在圖中用 \bigoplus 運(yùn)算符來(lái)表示。然后進(jìn)入 8 位輸入 8 位輸出的 S 盒,這些 S 盒內(nèi)部結(jié)構(gòu)均是相同的。輸入后按照特定的順序重新排列輸出。最后分為 4 個(gè)組,使用線性混合函數(shù)進(jìn)行異或運(yùn)算得到輸出結(jié)果。

一輪 AES 的結(jié)構(gòu).jpg

這就完成了一輪的運(yùn)算。整個(gè) AES 算法的輪數(shù)為 10 ~ 14 輪,輪數(shù)的選擇取決于密鑰的長(zhǎng)度。AES 的密鑰長(zhǎng)度為 128 位、192 位、256 位。使用 128 位密鑰加密 10 輪,192 位密鑰加密 12 輪,256 位密鑰加密 14 輪。AES 算法和 DES 算法一樣有一個(gè)子密鑰生成器來(lái)產(chǎn)生輪密鑰,但子密鑰生成器有著不同的結(jié)構(gòu)。

AES 結(jié)構(gòu)有利也有弊。每一個(gè)執(zhí)行步驟都包含了多個(gè)并行運(yùn)算,可以實(shí)現(xiàn)高速運(yùn)算;另一方面,解密和加密運(yùn)算完全不同,需要逆轉(zhuǎn) S 盒的查找表,而且混合運(yùn)算的逆運(yùn)算也和原混合運(yùn)算不同。

在 DES 算法中有一些功能相同的模塊。異或運(yùn)算把密鑰混到數(shù)據(jù)中,S 盒提供非線性,位變換和混合函數(shù)提供擴(kuò)散功能。AES 算法是一個(gè)非常清晰的設(shè)計(jì),為分組密碼的各個(gè)部分劃分了清晰獨(dú)立的任務(wù)。

AES 算法一直是相當(dāng)積極的設(shè)計(jì)。AES 的設(shè)計(jì)者曾經(jīng)描述了一個(gè)對(duì)執(zhí)行 6 輪的算法進(jìn)行攻擊的方法。這也意味著如果 AES 只被定義執(zhí)行 6 輪就會(huì)受到攻擊。因此作者提出了要根據(jù)密鑰的長(zhǎng)度來(lái)選擇加密 10 ~ 14 輪。

在 AES 算法的選擇中,攻擊的方法已經(jīng)進(jìn)行了改進(jìn),可以攻擊執(zhí)行 7 輪的 128 位密鑰、8 輪的 192 位密鑰、9 輪的 256 位密鑰。當(dāng)然,還要多預(yù)留出 3 ~ 5 輪的輪數(shù)以保證安全。從不同的角度來(lái)看:對(duì)于 128 位的密鑰,在 Rijndael 被選為 AES 算法時(shí)最好的攻擊方法能夠攻擊 70% 的密碼算法。換句話說(shuō),Rijndael 被選為 AES 是建立在未來(lái)攻擊方法都不會(huì)有大的改進(jìn)的前提之下的。

事實(shí)上,我們已經(jīng)看到了一些在 AES 密碼算法分析上取得的了不起的突破。有一種攻擊可以通過(guò) 4 個(gè)相關(guān)密鑰和 2^{176} 次運(yùn)算攻破 192 位密鑰的 12 輪 AES 算法。還有一種攻擊可以通過(guò) 4 個(gè)相關(guān)密鑰和 2^{119} 次去處攻擊 256 位密鑰的 14 輪 AES。另外,還有一種攻擊可以通過(guò) 2 個(gè)相關(guān)密鑰和 2^{45} 次運(yùn)算攻擊 256 位密鑰的 14 輪 AES 算法中的 10 輪。

這些攻擊都取得了巨大的成果。這表明 AES 算法已經(jīng)不符合我們對(duì)分組密碼安全的定義。對(duì)于 192 位密鑰和 256 位密鑰 AES 算法的攻擊僅限于理論,在實(shí)際中不存在,所以目前不準(zhǔn)備對(duì)這些理論上的攻擊采取任何補(bǔ)救。但是根據(jù)攻擊的定義,192 位和 256 位的 AES 算法已經(jīng)從理論上被攻破,當(dāng)然,隨著時(shí)間的推移更巧妙、更有效的攻擊可能會(huì)出現(xiàn)。

業(yè)界仍然為 AES 在實(shí)際系統(tǒng)中的應(yīng)用而感到擔(dān)憂。我們知道現(xiàn)階段應(yīng)用 AES 是一個(gè)很合理的決定,因?yàn)樗敲绹?guó)政府的標(biāo)準(zhǔn),使用標(biāo)準(zhǔn)避免了很多爭(zhēng)議和問(wèn)題,但必須認(rèn)識(shí)到,在今后的密碼學(xué)發(fā)展中仍然會(huì)遇到很多較嚴(yán)重的問(wèn)題。如果你正在開(kāi)發(fā)一個(gè)系統(tǒng)或者制定協(xié)議標(biāo)準(zhǔn),為了便于今后用另一種分組密碼替換 AES,建議你保證可擴(kuò)展性和靈活性。

5 個(gè) AES 候選算法分別為:Rijndael、Serpent、Twofish、RC6 和 MARS。

項(xiàng)目源代碼

項(xiàng)目源代碼會(huì)逐步上傳到 Github,地址為 https://github.com/windstamp

Contributor

  1. Windstamp, https://github.com/windstamp
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容