Encryption

如何計算 Rijndael SBox?

  • September 29, 2020

我想使用計算而不是表格來實現 Rijndael操作,因為我喜歡在不同的單詞大小subBytes()上玩這個,作為一個學術練習,看看表格會是什麼樣子。

第一部分是多項式二進制有限域中的乘法逆,不是嗎?

這 $ g: a \rightarrow b = a^{-1} \in \frac{\mathbb{F}_{2^8}[z]}{m(z)} $ , 對?

我可以使用Sage來計算它,但我更喜歡自己實現它。我已經嘗試過 Rijndael 的設計書的第 4.3.2 節,並且我已經看過像 cohen 的書這樣的其他人(它關於曲線,但解釋了二進制場數學),但我沒有找到讓我信服的東西,因為玩在第一種情況下,不同的字長會在一組醜陋的if語句中衰減,或者我的背景太豐富而無法真正以正確的方式得到其他人。

  • 攻擊此實現的最佳方法是什麼?

我對此還有另一個問題,subBytes()它與仿射變換中的參數有關。在這個子操作中

$ f: a \rightarrow b = r\times a+s $

在哪裡 $ r $ 是多項式的旋轉矩陣表示 $ z^7+z^6+z^5+z^4+1 $ (我沒有得到這個矩陣背後的東西,或者這個 MDS(最大可分離距離)為什麼/如何出現),並且 $ s $ 看起來是多項式的向量表示 $ z^6+z^5+z+1 $ . 我也很困惑,因為這本書和 1999 年的修訂版 2 對我所說的使用了不同的值 $ r $ 和 $ s $ .

  • 那些是怎樣的 $ r $ 和 $ s $ 選擇?

要撤消此操作 $ f $ , $ f^{-1} $ 正在使用 $ r^{-1} $ 和 $ s^{-1} $ 如果我沒記錯的話,那不是使用第一個操作計算的倒數。

  • 關於它們是如何計算的任何線索?

你想做的事情是可以完成的,但如果你期望它能夠正常工作,那你就錯了。

這裡進行逆計算是容易的部分,困難的部分是仿射變換多項式和向量的選擇,因為錯誤的選擇會導致不安全的 s-box。

乘法逆

計算倒數最簡單的方法是建表。您需要首先為給定的欄位大小和約簡多項式建構反對數和對數表。

反對數表是這樣建構的:

$ Antilog(0) = 1 $

$ Log(0) = 0 $

$ Antilog(i) = g \times Antilog(i-1) $

$ Log(Antilog(i)) = i $

為了 $ i = 1 $ 到 $ 2^{n-1} $ , 在哪裡 $ g $ 是給定表的生成器 $ m $ (歸約多項式),加法和乘法在 $ GF(2^n) $

然後使用這些表中的查找來完成乘法逆運算:

$ b^{-1}(x)=Antilog(2^{n-1} - Log(b(x))) $

在哪裡 $ b(x) $ 是您想要反轉的多項式的字節表示,並且減法不在該欄位中。 $ 0^{-1} $ 映射到 $ 0 $ .

對於 Rijndael, $ n $ 是 8, $ m $ 是0x11B,最小的 $ g $ 是 3。

一旦生成了對數表和反對數表,您可以為逆向建構單獨的表,或者執行雙重查找來獲取它。

仿射變換

對於仿射變換矩陣乘法,請參閱我的答案here以獲取實現範例。新的仿射變換多項式的位索引需要放入旋轉矩陣的正確位置。

0x1F 的位索引與多項式表示的位索引不匹配,這實際上是從上到下最右邊的行。0x1F 表示使軟體算法更易於編寫和調試,因為列索引現在匹配輸入的連續除以 2 並採用 LSB。這可以使用乘法以正確的順序完成,但需要採取步驟來防止許多程式語言中特定數據類型(字節)的溢出。通過以下方式創建用於轉換的表 $ r $ 將是最快的測試。

0x1F 表示也用於描述 Rijndael s-box 或呈現替代方案的許多論文中,因此我傾向於預設使用它,同時記住多項式是不同的。

這 $ r $ 和 $ s $ Rijndael 中使用的值似乎不是雪崩特性的最佳值,而且似乎是在沒有詳細分析的情況下選擇的。 $ r^{-1} $ 是的倒數 $ r $ ,這裡有詳細資訊。 $ s^{-1} = r^{-1} \times s $ .

測試

在更改 s-box 的寬度時,此時需要牢記幾件重要的事情。仿射多項式的選擇決定了s盒的雪崩性質,向量決定了是否有不動點。雪崩特性也由初始選擇決定 $ m $ . 有關更改這些的效果,請參閱本文:

使用仿射變換生成的 S-box 產生最大雪崩效應

在生成候選 s-box 後,需要對其進行測試以確保它符合所有相關的加密屬性。首先測試雪崩(使用第一個函式向量),一旦找到最佳仿射變換,就遍歷所有向量。然後應該對剩餘的 s-box 執行額外的測試。請注意,在上述論文(表 4)中生成的第一個 s-box 中缺少向量測試,其固定點位於 0x10。Rijndael 設計標準要求不存在固定點;儘管事實上沒有已知的利用固定點的攻擊,但還是施加了這種限制。

每增加 1 位 $ n $ ,工作量大幅增加。每個 s-box 的生成時間要長 2 到 3 倍,要測試的仿射/向量組合是 4 倍,每個組合的雪崩測試工作量高達 8 倍。此外,如果您測試所有選項 $ m $ 為了獲得最佳雪崩效果,平均而言,這是另一個翻倍。儲存表格所需的記憶體也增加了一倍以上。

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