當前位置:首頁 » 密碼管理 » 三重des加密

三重des加密

發布時間: 2023-02-27 17:49:55

⑴ 【密碼學筆記】第3部分 對稱密碼

跟諸位大牛相比,筆者閱歷尚淺、經驗不足,筆記中若有錯誤,還需繼續修正與增刪。歡迎大家的批評與指正。

查看上一篇請點擊以下鏈接: 【密碼學筆記】第2部分 歷史上的密碼

1. XOR運算

2. 一次性密碼本

3. 對稱密碼演算法

    3.1 DES

    3.2 三重DES

    3.3 AES

    3.4 Rijndael

4. 對稱密碼的選擇

5. 對稱密碼的評價

參考書目

XOR運算,又稱為 異或 運算,運算結果是 同0異1 。

對同一個比特序列進行兩次XOR之後就會回到最初的狀態,因此XOR運算可用於對稱密碼的加密和解密。

一次性密碼本(又稱為 維納密碼 )是一種非常簡單的密碼,它的原理是「 將明文與一串隨機的比特序列進行XOR運算 」。

一次性密碼本是無法破譯的。 這是因為在對它嘗試解密的過程中,所有的排列組合都會出現,既會包含規則字元串,也會包含英文單詞,還會包含亂碼。由於明文中所有可能的排列組合都會出現,因此 我們無法判斷其中哪一個才是正確的明文 。

一次性密碼本是一種非常不實用的密碼。 原因如下:

a. 密鑰的配送 。( 最大的問題 )如果能夠有一種方法將密鑰安全地發送出去,那麼就可以用同樣的方法安全地發送明文。

b. 密鑰的保存 。 密鑰的長度必須和明文的長度相等。 如果能夠有辦法安全保存與明文一樣長的密鑰,那就有辦法安全保存明文本身。

c. 密鑰的重用 。在一次性密碼本中絕對不能重用過去用過的隨機比特序列,因為作為密鑰的比特序列一旦泄露,過去所有的機密通信內容將全部被解密。

d. 密鑰的同步 。在通信過程中,發送者和接收者的密鑰的比特序列不允許有任何錯位,否則錯位的比特後的所有信息都將無法解密。

e. 密鑰的生成 。一次性密碼本需要生成大量的隨機數,這里的隨機數並不是通過計算機程序生成的偽隨機數,而必須是無重現性的真正隨機數。

DES是一種將64比特的明文加密成64比特的密文的對稱密碼演算法,它的密鑰長度是56比特。

DES是以64比特的明文(比特序列)為一個單位來進行加密的,這個64比特的單位稱為 分組 。以分組為單位進行處理的密碼演算法稱為 分組密碼 。

DES每次只能加密64比特的數據,如果要加密的明文比較長,就需要對DES加密進行迭代,而迭代的具體方式就稱為 模式(mode) 。

DES的基本結構又稱為 Feistel網路 ,這一結構不僅被用於DES,在其他很多密碼演算法中也有應用。在Feistel網路中,加密的各個步驟稱為 輪(round) ,整個加密過程就是進行若干次輪的循環。下圖展現的是Feistel網路中一輪的計算流程。DES是一種16輪循環的Feistel網路。

一輪的具體計算步驟 如下:

a. 將輸入的數據等分為左右兩部分;

b. 將輸入的右側直接發送到輸出的右側;

c. 將輸入的右側發送到輪函數;

d. 輪函數根據右側數據和子密鑰,計算出一串看上去是隨機的比特序列;

e. 將上一步得到的比特序列與左側數據進行XOR運算,並將結果作為加密後的左側。

我們需要用不同的子密鑰對一輪的處理重復若干次,並在每兩輪處理之間將左側和右側的數據對調。

Feistel網路的解密操作只要按照相反的順序來使用子密鑰就可以完成了。

Feistel網路的性質 :

a. 輪數可以任意增加;

b. 加密時無論使用任何函數作為輪函數都可以正確解密(即使該函數不存在反函數);

c. 加密和解密可以用完全相同的結構來實現。

綜上所述,無論是任何輪數、任何輪函數,Feistel網路都可以 用相同的結構實現加密和解密 ,且加密的結果必定能夠正確解密。

