怎麼ñbñbNb(列數)以 AES(Rijndael)計算?
AES的NIST 出版物定義 $ Nb $ 作為:
組成狀態的列數(32 位字)。對於本標準,Nb = 4。
在第 5.2 節:密鑰擴展中, $ Nb $ 已用於計算要生成的輪密鑰數。
第 6.3 節規定:
該標準明確定義了密鑰長度 (Nk)、塊大小 (Nb) 和輪數 (Nr) 的允許值——參見圖 4。但是,該標準的未來重申可能包括對允許值的更改或添加對於那些參數。因此,實施者可以選擇在設計 AES 實施時考慮到未來的靈活性。
很明顯, $ Nk $ 是密鑰的長度,以 4 字節字為單位,因此可以計算為: $$ Nk = {(Key Size) \over (Bits Per Byte) * (Bytes Per Word)} $$ 在哪裡,
$$ Bits Per Byte = 8 $$
$$ Bytes Per Word = 4 $$
因此,對於 128、192 和 256 位密鑰,它將分別為 4、6 和 8。和 $ Nr $ (輪數)是: $$ Nr = (Nk) + 6 $$
同樣,是否有明確的計算公式 $ Nb $ 或者它是一個常數值( $ 4 $ ) 對於像 AES-512 這樣的可能更高長度的密鑰也保持不變?
$ N_b $ 是固定的,正如FIPS AES 標準的許多部分所述。
正如您所指出的,唯一的規定是實施者可能會牢記未來的變化。
AES 狀態(對於所有變體)為 128 位或 16 字節,初始化為明文或密文(取決於加密或解密)。出於視覺化的目的,這 16 個字節排列在一個 $ 4\times4 $ 網格(列專業)。
輪函式的成分作用於這個狀態。特別是 shiftRows 和 mixColumns 作用於 $ 4\times4 $ 數組以名稱建議的方式,而 subBytes 和 addRoundKey 作用於數組的各個字節,後者以鍵相關的方式。(對於解密中的反函式也是如此。)
在任何情況下,對於 AES 的所有變體,列數都是 4。AES 版本之間的變化是密鑰大小、密鑰時間表和輪數。