PRESENT 關鍵時間表背後的原因是什麼?
似乎很少有關於 PRESENT 的書,甚至更少的書給出了關鍵時間表機制背後的任何推理。
我理解它是如何工作的,我用它製作了一個簡單的 Excel 程序。我可以清楚地看到所有步驟,並且我認為它可以與測試向量匹配。
但是,我不明白為什麼某些位被異或而不是其他位,或者為什麼圓形計數器必須按順序排列 $ 1-31 $ . 我的問題是:
- 簡單來說,密鑰調度如何保護它免受與密鑰相關的攻擊?
- 如果(例如)我們改變了步驟怎麼辦 $ S[b_{78}b_{77}b_{76}b_{75}] $ 到別的東西,比如 $ S[b_{74}b_{73}b_{72}b_{71}] $ 或其他任何東西。這樣會不會變弱?更強?沒有區別?
- 如果圓形計數器不在訂單中怎麼辦 $ 1,2,\ldots,31 $ ? 如果圓形計數器的順序是 $ 1-31 $ ? 再一次,這會讓它變得更弱、更強大還是沒有什麼不同?
謝謝。
問題 1
簡單來說,密鑰調度如何保護它免受與密鑰相關的攻擊?
根據論文“ Lightweight Block Ciphers Revisited: Cryptanalysis of Reduced Round PRESENT and HIGHT ”,密鑰調度的非線性有助於抵抗相關密鑰攻擊:
另一方面,由於足夠的非線性,相關密鑰差分攻擊也被認為是不適用的
$$ sic $$密鑰調度算法。
上面的引用然後指向對使用相關密鑰的新型密碼分析攻擊的引用,其中提到了以下內容:
這些攻擊基於以下觀察:在許多塊密碼中,我們可以將密鑰調度算法視為一組算法,每個算法從前幾輪的子密鑰中提取一個特定的子密鑰。如果提取各輪子密鑰的所有算法都相同,那麼給定一個密鑰,我們可以將所有子密鑰向後移動一輪,得到一組新的有效子密鑰,這些子密鑰可以從其他密鑰導出。我們稱這些鍵為相關鍵。
然後,他們給出的關鍵時間表的描述是:
每一輪的子密鑰是通過密鑰調度算法從使用者提供的密鑰中導出的。我們只提供 Present-128 的密鑰調度算法的細節,因為它是本文的主要目標:128 位密鑰儲存在密鑰寄存器中 $ K $ 並表示為 $ k_{127}k_{126}\dots k_0 $ . 子鍵 $ K_i (0 ≤ i ≤ 31) $ 由寄存器實際內容的最左邊 64 位組成 $ K $ . 圓鍵後 $ K_i $ 被提取,密鑰寄存器 $ K $ 向左旋轉 61 位位置,然後將 S-box 應用於密鑰寄存器的最左側 8 位,最後將輪計數器值(每輪不同的常數)與位異或 $ k_{66}k_{65}k_{64}k_{63}k_{62} $ …
因此,密鑰調度中的 S-Box 提供了一些非線性。並且計數器的添加還可以使每一輪的關鍵調度功能不同,並為 [ 2 ] 中的攻擊提供一些抵抗力 - 如果確實如此,我可以找到的任何地方都沒有明確說明。
問題2
如果(例如)我們改變了步驟怎麼辦 $ S[b_{78}b_{77}b_{76}b_{75}] $ 到別的東西,比如 $ S[b_{74}b_{73}b_{72}b_{71}] $ 或其他任何東西。這樣會不會變弱?更強?沒有區別?
我認為這是關於主回合功能而不是關鍵時間表,因為這些指數似乎不是關鍵時間表的一部分。
S-Box 並行應用於每組 4 個連續位,因此答案是 $ S[b_{78}b_{77}b_{76}b_{75}] $ 和 $ S[b_{74}b_{73}b_{72}b_{71}] $ 都執行。把一個換成另一個是沒有效果的。
至於為什麼 4 位寬的 S-Box 會並行應用於 4 位的連續部分,答案是因為它確實是唯一的方法。S-Box 之後的位置換對索引進行加擾,以便將 S-Box 的連續應用應用於不同的位分組。但這些是單獨的步驟,並且做類似的事情 $ S[b_{73}b_{71}b_{72}b_{74}] $ 只需將置換步驟重新安排到應用 S-Box 之前,而不是之後,S-Box 仍將並行應用在 4 個連續位上。
問題 3
如果圓形計數器的順序不是 1,2,…,311,2,…,31 怎麼辦?如果圓形計數器是 1-311-31 的任意順序怎麼辦?再一次,這會讓它變得更弱、更強大還是沒有什麼不同?
它們按此順序排列的原因是為了性能。如果您檢查彙編指令,則以這種方式使用圓形計數器是實現該操作的最便宜的方式。使用值 1-31 的置換順序將需要額外的 MOV/ADD 操作。在設計快速排列時,您希望最小化 MOV。
櫃檯的工作是確保每一輪都是不同的。只要它對於每一輪都是唯一的,實際的文字值是多少並不重要,因此您也可以簡單地使用最有效的可用序列。