Aes

AES 192 和 256 的 RCON

  • November 22, 2021

這是關於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 圖像中提供了一些細節,在這裡我將嘗試以不同的方式解釋這一點。

  • rconAES-128 密鑰調度為需要 10 個值的 11 個輪密鑰使用 4 個 32 位字列。
  • rconAES-192 密鑰調度為需要 8 個值的 13 個輪密鑰使用 6 個 32 位字列。
  • rconAES-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 進行解密):

在此處輸入圖像描述

時鐘控制遞增該值。

引用自:https://crypto.stackexchange.com/questions/81712