現實中對稱密碼如何使用
㈠ 【密碼學筆記】第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),另一個對稱密鑰加密系統櫻塵是國際數據加密演算法(IDEA),它比DES 的加密性好,而且對計算機功能要求也戚族沒有那麼高。IDEA加密標准由PGP(Pretty Good Privacy)系統使用。

對稱密鑰的管理和分發工作
對稱密鑰的管理和分發工作是一件具有潛在危險的和煩瑣的過程。對稱加密是基於共同保守秘密來實現的,採用對稱加密技術的貿易雙方必須保證採用的是相同的密鑰,保證彼此密鑰的交換是安全可靠的,同脊仔禪時還要設定防止密鑰泄密和更改密鑰的程序
㈢ 非對稱加密和對稱加密的區別
非對稱加密和對稱加密在加密和解密過程、加密解密速度、傳輸的安全性上都有所不同,具體介紹如下:
1、加密和解密過程不同
對稱加密過程和解密過程使用的同一個密鑰,加密過程相當於用原文+密鑰可以傳輸出密文,同時解密過程用密文-密鑰可以推導出原文。但非對稱加密採用了兩個密鑰,一般使用公鑰進行加密,使用私鑰進行解密。
2、加密解密速度不同
對稱加密解密的速度比較快,適合數據比較長時的使用。非對稱加密和解密花費的時間長、速度相對較慢,只適合對少量數據的使用。

3、傳輸的安全性不同
對稱加密的過程中無法確保密鑰被安全傳遞,密文在傳輸過程中是可能被第三方截獲的,如果密碼本也被第三方截獲,則傳輸的密碼信息將被第三方破獲,安全性相對較低。
非對稱加密演算法中私鑰是基於不同的演算法生成不同的隨機數,私鑰通過一定的加密演算法推導出公鑰,但私鑰到公鑰的推導過程是單向的,也就是說公鑰無法反推導出私鑰。所以安全性較高。
