密鑰塊密碼的流水線架構
我想實現AES128的流水線架構;而且我無法弄清楚管道階段的數量。正如我所理解的,可以在回合內部或外部或兩者之間製作管道階段。我不明白的是,如果我選擇在一輪內製作它們,為什麼階段數必須是輪數的除數?我知道如果流水線階段在兩輪之間,它必須是一個除數。如果我的理解有誤,請糾正我。
我認為既然每輪裡面有4個操作,那麼可以做4個階段嗎?但是最後一輪呢?
我讀到的內容如下: 圖 21 顯示了設計高性能密鑰塊密碼實現的傳統方法,在非回饋密碼模式下執行。首先實現圖 21a 所示的基本迭代架構,並確定其速度和麵積。基於這些估計,可以找到在不超過可用電路面積的情況下可以展開的輪數 K。展開的輪數 K 必須是密碼輪總數 #rounds 的除數。如果可用電路面積不足以容納所有密碼輪,則應用具有部分外輪流水線的架構,如圖 21b 所示。
階段數必須是輪數的除數
這適用於一個階段實現的流水線和迭代實現 $ k\ge2 $ 出局 $ K $ ,我們希望每個 $ K/k $ 完整分組密碼所需的階段嚴格相同。可以通過在最後階段減少輪次或在迭代實現中使用額外的多路復用器提取輸出後的輸出來放棄該要求 $ K\bmod k $ 在最後一輪 $ \lceil K/k \rceil $ 階段。該要求根本不適用於每個流水線階段的單輪或更少輪次的實現。
在 AES 中,由於每輪內部有 4 次操作,那麼可以進行 4 個階段嗎?
是的,每輪有 4 個階段,因此 $ 4K $ 每個塊的階段( $ K\in{10,12,14} $ 取決於密鑰大小)。這在迭代實現中很有用(其目標是以犧牲吞吐量為代價減少矽面積)。一個階段仍然需要在 SubBytes 步驟中執行 4 個相同的字節替換(因為一個塊的每 16 個字節在每一輪都經過),因此最小面積實現可能會進一步細分,總共 $ 16K $ 每個塊的步數。
但是最後一輪呢?
的確,最後一輪需要特例;在上一輪不同(更簡單)功能的管道中,在迭代實現中,它是抑制 MixColumns 的邏輯的額外輸入,在最後一輪中保持不同的狀態 $ K $ 回合。