三重DES是為了增加DES的強度,將DES重復3次所得到的一種密碼演算法,也稱為 TDEA ,通常縮寫為 3DES 。

明文經過三次DES處理才能變成最後的密文,由於DES密鑰的長度實質上是56比特,因此三重DES的密鑰長度就是168比特。

三重DES並不是進行三次DES加密,而是 加密→解密→加密 的過程,目的是 讓三重DES能夠兼容普通的DES ,當所有密鑰都相同時,三重DES也就等同於普通的DES。

盡管三重DES目前還被銀行等機構使用,但其處理速度不高,除了特別重視向下兼容性的情況以外,很少被用於新的用途。

AES是取代其前任標准(DES)而成為新標準的一種對稱密碼演算法。全世界的企業和密碼學家提交了多個對稱密碼演算法作為AES的候選,最終選出了一種名為 Rijndael 的對稱密碼演算法,並將其確定為AES。

AES的選拔並不僅僅考慮一種演算法是否存在弱點,演算法的速度、實現的容易性等也都在考慮范圍內。此外,這種演算法還必須能夠在各種平台上有效工作。

Rijndael是由比利時密碼學家設計的 分組密碼演算法 ,被選為新一代的標准密碼演算法——AES。

和DES一樣,Rijndael演算法也是由多個 輪 構成的,其中每一輪分為 SubBytes 、 ShiftRows 、 MixColumns 和 AddRoundKey 共4個步驟。DES使用Feistel網路作為其基本結構,而Rijndael使用的是 SPN結構 。

加密過程 :

a. 首先,需要 逐個位元組 地對16位元組的輸入數據進行SubBytes處理,即以每個位元組的值(0~255)為索引,從一張擁有256個值的 替換表 (S-Box)中查找出對應值( 類似於簡單替換密碼 )。

b. 進行ShiftRows處理,即以4位元組為單位的 行(row) 按照一定的規則向左平移,且每一行平移的位元組數是不同的。

c. 進行MixColumns處理,即對一個4位元組的值進行比特運算,將其變為另外一個4位元組值。

d. 最後,將MixColumns的輸出與輪密鑰進行 XOR ,即進行AddRoundKey處理。至此,Rijndael的一輪就結束了。實際上,在Rijndael中需要重復進行10~14輪計算。

在SPN結構中, 輸入的所有比特在一輪中都會被加密 。和每一輪都只加密一半輸入的比特的Feistel網路相比,這種方式的優勢在於 加密所需要的輪數更少 。此外,這種方式還有一個優勢,即 SubBytes、ShiftRows和MixColumns可以分別以位元組、行和列為單位進行並行計算 。

在Rijndael的 加密 過程中,每一輪所進行的處理為:

SubBytes→ShiftRows→MixColumns→AddRoundKey

而在 解密 時,則是按照相反的順序來進行的,即:

AddRoundKey→InvMixColumns→InvShiftRows→InvSubBytes

解密過程 :

Rijndael演算法背後有著 嚴謹的數學結構 ,即從明文到密文的計算過程可以全部用公式來表達,這是以前任何密碼演算法都不具備的性質。如果Rijndael的公式能夠通過數學運算來求解,那也就意味著Rijndael能夠通過數學方法進行破譯,這也為新的攻擊方式的產生提供了可能。

(1) 因為現在用暴力破解法已經能夠在現實的時間內完成對DES的破譯, DES不應再用於任何新的用途 。但是也需要保持與舊版本軟體的兼容性。

(2) 盡管在一些重視兼容性的環境中會使用三重DES,但 我們也沒有理由將三重DES用於新的用途 ,它會逐漸被AES所取代。

(3) 現在應該使用的演算法是AES(Rijndael) ,因為它安全、快速,而且能夠在各種平台上工作。

(4) AES最終候選演算法應該可以作為AES的備份 ,因為這些密碼演算法也都經過了嚴格的測試,且沒有發現任何弱點。

(5) 一般來說, 我們不應該使用任何自製的密碼演算法 ,而是應該使用AES。

優點 :

使用一種密鑰空間巨大,且在演算法上沒有弱點的對稱密碼,就可以通過密文來確保明文的機密性。 巨大的密鑰空間能夠抵禦暴力破解,演算法上沒有弱點可以抵禦其他類型的攻擊。

