AES 192 和 256 的 RCON
這是關於AES 192 和 256 中使用了多少 RCON 值
的問題。 我閱讀了 NIST 出版物介紹 AES 以及附錄 A.2 和 A.3(192 位和 256 位密鑰的密鑰擴展),僅 $ rcon_1 $ 至 $ rcon_8 $ 用於 192 位和高達 $ rcon_7 $ 為 256 位。我的問題是怎麼可能只有 7 或 8 個值 $ rcon $ 當我們在 AES 192 和 256 中有更多輪次時使用。據我了解, $ rcon $ 每輪都使用,所以我們不應該有更多 $ rcon $ 值(由於 AES192 和 256 中的輪數增加)而不是更少?
我收到了 Vincent Rijmen 的回复。這是完整的回复:
rcon 用於計算輪密鑰。AES192 和 AES256 的輪密鑰計算迭代次數較少,因為這些計算中的每一個都產生了超過 128 位的輪密鑰材料。這就是為什麼我們需要更少的 rcon 值。
Paŭlo Ebermann 的出色答案在 ASCII 圖像中提供了一些細節,在這裡我將嘗試以不同的方式解釋這一點。
rcon
AES-128 密鑰調度為需要 10 個值的 11 個輪密鑰使用 4 個 32 位字列。rcon
AES-192 密鑰調度為需要 8 個值的 13 個輪密鑰使用 6 個 32 位字列。rcon
AES-192 密鑰調度為需要 7 個值的 15 個輪密鑰使用 8 個 32 位字列。額外的輪密鑰用於與明文異或的初始輪密鑰。
- 在 AES-192 中:13 個輪密鑰需要 52 個 32 位字。使用 6 個 32 位字和 8 輪生成 13.5 輪的密鑰,比必要的多一點。第二個的前半部分是關鍵本身。
- 在 AES-256 中:15 個輪密鑰需要 60 個 32 位字。使用 8 個 32 位字和 7 輪生成 16 輪的密鑰,這超出了必要的範圍。前兩個是關鍵本身。
您分別有 10、12 和 14 輪;但是,它們不是取決於密鑰時間表的線性增量。對於 AES-192,您有 8 個不同的值,而對於 AES-256,您有 7 個值。對於 AES-128,RCON 值僅隨每一輪變化。
RCON 值(在硬體中)由一個 8 位的寄存器生成,並且每輪遞增。它包含計數,單獨進行加密,你會得到:
0: 00000001 1: 00000010 2: 00000100 3: 00001000 4: 00010000 5: 00100000 6: 01000000 7: 10000000 8: 00011011 9: 00110110 10: 01101100 11: 11011000 12: 10101011 13: 01001101 14: 10011010
這不是您實際使用的,但有必要進行完整的討論。在上面的列表中,對於 AES-128,您將從第 0 輪開始,最後一輪,第 9 輪(第 10 輪),您將擁有 0x36。
對於 AES-192 和 AES-256,由於密鑰計劃,您最終會跳過常量。對於 AES-192:
0: 00000001 1: 00000001 2: 00000001 3: 00000010 4: 00000100 5: 00000100 6: 00001000 7: 00010000 8: 00010000 9: 00100000 10: 01000000 11: 01000000 12: 10000000
對於 AES-256:
0: 00000001 1: 00000001 2: 00000001 3: 00000001 4: 00000010 5: 00000010 6: 00000100 7: 00000100 8: 00001000 9: 00001000 10: 00010000 11: 00010000 12: 00100000 13: 00100000 14: 01000000
您可以通過多種方式實現這一點。您在課堂上會採用的幼稚方法,但很容易遵循(而且,FPGA 通常會這樣做):
我通常這樣做的方式(注意,這是加密,你移動水龍頭 4 進行解密):
時鐘控制遞增該值。