Aes

在 AES Keyschedule 中:從上一輪密鑰推斷所有輪密鑰和密碼密鑰

  • August 1, 2017

我得到了 AES 中的最後一輪密鑰,我想推斷所有輪次密鑰和第一輪密鑰,即密碼密鑰。

誰能提供一個算法來做到這一點?

對於 AES-128,這很容易(也就是說,硬體 AES 實現非常簡單,在解密模式下,只需儲存最後一輪密鑰,並即時派生所有其他子密鑰,包括第一個子密鑰)。

讓我們將擴展密鑰視為一系列 32 位字 $ w[0], w[1], w[2], w[3], …, w[40], w[41], w[42], w[43] $ , 那裡 $ w[0], w[1], w[2], w[3] $ 是 128 位 AES 密鑰,並且 $ w[40], w[41], w[42], w[43] $ 是最後一輪的關鍵。

然後,密鑰擴展過程定義為 $ w[i] = w[i-4] \oplus F_i(w[i-1]) $ , 在哪裡 $ F_i $ 是一個簡單的函式,涉及可能通過 sbox 發送輸入,並在輪常數中進行異或運算。從…開始 $ w[0], w[1], w[2], w[3] $ ,這使我們能夠有效地計算其餘的 $ w $ 大批。

因此,如果我們將其重寫為 $ w[j] = w[j+4] \oplus F_{j+4}(w[j+3]) $ (我們通過設置得到 $ j = i-4 $ 並重新排列),然後,從 $ w[40], w[41], w[42], w[43] $ ,我們可以計算 $ w[39] $ 使用這個公式,然後按照我們的方式逆向執行關鍵計劃,以初始值結束。


對於 AES-192 和 AES-256,它實際上非常相似,除了您需要比最後一輪密鑰更多的資訊(這是有道理的;只有 128 個最後一輪密鑰位;沒有足夠的資訊來恢復完整的 192 或 256 位鑰匙)。但是,如果你有最後 6 個 $ w $ 元素(對於 AES-192)或最後 8 個元素(對於 AES-256),相同的邏輯有效。

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