"AE、AES、AED、AEIOU。"
---
以128位元的key做範例:
假設我們進行AES-128,那麼中間將經過11個AddRoundKey的過程,
也就是說,我們需要11把子密鑰。(其中第一把即是原始密鑰)
所以實際上我們要再生出10把回合密鑰。
還記得我們把128位元的明文排成什麼樣子嗎?
在這裡我們一樣要把128位元的密鑰排成那個樣子。
可以看到下圖左上角的矩陣,那個就是原始密鑰,
接著看到這個矩陣下面有四個箭頭,他的意思是說,我們令第一排的四個數字,
總共8×4 = 32位元為1個w(word)。
而128位元的key就是4個word。
以下的每一個操作都是以word為單位。
可以看到w4的建立過程比較繁瑣,而接下來所有 w(4n) 的建立都會經過此步驟。
最後一個word,也就是w3(w(4n-1))會先經過 g 函數。
g 函數的內容是:
要先向上旋轉一格,接著每一格都經過S-Box轉換後,最左邊的byte要和回合係數(RC)做XOR,
最後跟w0(w(4n-4))做XOR後得到的結果成為w4。
w5跟其他非 w(4n) 的word的建立就簡單許多,
只要將上一個 w(t-1) 和 w(t-3) 做XOR即得到 w(t)。
如此一直下去可以製造很多個子密鑰,
不過我們只需要前43個word就夠了(如果是128位元密鑰的話)。
如此一來我們就可以製造足夠多的子密鑰來使用。
AES的密鑰相較於DES長了許多,其最短的密鑰也有128位元,
因此使用暴力搜索需要搜尋 種密鑰可能,最多需要 種。
如果對 沒有概念的話,大概是1後面77個0。
因此是無法暴力破解的。
沒有有效的分析攻擊。
旁通道攻擊是對實務上物理性質的攻擊,比如從聲音、時間、電力消耗取得資訊。
打個比方,當你要用電腦將演算法實現,那這台電腦就成了旁通道攻擊的對象。
我們知道電腦在處理0和1的時候消耗的電量是不一樣的,
那假設你有一台示波器可以知道你電腦隨時的耗電量,那就可以經由波型看出密鑰
(大概是這樣啦)
那也就是為什麼不要使用自己寫的加密程式,因為我們不知道怎麼寫能夠抵禦旁通道攻擊的演算法。
所以如果是經過設計的演算法,能夠抵禦旁通道攻擊,那麼 AES 目前還算安全。
(我找不到 AES 的 meme 啦)
圖片來源:
https://www.brainkart.com/article/AES-Key-Expansion_8410/
http://memegenerator.net/instance/25289451/high-expectations-asian-father-encrypted-using-des-why-not-aes
參考資料:
https://www.diva-portal.org/smash/get/diva2:1322924/FULLTEXT01.pdf
https://crypto.stackexchange.com/questions/58560/attacks-on-aes-128-192-256
https://www.atpinc.com/blog/what-is-aes-256-encryption