Block-Cipher

PRESENT 關鍵時間表背後的原因是什麼?

  • February 20, 2018

似乎很少有關於 PRESENT 的書,甚至更少的書給出了關鍵時間表機制背後的任何推理。

我理解它是如何工作的,我用它製作了一個簡單的 Excel 程序。我可以清楚地看到所有步驟,並且我認為它可以與測試向量匹配。

但是,我不明白為什麼某些位被異或而不是其他位,或者為什麼圓形計數器必須按順序排列 $ 1-31 $ . 我的問題是:

  1. 簡單來說,密鑰調度如何保護它免受與密鑰相關的攻擊?
  2. 如果(例如)我們改變了步驟怎麼辦 $ S[b_{78}b_{77}b_{76}b_{75}] $ 到別的東西,比如 $ S[b_{74}b_{73}b_{72}b_{71}] $ 或其他任何東西。這樣會不會變弱?更強?沒有區別?
  3. 如果圓形計數器不在訂單中怎麼辦 $ 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。

櫃檯的工作是確保每一輪都是不同的。只要它對於每一輪都是唯一的,實際的文字值是多少並不重要,因此您也可以簡單地使用最有效的可用序列。

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