微信公眾號:龍躍十二
持續更新,歡迎關注!
複製程式碼
用心分享,共同成長
沒有什麼比你每天進步一點點更實在了
本文已經收錄至我的GitHub,歡迎大家踴躍star?。 GitHub
最近疫情慢慢的得到了緩解,各企業開始復工復產,小馮童學也不能懈怠,馬不停蹄地給大家輸出,夥計們,抓緊學起來?。
在公眾號剛做起來的時候,小馮就最先講了DES演算法,DES其實對於每一個剛接觸密碼學的人來說,都是第一道正兒八經的難題,不過經過之前的嗶哩吧啦,不少小夥伴肯定已經明明白白了,如果你還有不明白的問題,請暴擊聊聊密碼學中的DES演算法這裡!
今天,主要和大家聊聊DES 演算法的安全性,還有關於二重、三重DES演算法的精妙之處。
DES的安全性分析:
對於DES來說,它加密的明文資料僅有64bit,而且在這64bit的資料中,還有8位要用於奇偶校驗,這樣以來,大大削減了DES的加密安全性,因為其有效金鑰只有56位,對於小資料的資訊加密還具有一定的保密性,但是我們日常對於一些資料量較大的資訊加密時,由於各次迭代中使用的金鑰K是遞推產生的,這種相關性必然降低了密碼體制的安全性。
因此,很多密碼學的專家就在質疑56位金鑰在加密時是否具有足夠的安全性,其實我們想想,56bit的金鑰必然是不夠的。
在眾多DES演算法的破解中,最為行之有效的就是窮舉搜尋法,那麼56位長的金鑰總共要測試256次,如果每100毫秒可以測試1次,那麼需要7. 2X 1015秒,大約是228493000年(兩千多萬年)。
但是,也有人認為,如果時間允許,用窮舉搜尋法尋找正確金鑰已趨於可行,所以也有人建議說如果要保護10年以上的資料,那你就別用DES。
最近幾年以來,差分法和線性攻擊法也被用來破解DES演算法。從理論上來說,利用這兩種方法破譯,無論是從效能還是從效率上來說,都要高於窮舉搜尋法,但是,對於後者的這兩種方法,我們需要有超高的計算機水平來提供技術上的支援,基於以上方法的侷限性,截至目前為止,在密碼學界,我們還沒有任何可以破譯DES密碼體制的系統分析法。
其實我們如果使用窮舉搜尋法,不僅耗時耗材耗力,也大大拉長了破解的週期,針對於目前的計算技術以及DES加密技術的分析來看,採用16輪迭代的DES加密技術,在一定程度上仍然是可以保證安全的,但是對於16輪以下的DES加密技術,我們應該謹慎使用。
儘管如此,我們仍然需要不斷的對DES演算法進行進一步的改進,主要的改進方案就是通過增加金鑰長度,來確保加密演算法的安全性、保密性。
多重DES演算法:
在密碼學界,能夠研究出來一種新的加密標準並且可以超過目前使用廣泛的加密演算法,是實實在在、真真切切不容易,也是密碼學界的響噹噹的頭等大事。在DES完成自己十年的任命期後,由於新的演算法未被提出,DES不得不臨危受命,繼續肩負重任,在接下來的十年裡,依然活躍在國際保密通訊的舞臺上。直至多重DES的出現,打破了這個僵局。
二重DES演算法:
為了增加金鑰長度,我們可以採用多重的DES演算法,最常用的就是二重DES。二重 DES 是多重使用 DES 時最簡單的形式,其具體的加密解密操作如下圖。
圖中,明文資訊為 P,兩個加密金鑰為 K1 和 K2。
加密後,密文為: C = EK2 [ EK1(P)]
解密後,明文為: P = DK1 [DK2 (C)] {注:解密時,以相反順序使用兩個金鑰}
從上邊我們可以看到,在利用二重 DES時,我們就可以巧妙的將原有的56bit的金鑰變成112bit,極大的增加了加密時的安全性。
但是,放過來我們可以想到,假設對任意兩個金鑰 K1 和 K2,如果存在另一金鑰 K3,使得 EK2 [ EK1(P)]= EK3 [ P] (也就是說,在單重的DES中存在一個金鑰,與二重DES合起來加密時等價的),那麼,二重 DES 以及多重 DES 都沒有意義, 因為它們與 56 位元金鑰的單重 DES 等價,但是後來經過證實,我們這種假設對於 DES演算法並不能夠成立。
中間相遇攻擊:
一種對所有分組密碼均有效的攻擊方法。
首先,以二重DES為例。
加密:C = EK2 [ EK1(P)]
解密:P = DK1 [DK2 (C)]
首先設定一箇中間值X,有 :X = EK1(P)= DK2 (C)
在已知給定的訊息對(P,C),首先,將明文P按所有可能的金鑰 K1 加密,得到的256個結果,按X的值將所有結果排序放在一個表內,然後用所有可能的金鑰K2對密文C解密,每解密一次,將解密結果與表中的數值進行對比,如果相等,就將剛才測試的兩個金鑰對一個新的明密文對進行驗證,若驗證成功,則認定這兩個金鑰對是正確的金鑰。
結論:中間相遇攻擊使用兩組已知明密文對就可以猜出正確的金鑰。
三重DES演算法:
兩個金鑰的三重DES演算法:
抵抗中途相遇攻擊的一種方法是使用 3 個不同的金鑰做 3 次加密,從而可使已知明文攻擊的代價增加到 2112。然而, 這樣又會使金鑰長度增加到 56×3 = 168 bit,就會使金鑰過於複雜,造成加密資訊的冗餘。
所以我們就想出,能不能利用兩個不同的金鑰進行3次加密,一種實用的方法是僅使用兩個金鑰做 3 次加密,實現方式為加密 -解密-加密,即: C =EK1 [DK2 [ EK1(P)]] ,第 2 步解密的目的僅在於使得使用者可對一重 DES 加密的資料解密。
此方案已在金鑰管理標準 ANS X .917 和 ISO 8732 中被採用。
三個金鑰的三重DES演算法:
三個金鑰的三重 DES 金鑰長度為 168 bit,加密方式為C =EK3 [DK2 [ EK1(P)]] 。
關於DES演算法呢,以後小馮就不多bb了,如果你還有不懂,可以關注小馮和龍叔的公眾號【龍躍十二】,點選聯絡作者,第一時間為你解答呦!
更多密碼學精彩文章:
更多精彩內容,歡迎關注公眾號:龍躍十二,持續更新,歡迎關注。