Block-Cipher

蛇密碼:Osvik S-Boxes 混淆和測試向量

  • November 2, 2013

我很難實現 Osvik 在本文中發現的 S-Boxes:加速蛇。在論文的最後,給出了所有的 s-box,然後,我只是實現它們。這是我的實現 $ S_0 $ 舉個例子 :

UInt32Vector Serpent::S0(const UInt32Vector &Y)
{
  UInt32Vector X = Y;
  X[3] ^= X[0]; uint32_t X4 = X[1];
  X[1] &= X[3]; X4 ^= X[2];
  X[1] ^= X[0]; X[0] |= X[3];
  X[0] ^= X4;   X4 ^= X[3];
  X[3] ^= X[2]; X[2] |= X[1];
  X[2] ^= X4;   X4 = ~X4;
  X4 |= X[1];   X[1] ^= X[3];
  X[1] ^= X4;   X[3] |= X[0];
  X[1] ^= X[3]; X4 ^= X[3];

  return {X[1], X4, X[2], X[0]};
}

如您所見,這正是 $ S_0 $ 從紙上。我必須準確地檢查我的 s-box 3 次,以確保與論文中的相同。現在,這是我如何使用 $ S_i $ 為了 $ i=0,\ldots,7 $ :

subkeys.push_back(S[k & 7]({W[j], W[j+1], W[j+2], W[j+3]}));

在哪裡 $ k = 3 $ 並減少 1,如算法規範中所述。

讓我感到困惑的是,與他論文中描述的相比,他的 s-box的Osvik 實現。這似乎有所不同。而且,在他的關鍵日程中, $ i = 3 $ 是增加而不是減少。

現在,這是我的問題:

  1. 我在哪裡可以找到測試向量來測試我的 s-box?我從完整的送出包中找到了 Floppy 4 (ecb_iv.txt) 中的關鍵時間表,但沒有關於 s-box。
  2. 為什麼他的 s-boxes 實現與他論文中的不同?
  3. 是我的 $ S_0 $ 實施和使用糾正了我給出的內容還是我錯過了一些重要的事情?

非常感謝您的幫助。

按順序回答您的問題:

  1. 您不會在送出中找到 s-box 的測試向量 - s-box 函式是特定於實現的優化,尤其是像OsvikGladman/Simpson這樣的位切片 s-box 函式,它們實際上計算了多個 s-box並行查找。

如果您需要測試您的 s-box 實現,我會從您嘗試複製的實現中獲取 s-box 函式,並自己單獨生成測試向量。 2. 論文和 C 源文件之間的 s-box 差異在這兩個資源的首頁上進行了解釋: “……從那時起,我對算法進行了進一步的改進,並且針對 3 路並行執行優化的結果用於我的實現……”

看起來 Osvik 進行了進一步的搜尋和測試,並在發布初始功能後提出了更好的(可能適用於 x86/x64 架構)的 s-box 功能。 3. 我看不出您的方法有任何明顯錯誤,但我建議選擇其中一種實現進行比較,並直接從 s-box 函式生成一些測試向量以確定。這是我計劃用來將 Osvik s-box 函式集成到目前使用 Gladman/Simpson 函式的庫中的方法——我很高興你指出了論文/來源中的不一致之處。

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