山茶花鑰匙時間表
茶花被廣泛使用,現已成為國際標準。與 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 太簡單了,。它與其他考慮因素一起完成了這項工作,例如在多個平台上實現