Implementation

IDEA的解密輪中乘法是如何倒轉的?

  • October 16, 2013

IDEA輪函式示意圖

正如我們在圖片中看到的,我們在這個算法中有一個乘法,我們知道兩個 16 位輸入應該有一個 32 位輸出,但是這裡我們只使用 32 位輸出的 16 位。

對於解密,我們可以將算法從算法的底部反轉到頂部,但是我們如何反轉產生值的乘法 $ a $ 恢復 $ I $ ?

僅給定輸出,乘法運算確實不是唯一可逆的。但我們也有輸入之一,即子鍵。我們可以使用它來反轉乘法。

IDEA 的解密需要更改密鑰計劃中的子密鑰。我沒有在網上找到關於 IDEA 的好的描述,所以我回到Applied Cryptography , 2nd Edition,它有一個很好的描述(以及提供的圖表):

解密完全一樣,只是子密鑰顛倒了,略有不同。解密子密鑰是加密子密鑰的加法或乘法逆。(為了 IDEA 的目的,全零子塊被認為代表 $ 2^{16} = –1 $ 對於乘法模 $ 2^{16} + 1 $ ; 因此 0 的乘法逆元為 0。)

對於解密,您將獲取原始乘法運算的結果並將其乘以所使用的子密鑰的乘法倒數。(子密鑰是從原始密鑰導出的,並且可以從子密鑰計運算元密鑰的乘法逆元。)這會產生原始輸入值。

這在數學上有效,因為乘法運算是模執行的 $ 2^{16}+1 $ 它(結合提供的特殊情況處理 0)形成了一個數學結構。在一個組內,每個乘法運算都保證有一個可用於反轉運算的逆值。

它形成一個組,因為一般來說,數字 $ 1, 2, …, p-1 $ 形成一個以素數為模的乘法群 $ p $ (這個組可以表示為 $ \mathbb{Z}^*_p $ ),在我們的例子中 $ 2^{16}+1 $ 是素數。0 的特殊情況是必要的,因為有一個小的實現複雜性:變數值 $ 0 $ 不在組中並且 $ 2^{16} $ 不能儲存在 16 位變數中。這很容易解決:定義未使用的 $ 0 $ 代表 $ 2^{16} $ .

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