- 電子密碼本模式和加密分組鏈接模式的分組算法都要求加密輸入的分組是固定長度 的,但是大多數輸入明文可能都不是分組長度的整數倍,也就是說,最后一個分組一般來 說是不足一個分組長度的。為了使分組加密算法能夠正常工作,通常使用填充技術對最后 一個分組進行填充以使該分組正好為一個分組的固定長度。
- 不足的部分填充0或者1
- OpenSSL中使用的填充方法。使用該分組不夠的字節的數作為值填充各個要填充的字節,這 樣,在解密恢復的時候,檢查最后一個字節的值就知道要刪除的填充字節的數目。但是為 了使這種方法能正確工作,即便最后一個分組是完整的,也要增加一個分組作為填充。
- 例 如分組長度位是8字節 (64位),最后一個分組長度為5個字節,那么需要填充的字節是3,那么就使用數值3填充最后的3個字節。
- ?分組長度也是8字節 (64位),但是最后一個分組長度是完整的填充示意圖,填充的字節 長度就是8個字節,數值為8
- 上述方法有一個缺點,就是經過填充后,密文長度跟明文長度不一樣,這在很多應用 中是非常不方便的。為此提出了一種稱為密文挪用的分組填充辦法?
?
序列加密模式?
- 分組加密模式每次對一組數據進行加密處理,而序列加密模式則不同,它每次對一位明文進行簡單運算 (一般是異或運算)從而得到密文
- 一個序列加密模式結構一般由密鑰序列發生器、運算單元(進行上述的簡單的運算,比如進行異或運算)、明文輸入和密文輸出組成
- 假設密鑰序列發生器的輸出位序列為K 1,K2 ,K3 ......,明文輸入為P 1,P2,P3......,密文輸出用C1、C2、C3......表示,序列加密模式可以使用公式如下
- ?序列加密模式的安全性完全依賴密鑰序列的安全性,也就是說,依賴密鑰序列發生器 的安全性。假如密鑰序列輸出總是為0,那么相當于沒有加密,該加密系統就沒有任何存在的意義,如果密鑰序列是完全隨機不重復的,那么該加密系統的安全性相當于一次一亂 密碼本方式,幾乎是不可破譯的。當然,實際上很難構造出輸出完全隨機的密鑰序列發生器。
- 密鑰序列發生器的輸出雖然應該看起來是隨機的,但必須是確定的,也就是說應該是可以控制的,否則如果加密跟解密的輸出密鑰序列不一樣,就不可能進行正確的數據 解密。
- 密鑰序列發生器的輸出不能每次都相同,否則就非常容易破密,沒有任何安全性。在 一個密鑰序列發生器每次輸出都是一樣的情況下,攻擊者如果有機會獲得一份明文跟密文對應的數據,他就可以恢復出密鑰,從而可以用該密鑰來讀取任何使用該序列加密算法加 密的數據,不僅僅是以后的數據,也可以包括以前有辦法截取到的數據。所以,為了使密鑰序列發生器每次輸出不一樣,我們需要設置其狀態,使得其開始輸出的狀態都不同,這個初始化的向量就是密鑰。這樣就增加了攻擊者攻擊的難度,如果他有辦法獲得一個密鑰,只要更換密鑰,他就只好獲得新的密鑰,但是很可能也是徒勞。
- 一個密鑰序列發生器理論上可以抽象為三部分:內部狀態、狀態轉移函數及輸出函數,如圖所示。內部狀態描述了密鑰序列發生器當前的內部狀態,對于一個同樣結構的密鑰序列發生器,相同的內部狀態應該輸出相同的密鑰序列,否則就不可能進行正確的 加密和解密。狀態轉移函數描述了從當前狀態轉移到下一個狀態的規則,從而產生一個新的狀態。輸出函數對內部狀態進行計算等處理,從而輸出密鑰序列。在實際應用中,這些組件的劃分有時候并非那么明確。對于密鑰序列發生器來說,密鑰可以看作是對其內部狀 態進行初始化或重置的向量。
?自同步序列加密模式
- 自同步序列加密模式又稱為密文自動密鑰,它的主要思想是密鑰序列跟以前一定數量 的密文位相關,即密鑰序列是以前一定數量密文位的函數。如圖所示是自同步序列加密模 式的加密和解密框架圖。
- 如圖所示的自同步序列加密模式中,內部狀態就是由以前密文的n 位組成,而 內部狀態中的n位密文作為輸出函數的輸入,所以,輸出的密鑰序列的復雜性和安全性完全依賴于輸出函數。輸出函數通常可以有各種各樣的形式,比如可以使用分組加密算法或 單向散列函數算法為主體構成。因為在自同步序列加密模式中,解密端的內部狀態在從開 始到收到n位密文之后,自動跟密文序列進行同步的解密,所以稱為自同步序列加密模式。
- 在自同步序列加密模式中,不需要進行人工的同步,一般來說,可以在開始的n 位 (假設內部狀態是n位密文的函數)之前,可以隨便傳送一些信息,這些解密一般是不正確的,在收到n位密文之后,就開始實現同步,能夠進行信息的正確解密了。這種能夠自動進行解密密鑰同步的功能在某些應用中是很有用的。
- 自同步序列加密模式事實上跟分組加密模式中的加密反饋模式很相似,同樣存在錯誤擴散問題。也就是說,如果有一位密文發生了錯誤,那么隨后的n位密文的解密都不能正確進行。
- 在密鑰沒有更換的情況下,自同步序列加密模式很容易受到回放攻擊,攻擊者可以將 記錄下的密文重新發送給接收者,因為解密器能夠自動進行同步,所以接收端會重復接收到正確的解密信息。這在一些電子交易應用中可能給攻擊者帶來巨大的利益。
自同步加密模式的特點
- ?內部狀態是前面n位固定長度密文的函數。
- 算法的安全性依賴于輸出函數的復雜性和安全性。
- 會產生密文錯誤擴散,密文中一位發生錯誤,會導致其后n位密文不能正確解密。
- 解密的時候具有密鑰序列和密文自動同步的功能,具有同步錯誤自恢復功能。
- 明文長度和密文長度相同。
- 容易受到回放攻擊。
?同步序列加密模式
-
同步序列加密模式又稱為密鑰自動密鑰加密,它的特點是密鑰序列的產生跟處理的消息是不相關,相互獨立的。如圖所示是同步序列加密模式的加密和解密流程。
- 在加密端,密鑰序列發生器在使用密鑰進行初始化后開始產生密鑰序列,在解密端, 密鑰序列發生器使用同樣的密鑰進行狀態初始化從而產生同樣的密鑰序列,這樣就能夠開 始進行正確的加密和解密。一般來說,加密端和解密端的同步都是通過相同的密鑰進行狀 態初始化設置實現的。由于在加密和解密端必須產生相同的密鑰,所以事實上同步序列加 密模式的密鑰發生器產生的密鑰必須是確定的,必須保證這些輸出密鑰序列在相當長的一 個范圍內不能重復,否則安全性將得不到保證。當然,最好是不重復,但這基本上是不可 能做到的。
- 如果在解密過程中同步狀態被破壞了,比如增加或刪除了一個密文位或者密鑰序列發生器跳過了一個周期,那么必須重新進行同步,否則數據不可能進行正確的解密。所以同步序列加密模式對同步錯誤是沒有辦法恢復的。
- 同步序列加密模式不會產生密文錯誤擴散,如果一個密文位發生了錯誤,它只會影響該位的正確解密,而不會對其他任何密文位的解密產生影響。因為同步序列加密模式不會對密鑰和密文進行自動同步,所以能夠一定程度上防止直接針對密文的一些攻擊。比如在密文中插入或刪除一位很容易被發現,這時候因為失去同 步,解密的可能都是亂碼。在自同步序列加密模式下采用的簡單回放攻擊,對同步序列加密模式也是基本無效的。?
同步序列加密模式的特點
- 密鑰序列的產生跟明文和密文消息都無關。
- 不會產生密文錯誤擴散,但是沒有同步錯誤自動恢復功能。
- 密文和明文長度相同。