如何計算對稱算法中的雪崩效應?
我正在使用 javax.crypo 和 Bouncy Castle 庫在 Java 中使用對稱算法,我需要計算不同對稱算法(如 DES、3DES、Blowfish 和 AES)的雪崩效應。
我已經閱讀了雪崩效應,這意味著當輸入文本發生輕微變化(例如,翻轉一個位)時,輸出會發生顯著變化。為了計算這一點,我通過創建一個新文本來更改原始文本中的第一個單詞並隨後加密兩個文本來進行一些測試。在此之後,我比較了原始文本和新文本之間發生變化的位。
對於這個測試,我在 CBC 操作模式和 PKCS5PADDING 中使用了四種算法。據我所知,密文之間的變化一定要高,雖然變化的詞只在文本的第一個塊中,因為CBC模式下的輸入是前一個塊生成的密文,所以所有塊都用於生成最終文本。所以,我認為變化一定是相當大的。
我讀到 50% 的變化是一個令人滿意的值,因為這意味著輸入中的一個單詞或單個位的變化以 50% 的機率改變了輸出,而且它很強。問題是四種算法在我的測試中的結果大約是 50%,我認為這是不正確的,因為差異會更大,我認為與 S-box 一起作為加密替代的 AES 必須具有更多的變化。我一直在搜尋這些算法的雪崩效應結果值的估計值,以與我的結果進行對比,但我沒有找到估計值。所以,我不知道我是否正確計算了雪崩效應。
我計算了結果密文中的雪崩效應,而不是加密過程中的每一輪。
我一直在尋找資訊,我發現很少有關於這個主題的文章顯示:使用的密碼、原始密文以及上面已經進行了一次更改的加密文本。比較是在兩個密文之間按位進行的,所以我理解,而不是在加密過程的回合中的密文中。不是這樣嗎?其中一些文章是:連結和連結
我是否在對稱算法中正確計算雪崩效應?
算法中是否有關於這種效果的一些估計值?
您似乎認為 AES 應該比 DES 得分更高,因為 AES 比 DES 更強。
問題是您的測試非常粗糙。任何體面的分組密碼都將通過測試。
如果我打個比方,就好像你設計了一個汽車測試,唯一的檢查是“有引擎嗎?”。你在Yugo上執行測試,它通過了,你在高端保時捷上執行你的測試,它通過了;你問,保時捷比 Yugo 好得多;為什麼沒有得分更好?
至於AES和DES之間的區別,重要的是:
- AES 的密鑰比 DES 大得多。DES 密鑰足夠小,可以(並且已經)被具有合理數量資源的對手暴力破解(即單獨檢查每個密鑰);AES 密鑰空間大得多,即使使用 128 位的“小”設置,這樣做也是不可行的。
- AES 塊大小大於 DES;使用 DES(和 CBC 模式),您將在加密幾千兆字節後開始洩漏明文內容;AES 也會發生同樣的情況,但只有在真正大量的數據被加密之後(例如,一周內在整個網際網路上傳輸的數據量)
- 還有一些已知的方法可以將線性密碼分析應用於 DES;但是(再次)只有在大量數據被加密之後。
您的測試不會發現任何這些差異,因此(就您的測試而言),DES 和 AES 看起來同樣出色。