正式地說,什麼是 AES?
AES 應該是對稱密鑰分組密碼。與此相對應的理論是偽隨機排列。
我想說 AES 是一個 PRP(至少應該是這樣),但這似乎不正確;雖然 AES 有更大的變體,但我看不出該算法如何擴展到任意大的安全參數。
從理論上如何看待 AES?
應用密碼學家經常將 AES 的三種變體之一(例如 AES-256)視為一個函式: $$ \begin{align}E:\ {0,1}^{256}\times{0,1}^{128}&\to{0,1}^{128}\ (k,p)\quad &\mapsto c=E(k,p)\end{align} $$ 這樣:
- 對所有人 $ k\in{0,1}^{256} $ , 用密鑰加密 $ k $ 定義如下 $$ \begin{align}E_k:\ {0,1}^{128}&\to{0,1}^{128}\ p\quad &\mapsto c=E_k(p)\underset{\text{def}}=E(k,p)\end{align} $$ 是單射的、滿射的和雙射的(這三個對於有限集上的任何函式都是等價的),即 $ {0,1}^{128} $
- 有一種高效的加密算法計算 $ E_k(p) $ 從 $ k $ 和 $ p $
- 有一個高效的解密算法計算 $ p $ 和 $ c=E_k(p) $ 從 $ k $ 和 $ c $ (注意:效率不高,但很接近)。
- 實際上不可能區分使用固定的未知密鑰值實現這些算法的挑戰者/預言機 $ k $ 從實現隨機排列及其逆的預言機中隨機選擇。
注意:條件 4 僅適用於隨機獨立選擇的密鑰,這是 AES 的主要設計標準。它不適用於相關密鑰攻擊或理想密碼模型。
注意:面向定量安全的密碼學家將區分器在 4 處成功的優勢與需要相同工作並按順序嘗試密鑰的通用攻擊的優勢以及嚴肅的門檻值進行比較。
更注重理論的密碼學家希望正式定義“有效”和“幾乎不可能”。他們通過聲明所涉及的算法屬於多項式時間算法來做到這一點;並使用可忽略機率的概念。但是這些需要一個“安全參數” $ +\infty $ 作為多項式的輸入,AES 僅定義為 $ |k|\in{128,192,256} $ 和 $ |p|=128 $ , 是有界的。
為了解決這個問題,我們可以使用 AES 被正式定義為Rijndael的限制,並且第 12.1 節觀察到:
密鑰調度支持 4 字節的倍數的任何密鑰長度。(…) 密碼結構適用於任何長度為 4 字節的倍數的塊,最少為 16 字節。
該部分還說明了應該有多少輪,以及如何將 ShiftRow 擴展為 128、192 和 256 位塊,我們可以進一步擴展。
對於參數 $ n\ge128 $ ,我們可以取塊大小 $ |p|=32,N_b=32,\lfloor n/32\rfloor $ 和密鑰大小 $ |k|=32,N_k=32,(N_b-3+(n\bmod 32)) $ , 和 $ N_r=N_k+6 $ 回合。我們回到了一個標準框架,其中為任意高安全參數編寫算法 $ n $ ,作為多項式時間算法的輸入作為位串輸入 $ n $ 位,通常為 1。當 $ n=131 $ (分別。 $ n=133 $ 和 $ n=135 $ ) 我們得到 AES-128(分別是 AES-192 和 AES-256)。為了 $ n=128 $ ,我們得到一個 128 位密碼和一個玩具大小的 32 位密鑰。
但我不知道 AES 的任何安全分析是否關心做一些遠端類似的事情並研究大型攻擊 $ n $ . 可見理論與實踐的差距!
注意:還有其他方法可以使 AES 成為由安全參數索引的分組密碼系列。特別是,我們可以定義適用於更細粒度值的變體 $ |k| $ 和 $ |p| $ , 並在 $ \mathbb F(2^j) $ 為了 $ j $ 變數,而不是 $ j=8 $ 與 AES 一樣;和/或調整 $ 32=4, j $ 到另一個倍數 $ j $ . 然而,它與 AES 的匹配度甚至低於上述值,這在AES 的正式定義的附錄 D 中引用的文件有所支持。