Aes
AES AddRoundKey
查看 AES 加密的第一步,我看到我們將密鑰與明文塊進行異或。為什麼完全涉及實際密鑰,為什麼不直接使用從密鑰調度派生的輪密鑰?
更新以回答新問題
從技術上講,這個問題有點混亂。密鑰調度將第一輪密鑰定義為加密密鑰。因此,當您說“為什麼不使用從密鑰計劃派生的輪密鑰”時,答案是您正在使用從密鑰計劃派生的輪密鑰。第一輪密鑰被定義為加密密鑰。所以他們正在使用密鑰調度來派生所有輪密鑰。
顯然,這根本不會削弱安全性,否則我們就不會使用 AES。即使使用諸如全 0 之類的密鑰,存在多輪的事實也可以緩解任何問題。
查看The Design of Rijndael(由密碼設計者編寫)的第 5.8 節並沒有提供太多關於他們為什麼選擇以這種方式設計密鑰時間表的見解。他們確實說他們想要一個遞歸過程,所以從原始密鑰開始似乎很自然。直接使用密鑰作為第一輪密鑰消除了對密鑰調度生成程式碼的呼叫。這將使加密資源受限設備(即,無法記憶體整個密鑰調度的設備)上的少量塊更快。
老問題的老答案
注意:此答案適用於該問題的先前版本。
回憶一下 AES 的結構:
首輪 (
AddRoundKey
)輪 (
SubBytes
,ShiftRow
,MixColumn
,AddRoundKey
)決賽 (
SubBytes
,ShiftRow
,AddRoundKey
)所以最後一輪的最後一個操作是
AddRoundKey
有意義的,這AddRoundKey
將是解密的第一個操作。