不足 :

a. 用對稱密碼進行通信時,還會出現 密鑰的配送問題 ,即如何將密鑰安全地發送給接受者。為了解決密鑰配送問題,需要 公鑰密碼技術 。

b. 盡管使用對稱密碼可以確保機密性,但僅憑這一點還並不能完全放心。 例如發送者可能發送偽造的密文,並利用解密時返回的錯誤來盜取信息。

衷心感謝您的閱讀。

查看下一篇請點擊以下鏈接: 【密碼學筆記】第4部分 分組密碼的模式

⑵ 什麼是三重加密

傳統上使用的單重des加密技術,由於其密鑰長度為56位,無法確保信息安全性。也正是由於des的脆弱性,絕大部分銀行和金融服務公司開始尋求新的加密技術。對已使用des演算法軟體和硬體的公司,盡管還有使用des的其他選擇,但到目前為止,三重des加密技術是最實用的解決方案。

三重des加密技術是des的新版本,在des基礎上進行了很大的改進,用兩種不同的密鑰,三次使用des加密演算法,使得新的des密鑰更加安全可靠。密鑰的第一個56位數據位組首先加密,然後用密鑰的第二個56位數據位組加密,使密鑰的復雜度和長度增加一倍,最後再對第一個56位數據塊加密,再一次增加了密鑰的復雜性,但沒有增加密鑰長度。這樣形成的密鑰利用窮舉搜索法很難破解,因為它只允許2112次的一次性嘗試,而不是標准des的2256次。三重des加密技術基本克服了des密鑰長度不足的最大缺陷,成功地使des密鑰長度加倍,達到了112位的軍用級標准,沒有任何攻擊方式能破解三重des加密技術,這樣它提供了足夠的安全性

⑶ OpenSSL之3DES用法

3DES(或稱為Triple DES)是三重數據加密演算法(TDEA,Triple Data Encryption Algorithm)塊密碼的通稱。它相當於是對每個數據塊應用三次DES加密演算法。由於計算機運算能力的增強,原版DES密碼的密鑰長度變得容易被暴力破解;3DES即是設計用來提供一種相對簡單的方法,即通過增加DES的密鑰長度來避免類似的攻擊,而不是設計一種全新的塊密碼演算法。

其具體實現如下:設Ek()和Dk()代表DES演算法的加密和解密過程,K代表DES演算法使用的密鑰,P代表明文,C代表密文,這樣:
3DES加密過程為:C=Ek3(Dk2(Ek1(P)))
3DES解密過程為:P=Dk1(EK2(Dk3(C)))

本文假設你已經安裝好了OpenSSL,並且持有一份1.1.1的源碼
3DES相關的頭文件在des.h中、源文件在crypto/des目錄中。

# define DES_ENCRYPT 1
# define DES_DECRYPT 0
這里定義了加密和解密的類型。

typedef unsigned int DES_LONG;

這個結構定義了DES的密鑰上下文。相關欄位含義:
ks —— 16輪子密鑰。

在1.1.1中,大多數的數據結構已經不再向使用者開放,從封裝的角度來看,這是更合理的。如果你在頭文件中找不到結構定義,不妨去源碼中搜一搜。

void DES_ecb3_encrypt(const_DES_cblock *input, DES_cblock *output,
DES_key_schele *ks1, DES_key_schele *ks2,
DES_key_schele *ks3, int enc);
使用電子密碼本方式加解密一個分組。
ks1、ks2、ks3分別為傳入的三個64位密鑰。
其內部實現為:

可以看到內部使用了DES_encrypt3()這個內部分組加密函數,並且傳入了3個密鑰。

我們繼續來看DES_encrypt3()是如何利用這3個密鑰的。
void DES_encrypt3(DES_LONG *data, DES_key_schele *ks1,
DES_key_schele *ks2, DES_key_schele *ks3)
其內部實現為:

可以看到內部又繼續使用了DES_encrypt2()這個分組加密函數。沒有必要再繼續解開DES_encrypt2()了,因為它主要根據密鑰做分組的加解密處理。

