Aes
增加 SPN 和 Feistel 密碼的輪數
閱讀Schneiers 部落格上的一篇文章(以及 2011 年)關於將 AES 的輪數從“ 16 輪 AES-128、20 輪 AES-192 和 28 輪 AES-256 ”的輪數增加以提高安全性。但是,我確實想知道這些數字是從哪裡來的。根據 Schneier的說法,“嘿,我腦子裡一片空白,當然不是關於這個話題的最後一句話”,而 stackexchange 上的一個先前的話題“更多的輪次意味著對密碼分析的安全性更高,簡單地說,因為有更多的混亂和擴散” .
我的問題是:
- 對於像 AES、Serpent 或 Twofish 這樣的 SPN 和 Feistel 密碼,任何高輪數都可以嗎?或者在一定的 X 輪之後,密碼會/可能會變弱嗎?或者甚至可能重複一些模式?
- 如果輪數增加,AES、Serpent 或 Twofish 可以提高多少安全性?例如,如果輪數被荒謬地增加,AES 會變得如此強大嗎?
*通常,*只要子密鑰彼此獨立,更多的輪次就會增加安全性。這是一個關鍵點。
考慮目前定義的 AES-128,有十輪;那是 11 個 128 位子鍵。添加六輪意味著添加六個額外的 128 位子密鑰。原始的AES-128 仍然存在。如果六個額外的子密鑰是獨立於前十一個子密鑰生成的,那麼它們不會降低安全性。因此,安全性只會增加。但是,有一些重要的警告:
- 在實踐中,子鍵不是相互獨立的。它們是使用一個相當簡單的過程(密鑰調度)從加密密鑰生成的,並且不能被認為是一個相當安全的PRNG。眾所周知,當將 AES 密鑰計劃推到其預期使用場景之外時(例如,它具有非致命的相關密鑰攻擊),分析起來有些弱。
- 如果額外的回合不會降低安全性,則不能保證它們會增加安全性。就個人而言,我傾向於拒絕考慮一種算法比另一種更強,只要兩者都在“不能破壞它”區域。這種比較依賴於對技術在遙遠的未來將如何發展的預言性假設,有時甚至非常荒謬(在仍然使用假設的經典電腦的情況下將 230 位密鑰與 260 位密鑰進行比較是沒有意義的,因為它需要吃滿星來驅動它)。
增加輪次更多是為了建立信任。那仍然是科學,但不是電腦科學;而是心理學。增加回合數給人一種“我們正在做一些對抗攻擊的事情”的感覺。這就像在去遊輪之前向蘇美爾海洋女神娜姆獻祭一樣;至少,它不會有害——除了波塞冬對你對競爭的忠誠感到不悅的機會之外……在 AES 的情況下,增加輪數會降低性能,儘管這在大多數情況下(AES 加密速度很少成為瓶頸;例如,Microsoft 測量應用基於 AES 的透明數據加密在 SQL Server 上意味著平均 CPU 成本為 3% 到 5%,僅此而已)。