Aes
AES密鑰擴展:256bit密鑰
在 AES 算法中,在密鑰調度中,為什麼 256 位密鑰的擴展需要額外應用 S-box,而不是 128 位和 192 位密鑰的擴展?
(顯而易見的答案是“因為它更安全”……但是為什麼?如果它更安全,為什麼不在 128 和 192 上使用它?)
它與密碼密鑰的大小和輪密鑰的大小之間的對齊有關。由於 256 位密鑰的大小是輪密鑰的兩倍,因此密鑰調度的非線性將與每個其他塊對齊,這很糟糕。
下面是一個由密鑰調度為 value 的密鑰(十六進製字節)生成的輪密鑰範例
0000000000000000000000000000000000000000000000000000000000000001
:00 00000000 00000000 00000000 00000000 01 00000000 00000000 00000000 01000000 02 637c6362 637c6362 637c6362 637c6362 03 fb10fbaa fb10fbaa fb10fbaa fa10fbaa 04 cf51a96f ac2dca0d cf51a96f ac2dca0d 05 6ac88f7d 91d874d7 6ac88f7d 90d874d7 06 c131c8f9 6d1c02f4 a24dab9b 0e606196 07 c11860ed 50c0143a 3a089b47 aad0ef90 08 a19db82e cc81bada 6ecc1141 60ac70d7 09 118931e3 414925d9 7b41be9e d191510e 10 0aa339ef c6228335 a8ee9274 c842e2a3 11 f9a5a9e9 b8ec8c30 c3ad32ae 123c63a0 12 ea6ad234 2c485101 84a6c375 4ce421d6 13 d0cc541f 6820d82f ab8dea81 b9b18921 14 173c1ad3 3b744bd2 bfd288a7 f336a971
當你取出額外的 SubBytes 時會發生以下情況:
00 00000000 00000000 00000000 00000000 01 00000000 00000000 00000000 01000000 02 637c6362 637c6362 637c6362 637c6362 03 637c6362 637c6362 637c6362 627c6362 04 c9d6739b aaaa10f9 c9d6739b aaaa10f9 05 c9d6739b aaaa10f9 c9d6739b abaa10f9 06 50b4df55 fa1ecfac 33c8bc37 9962acce 07 50b4df55 fa1ecfac 33c8bc37 9862acce 08 dbf275cc 21ecba60 12240657 8b46aa99 09 dbf275cc 21ecba60 12240657 8a46aa99 10 358c2f70 14609510 06449347 8d0239de 11 56f04c12 771cf672 6538f025 ef7e5abc 12 5053dcee 443349fe 4277dab9 cf75e367 13 9985af75 ee995907 8ba1a922 64dff39e 14 5b1042a3 1f230b5d 5d54d1e4 92213283
可以看出,就第 9 輪而言,輪密鑰仍然非常線性,並且由於每隔一個輪密鑰執行 sbox 應用程序,因此輪密鑰的 4 個子密鑰中的 3 個與直到第 9 輪的相鄰輪密鑰相同,而第 4 個僅相差 4 位最大值。