關於三個密鑰的利用關系,在DES_encrypt3()中主要是做三次疊加運算:
使用第一個密鑰做分組加密運算。
使用第二個密鑰做分組解密運算。
使用第三個密鑰做分組加密運算。

3DES的疊加運算,根據密鑰的組合關系,經常又表現為以下模式:

void DES_ede3_cbc_encrypt(const unsigned char *input, unsigned char *output,
long length,
DES_key_schele *ks1, DES_key_schele *ks2,
DES_key_schele *ks3, DES_cblock *ivec, int enc);
使用密文分組鏈加解密。
參數ivec為初使化向量,在本函數返回時會被更新,可用於下一次分組運算。
註:
從源碼實現來看,雖然DES_ede3_cbc_encrypt()自身支持明文長度多於一個分組的計算,但是卻沒有處理填充,所以從統一封裝來看,建議開發者在使用這個函數時,同DES_ecb_encrypt()的用法一樣,傳入單個分組。

下面這個例子演示了使用普通DES加密,3DES的DES的兼容模式解密(即3個密鑰完全相同)。

輸出:
f8a8707fea7d45cd
3132333435363738

⑷ 三重DES加密的密鑰為什麼是24個位元組

DES使用56位密鑰對64位的數據塊進行加密,並對64位的數據塊進行16輪編碼。與每輪編碼時,一個48位的「每輪」密鑰值由56位的完整密鑰得出來。DES用軟體進行解碼需要用很長時間,而用硬體解碼速度非常快,但幸運的是當時大多數黑客並沒有足夠的設備製造出這種硬體設備。在1977年,人們估計要耗資兩千萬美元才能建成一個專門計算機用於DES的解密,而且需要12個小時的破解才能得到結果。所以,當時DES被認為是一種十分強壯的加密方法。 但是,當今的計算機速度越來越快了,製造一台這樣特殊的機器的花費已經降到了十萬美元左右,所以用它來保護十億美元的銀行間線纜時,就會仔細考慮了。另一個方面,如果只用它來保護一台伺服器,那麼DES確實是一種好的法,因為黑客絕不會僅僅為入侵一個伺服器而花那麼多的錢破解DES密文。由於現在已經能用二十萬美圓製造一台破譯DES的特殊的計算機,所以現在再對要求「強壯」加密的場合已經不再適用了。 三重DES 因為確定一種新的加密法是否真的安全是極為困難的,而且DES的唯一密碼學缺點,就是密鑰長度相對比較短,所以人們並沒有放棄使用DES,而是想出了一個解決其長度問題的方法,即採用三重DES。這種方法用兩個密鑰對明文進行三次加密,假設兩個密鑰是K1和K2,其演算法的步驟如圖5.9所示: 1.用密鑰K1進行DEA加密。 2.用K2對步驟1的結果進行DES解密。 3.用步驟2的結果使用密鑰K1進行DES加密。這種方法的缺點,是要花費原來三倍時間,從另一方面來看,三重DES的112位密鑰長度是很「強壯」的加密方式了

⑸ 數據加密方式有哪些

對稱加密:三重DES、AES、SM4等
非對稱加密:RSA、SM2等
其他的保護數據隱私的方法還有同態加密、差分隱私、安全多方計算等
目前我們公司一直和上海安策信息合作的,安策信息研發了好幾種數據加密工具,包括加密狗、加密機、動態口令、加密工具等網路也有很多相關資料。

熱點內容
cf北京伺服器ip 發布:2025-08-21 16:51:13 瀏覽:725
資料庫欄位值為空的數據 發布:2025-08-21 16:45:14 瀏覽:572
php項目視頻 發布:2025-08-21 16:34:33 瀏覽:194
叉叉腳本激活碼 發布:2025-08-21 16:34:32 瀏覽:250
清理ie緩存快捷鍵 發布:2025-08-21 16:07:30 瀏覽:443
演算法規避 發布:2025-08-21 15:56:48 瀏覽:895
ip伺服器是機器嗎 發布:2025-08-21 15:40:34 瀏覽:770
wpf讀資料庫存儲的時間 發布:2025-08-21 15:30:59 瀏覽:441
存儲過程是先編譯好的嗎 發布:2025-08-21 15:25:07 瀏覽:889
java高並發編程詳解 發布:2025-08-21 15:11:27 瀏覽:550