7.3 金鑰擴展
DESCRIPTION
7.3 金鑰擴展. AES 使用金鑰擴展( key-expansion )程序來建立每一回合中所使用的回合金鑰。假設 回合數為 N r ,則金鑰擴展程序將從一個長度為 128 位元的加密金鑰,產生 N r + 1 個長度為 128 位元的回合金鑰。 本節討論主題 AES-128 的金鑰擴展程序 AES-192 and AES-256 的金鑰擴展程序 金鑰擴展分析. 表 7.3 每一回合的字組. 圖 7.16 AES 的金鑰擴展程序. 表 7.4 RCon 常數. 回合金鑰. - PowerPoint PPT PresentationTRANSCRIPT
7.3 金鑰擴展 AES 使用金鑰擴展( key-expansion )程序來建立每一回合中所使用的回合金鑰。假設 回合數為 Nr,則金鑰擴展程序將從一個長度為 128 位元的加密金鑰,產生 Nr + 1 個長度為 128 位元的回合金鑰。
本節討論主題 AES-128 的金鑰擴展程序 AES-192 and AES-256 的金鑰擴展程序 金鑰擴展分析
表 7.3 每一回合的字組
圖 7.16 AES 的金鑰擴展程序
表 7.4 RCon 常數
回合金鑰 金鑰擴展程序在計算字組時,可以選擇使用查表或者在 GF(28) 體下計算最左邊位元組的值。計算方式如下所列( prime 為一不可分解多項式):
P.195 下
演算法 7.5 AES-128 金鑰擴展的虛擬程式碼
範例 7.6
表 7.5 顯示使用 (24 75 A2 B3 34 75 56 88 31 E2 12 00 13 AA 54 87)16 這個金鑰所產生的 回合金鑰。
表 7.5
範例 7.7
AES 中每個回合金鑰都是由上一個回合金鑰算出來的。然而,因為計算中使用 SubWord 轉換程序,所以回合金鑰之間的關係是非線性的。加入回合常數的步驟也確保了每個回合金鑰都不會和上一個相同。
範例 7.8
即使加密金鑰只差一個位元,所求出來的兩組回合金鑰的差異也很明顯。
表 7.6 兩組回合金鑰比較
範例 7.9
在第六章我們討論過 DES 系統中的弱金鑰,然而這個概念並不適用於 AES 。假設加 密金鑰的位元全部為 0 。以下列出加密過程中數個回合的字組:
範例 7.9 ( 續 )
預先回合和第一回合的字組都完全相同。在第二回合時,第一個字組和第三個相同,而第二 個字組和第四個相同。然而,從第二回合以後所有的字組就都完全不一樣了。
7.3.2 AES-192 和 AES-256 的金鑰擴展程序
AES-192 和 AES-256 這兩個版本的金鑰擴展程序和 AES-128 非常相近,不同的地方只有 以下幾點: 在 AES-192 中,一次產生六個字組而非四個。
使用加密金鑰產生前六個字組( w0 至 w5)。 當 i mod 6 ≠ 0 時, wi ← wi−1 + wi−6;否則, wi ← t + wi−6。
7.3.2 AES-192 和 AES-256 的金鑰擴展程序 ( 續 )
在 AES-256 中,一次產生八個字組而非四個。
使用加密金鑰產生前八個字組( w0 至 w7)。 當 i mod 8 ≠ 0 時, wi ← wi−1 + wi−8;否則, wi ← t + wi−8。
當 i mod 4 = 0 且 i mod 8 ≠ 0 時, wi = SubWord (wi−1) + wi−8。
7.3.3 金鑰擴展分析
AES 的金鑰擴展機制設計有幾個特性可以抵抗破密分析。
7.4 加密法 現在我們來看看 AES 如何在加密和解密的過程中使用以上所介紹的四種轉換。在發布的標準文件中,加密演算法稱為加密法 (cipher) ,而解密演算法則稱為反向加密法 (inverse cipher) 。
本節討論主題 原始設計 替代型設計
圖 7.17 原始設計的加密法與反向加密法
演算法
AES-128 版本的程式碼如演算法 7.6 所示。
圖 7.18 SubBytes 與 ShiftRows 組合的可逆性
圖 7.19 MixColumns 與 AddRoundKey 組合的可逆性
圖 7.20 替代型設計的加密法與反向加密法
改變金鑰擴展演算法
若反向加密法不使用 InvRoundKey 轉換,我們可以透過修改金鑰擴展演算法來產生另一組回合金鑰供反向加密法使用。
7.5 範例
在這一節中,我們提供一些加密/解密和金鑰產生的範例,以強調前面兩節所介紹的概念。
範例 7.10
以下是使用一個隨機選擇加密金鑰將明文加密後產生的密文區塊。
表 7.7 加密範例
表 7.7 加密範例 ( 續 )
表 7.7 加密範例 ( 續 )
範例 7.11
圖 7.21 展示範例 7.10 裡第七回合的狀態值變化。
範例 7.12
也許有人會對全部由位元 0 所組成的明文經過加密的結果感到好奇。以下的密文便 是使用範例 7.10 的金鑰加密後之結果。
範例 7.13
現在來檢查一下第六章討論過的崩塌影響。我們只修改明文的一個位元,然後比較加密後的結果。以下可以看到,光是修改明文的最後一個位元,對於密文的擴散和混淆的效果就非常明顯了。明文修改後的密文和原來的密文相較,可以看出有許多位元都不一樣。
範例 7.14
以下展示使用全部由位元 0 所組成的金鑰之加密效果。
7.6 AES 安全性分析
本節討論主題 安全性 實現性 簡單性與成本
7.6.1 安全性
AES 本來就是設計來取代 DES 的,所以 AES 幾乎已經測試過所有在 DES 上見過的攻擊。目前尚未發現其中有任何一種方法可以破壞 AES 的安全性。
7.6.1 安全性 ( 續 ) 暴力攻擊
單就金鑰長度來看, AES 裡面最少 128 位元的金鑰絕對比 DES 的 56 位元金鑰要安全得 多。
統計攻擊 已經有很多的測試都無法對 AES 所產生的密文
進行統計攻擊。 差異攻擊與線性攻擊
AES 系統目前仍然沒有任何已知的差異攻擊或者線性攻擊存在。
7.6.2 實現性
AES 的設計非常具有彈性,可以在軟體、硬體和韌體上實作,並利用查表或是使用完整 定義的算術結構。
7.6.3 簡單性與成本
AES 設計所使用的演算法都非常簡單,可以很容易地在非常便宜的處理器和非常小的記憶體條件下實作。