Twofish

山茶花鑰匙時間表

  • July 12, 2019

茶花被廣泛使用,現已成為國際標準。與 Twofish 和 CAST-256 等其他著名密碼相比,它的密鑰時間表似乎過於簡單。關鍵時間表的前提條件是什麼,Camellia的關鍵時間表有哪些?

這個問答涵蓋了關鍵時間表的要求。

我找不到比這個 rfc更簡單的茶花描述

以下摘錄概述了關鍵時間表。為簡單起見,僅定址 128 位密碼:

128-bit key K:
KL = K;    KR = 0;
...

128 位變數 KA 和 KB 從 KL 和 KR 生成如下。請注意,僅當密鑰長度為 192 或 256 位時才使用 KB。D1 和 D2 是 64 位臨時變數。F 函式在第 2.4 節中描述。

   D1 = (KL ^ KR) >> 64;
  D2 = (KL ^ KR) & MASK64;
  D2 = D2 ^ F(D1, Sigma1);
  D1 = D1 ^ F(D2, Sigma2);
  D1 = D1 ^ (KL >> 64);
  D2 = D2 ^ (KL & MASK64);
  D2 = D2 ^ F(D1, Sigma3);
  D1 = D1 ^ F(D2, Sigma4);
  KA = (D1 << 64) | D2;
  ...

64 位常數 Sigma1、Sigma2、…、Sigma6 用作 F 函式中的“鍵”。這些常數值以十六進製表示,如下所示。

Sigma1 = 0xA09E667F3BCC908B;
Sigma2 = 0xB67AE8584CAA73B2;
Sigma3 = 0xC6EF372FE94F82BE;
Sigma4 = 0x54FF53A5F1D36F1C;
Sigma5 = 0x10E527FADE682D1D;
Sigma6 = 0xB05688C2B3E6C1FD;

通過旋轉 KL、KR、KA 和 KB 並取它們的左半部分或右半部分來生成 64 位子密鑰。

密鑰計劃的第一部分似乎也是一個 Feistel 網路:右半部分通過 XOR 與 F(left half, key) 組合,每個密鑰使用一個常數 (SigmaN)。然後這個過程繼續交替進行,並且應用了一些關鍵的補充。

實際的輪子密鑰是通過上述結果的簡單旋轉生成的。因此,一個子密鑰位的恢復提供了對其他輪子密鑰位的部分了解。

根據本文介紹的分類系統,這似乎被歸類為“1B”型密鑰表。

最強的鍵調度分類是“2B”。有關分類的更多詳細資訊及其確切含義,請參閱此答案頂部連結的論文。

密鑰調度設計的目的是防止基於密鑰的攻擊,例如:

  • 相關密鑰攻擊1由於密鑰計劃的輪換,攻擊是不可能的。最好的最佳相關密鑰差分特徵字節-Camellia 是 8 輪(出 20 個)上的 20 個活動 s- box
  • 滑動攻擊,旋轉攻擊1由於密鑰計劃中的常量(6 sigma) ,它們是不可能的。
  • **美白(前後)3:**美白的目的是加強對蠻力攻擊4

茶花算法使用 $ FL $ 和 $ FL^{-1} $ 防止在差分和線性密碼分析中的輪次之間連接弱子密鑰,如帶/不帶活動盒數量的比較所示 $ FL $ 和 $ FL^{-1} $ . 它還具有互補性。

總的來說,我不覺得Camellia key schedule 太簡單了,。它與其他考慮因素一起完成了這項工作,例如在多個平台上實現

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