Feistel 密碼與替換置換網路 - 輪數
所以最近幾天我一直在比較 Feistel 密碼和替換置換網路。現在我可以說我對它們以及它們的異同了解很多,但我還想知道一件事,但我在任何地方都找不到。
問題是我不知道這些結構有多少輪。我的意思是簡單的哪個結構有更多的回合,為什麼?
經過大量搜尋後,我有一種感覺(沒有找到任何確鑿的證據)我們可以在設計基於其中一種結構的對稱算法時自定義輪數,如果這是真的,那麼我想知道哪種結構基於算法通常有更多輪次(或者需要多少輪次才能被認為是安全的)?
雖然我可以確認您的“感覺”確實是正確的,但您的其餘問題並不那麼容易回答。儘管如此,我還是會嘗試為您提供一些見解。
一般來說…
輪數取決於各個密碼的設計和安全參數。*這使得以“結構”*的形式概括事物變得相當不可能 $ A $ 應該使用 $ x $ 回合和結構 $ B $ 應該使用 $ y $ 回合”。雖然密碼算法可能共享相似的結構,但它們的內部結構不同……它們各自的整數也是如此。
然而,我們可以說的是,更少的輪數往往會使密碼更不安全,而更多的輪數往往會使密碼更安全。這聽起來可能很完美,但您必須記住,您不能簡單地採用隨機密碼並希望通過對其進行足夠多的輪次來使其*“牢不可破”*。
增加回合數並不能挽救局面……
您可能聽說過密碼分析,當您攻擊該密碼的“減少輪數”時,人們會證明某些算法是可以破解的。這實際上意味著他們採用了一種密碼算法,將輪數減少到推薦的最小值以下,並試圖成功地對密碼的減少輪數版本進行攻擊,以了解潛在的弱點。減少輪次版本中的潛在弱點可能會擴展到密碼的完整輪次版本(它使用最初定義和/或商定的輪數)。
在最壞的情況下,有人發現對減少輪數密碼的成功攻擊,並成功地將攻擊擴展到任意輪數。從那一刻起,所涉及的密碼就失去了所有希望,因為這將是一個“徹底的突破”……並且增加輪數也無濟於事。
但只要我們不是在談論這種最壞的情況,增加輪數就可以幫助增加(或重新獲得)其他情況下的安全邊際。
“理想”的回合數……
最後,密碼學是關於安全邊際的。在設計階段,密碼算法設計者將盡可能準確地指出他/她的密碼提供的預期安全性,因為他/她可以和/或可以證明。(假設您已經看過一些參考論文,您就會知道密碼設計者在描述他們個人密碼設計的參考論文中發布了這樣的證明。)簡單地說:在創建密碼算法時,設計者試圖確定最小值他的密碼需要能夠滿足密碼的安全參數,以及推薦的輪數。
大多數時候,沒有定義最大輪數。這樣做的原因很簡單:密碼設計者已經提供了推薦的輪數以及(如果可能的話)相關的安全證明。推薦的輪數代表(我們稱之為)與密碼安全性相關的“理想”輪數。
增加超過該級別的輪數可能會提高安全性,但從某個級別開始,您將只能檢測到最小的安全增益,同時 - 同時 - 您會注意到您浪費了太多的系統資源和寶貴的時間……這並沒有真正的意義,因為與時間和資源的投資相比,收益是可以丟棄的。(想一想:沒有人願意等待半個小時來加密某些東西,只是因為您選擇將原始輪數從 10 增加到 1.000.0000.000。此外,如果密碼不會更安全一百萬倍,如果你做吧。)
tl;博士
對於“哪種密碼結構”需要“多少輪數”才能保證安全這一問題沒有完美的答案,因為這取決於各個密碼算法。雖然密碼結構可能相似,但安全邊際往往不同。Simpler 說:具有相同結構的兩個密碼可能需要完全不同的輪數才能使兩者都提供可比的安全性。
但是,我們可以說的是:
您可以通過添加足夠的輪數來使幾乎任何密碼都更加安全……假設它沒有完全損壞。此外,您可以通過減少足夠的輪數來使幾乎所有密碼都不安全。(1)
(1)永遠不要減少輪次,除非你能真正證明**你的減少輪次版本仍能提供預期的安全餘量。沒有這樣的證據,你就走在非常薄的冰上。