Aes

如何在 AES 中的 SubBytes() 變換的第一個變換中找到乘法逆?

  • September 21, 2016

FIPS-197 §5.1.1 中,它說 SubBytes() 轉換中的第一個轉換是:

  1. 在有限域中取乘法逆 $ \text{GF}(2^8) $ 秒中描述。4.2;元素 $ {00} $ 映射到自身。

看著秒。4.2,它說對於給定的非零多項式 $ b(x) $ 你可以找到相反的 $ b(x)^{-1} $ 通過使用擴展歐幾里得算法。我的問題基本上是:你是怎麼做到的?

我看過很多例子,維基百科有一個 $ \text{GF}(2^8) $ ,但我還是不明白。

讓 $ b(x) = x^6+x^4+x+1 $ , Rijndael 有 $ m(x)=x^8+x^4+x^3+x+1 $ .

從關係:

$$ b(x)a(x)+m(x)c(x)=1 \iff b^{-1}(x) \equiv a(x)\pmod{m(x)} $$我不知道是什麼 $ a(x) $ 和 $ c(x) $ 是。 更高層次的解釋可能假設你知道一些事情,而基本解釋

只使用歐幾里得算法的簡單整數,所以對於初學者來說這是一個令人沮喪的地方。

他們指的是Bézout 恆等式的公式,該公式計算最大公約數,擴展到有限域,其中 1 是乘法中性元素。

從關係 $ b(x)a(x)+m(x)c(x)=1 $ ,

$$ b^{-1}(x)=a(x)\mod m(x) $$我不知道是什麼 $ a(x) $ 和 $ c(x) $ 是?

在這種情況下, $ b(x) $ 是需要逆向的元素,並且 $ a(x) $ 是一些係數 $ c(x) $ 這導致等式是正確的。自從 $ a(x) $ 必須在現場,它是減少模 $ m(x) $ ,成為的倒數 $ b(x) $ . 擴展歐幾里得算法的實際計算不需要 $ c(x) $ 去尋找 $ a(x) $ , 但它必須存在於公式中才能使上述歸約正確:

$$ b(x)a(x)+m(x)c(x)=1 $$ $$ (b(x)a(x) \mod\ m(x)) + (m(x)c(x) \mod\ m(x)) = 1 \mod\ m(x) $$ $$ m(x)c(x) \mod\ m(x) = 0 $$ $$ b(x)a(x) \mod\ m(x) = 1 \mod\ m(x) $$ $$ a(x) \mod\ m(x)={1/b(x)}\mod\ m(x) $$ $$ a(x) \mod\ m(x)=b^{-1}(x) $$ 任何得到的逆可以乘以 $ b(x) $ 檢查正確性,因為結果應該是 1 模 $ m(x) $ . 在實踐中,乘法逆是使用非零元素的對數/反對數表計算的:

$$ a(x) \mod\ m(x)=log^{-1}(255 - log(b(x))) $$ 由於表格是使用冪模計算的 $ m(x) $ , 結果 $ a(x) $ 已經減少並在該領域內。

由於逆僅用於計算 sbox,因此在大多數 AES 實現中不使用它,因為預先計算的 sbox 儲存為表而不是動態生成的。

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