對稱密鑰算法的資料加密模式
- 一、分組加密模式
-
- 電子密碼本模式(ECB)
-
- 加密方式
- 特點
- 缺點
- 加密分組連結模式(CBC)
-
- 加密方式
- 特點
- 缺點
- 加密回報模式(CFB)
-
- 加密方式
- 特點
- 缺點
- 輸出回報模式(OFB)
-
- 加密方式
- 特點
- 缺點
- 三重分組加密模式
- 其他分組加密模式
- 資料填充方式
- 二、序列加密模式
-
- 自同步序列加密模式
-
- 加密方式
- 特點
- 缺點
- 同步序列加密模式
-
- 加密方式
- 特點
- 缺點
- 三、加密模式選擇
- 四、加密算法的應用
對稱密鑰算法的資料加密方式分為兩類:分組加密和序列加密。
分組加密模式又稱為塊加密,是将要處理的資料分成固定的長度,然後在這固定長度的資料上使用密碼算法進行計算。
序列加密模式又稱為流加密方式,是對要處理的資料按位(或位元組)逐個進行加密處理。
加密模式的選擇需要考慮安全性、容錯性、效率和實時性。
一、分組加密模式
常用的分組密碼模式有四種,分别是:電子密碼本模式(ECB)、加密分組連結模式(CBC)、加密回報模式(CFB)和輸出回報模式(OFB)。
電子密碼本模式(ECB)
加密方式
将加密的資料分為若幹組,每組的大小跟加密密鑰的長度相同,然後每組都用相同的密鑰進行加密。
圖中P0、P1是明文分組,C0、C1是相應的密文分組。
特點
- 每次加密的資料長度相同。
- 各個分組互相獨立,可以并行加密和解密。
- 相同的明文使用相同的密鑰總是産生相同的密文。
- 一個位的錯誤隻對所在的明文塊産生影響,但是增加或删除一個位會導緻其後整個密文序列沒有版本正确解密,這稱為同步錯誤。
缺點
容易受到分組替換攻擊。
加密分組連結模式(CBC)
加密方式
加密分組連結模式首先也是将明文分成固定長度的分組,然後将前面一個加密分組輸出的密文與下一個要加密的明文分組進行異或操作計算,将計算結果再用密鑰進行加密得到密文。第一明文分組加密的時候,因位前面沒有加密的密文,是以需要一個初始向量(IV)。
圖中P0、P1是明文分組,C0、C1是相應的密文分組,IV是初始向量。
使用數學公式可以表示為:
特點
- 每次加密的資料長度固定。
- 當相同的明文使用相同的密鑰和初始向量的時候CBC模式總是産生相同的密文。
- 連結操作是得密文分組要依賴目前和以前處理過的明文分組,密文分組順序不能進行重新排列,也不能進行并行操作。
- 可以使用不同的初始化向量來避免相同的明文産生相同的密文,能一定程度上抵抗字典攻擊等密文分析。
- 一位發生錯誤後,會對目前及後一個分組的明文産生錯誤錯誤擴散,但是錯誤分組的第二個分組之後的分組不會受到這個錯誤的影響,這稱為加密分組連結模式的自恢複功能。增加或删除一個位會導緻其後整個密文序列沒有辦法正确解密。
- 不能實時解密,必須等到8個位元組都接收到之後才能開始解密,否則得不到正确的結果。
缺點
CBC雖然對抵抗分組重複攻擊和分組替換攻擊有效,但是很容易受到幹擾性攻擊,利用CBC和ECB同樣不能恢複同步錯誤,攻擊者可以再密文後附加一些資訊,造成安全問題。
錯誤擴散。
必須等整個分組的資料接收完之後才能進行解密,不能實時解密,不适合再網絡應用中使用。
加密回報模式(CFB)
加密方式
加密回報模式通過引入移位寄存器來克服加密分組連結模式不能實時解密的困難。下圖展示了帶64位移位寄存器的加密回報模式的加密和解密流程圖。圖中C2、C3及P10等都是一個位元組(8位)的資料,是以能夠實作字元的實時加密和解密,不用再等8個位元組都接收到之後再進行解密。圖中在進行第10個位元組資料的加密和解密過程,在該過程中,先從移位寄存器取8個位元組的資料(C2到C9)用密鑰進行加密,然後取加密資料最左邊的一個位元組跟輸入的明文P10進行異或操作,得到的值作為輸出密文C10,同時将C10送入到移位寄存器中。
使用數學公式可以表示為:
CFB同樣需要初始向量,初始向量不需要保密。
特點
- 每次加密的資料不超過64位。
- 當時有相同的密鑰和初始向量的時候,相同的明文使用CFB模式加密輸出相同的密文。
- 連結操作的方法使得密文資料依賴目前和以前所有的資料,是以資料都應該按照順序組織在一起,不能進行并行計算操作。
- 可以使用不同的初始變量使相同的明文産生不同的密文,防止字典攻擊等密文分析行為。
- CFB模式的強度依賴密鑰的長度,強度最大的情況是每次加密的資料長度和密鑰長度相同。
- 當每次加密的資料長度的取值比較小的時候,相同的明文一般需要更多的循環來完成加密,這可能會導緻過大的開銷。
- 每次加密資料的位數應該位8的整數倍。
- 一旦某位資料出錯,會影響目前和其後一些位元組資料的正确性,但是對同步錯誤具有自恢複功能。
- 資料可以實時傳輸,每接收到一位就可以随即進行解密。
缺點
存在錯誤擴散的問題。明文錯誤不會有太大的影響,如果明文其中一位出錯,解密後它隻會影響明文錯誤的哪一位。但是密文錯誤影響會很嚴重,那麼當簽位元組的密文及随後的8個位元組的密文的解密都會受到影響,可能會導緻無法正确解密。因為這9個位元組的解密計算都是使用了該錯誤的密文。但是在這9個位元組之後,密文就能夠恢複到正常的狀态。
輸出回報模式(OFB)
加密方式
與CFB類似,隻是輸入寄存器的資料不太一樣。這種方式輸入寄存器的資料從加密算法輸出的分組的前8位資料取得(對于加密資料長度位8位的輸出回報模式)。下圖所示是輸出分組長度為64位,每次加密輸出位8位的輸出回報模式流程圖。圖中,S2、S3、P10和C10等都是一個位元組,圖中是在進行第10個位元組資料的加密和解密過程,在該過程中,先從移位寄存器取8個位元組的資料(S2到S9)用密鑰進行加密,然後取加密資料最左邊的一個位元組S10跟輸入的明文P10進行異或操作,得到的值作為輸出密文C10,同時将S10送入到移位寄存器中。
使用數學公式可以表示為:
因為輸出回報模式使用的回報變量是内部變量,是以有時候也叫做内部回報模式。
OFB同樣需要初始向量,初始向量不需要保密。
特點
- 每次加密的資料不超過64位。
- 當時有相同的密鑰和初始向量的時候,相同的明文使用OFB模式加密輸出相同的密文。要注意的是,在OFB模式下相同的密鑰和初始向量産生的密鑰流,是以為了安全原因,一個特定的初始向量對一個給定的密鑰應該隻使用一次。
- 沒有使用連結操作,資料相關性小,是以OFB模式更容易受到攻擊。
- 可以使用不同的初始變量産生不同的密鑰流,進而使得相同的明文使用相同的密鑰産生不同的密文。
- 當每次加密的資料長度的取值比較小的時候,相同的明文一般需要更多的循環來完成加密,這可能會導緻過大的開銷。
- 每次加密資料的位數應該位8的整數倍。
- OFB模式不會進行錯誤傳播,某位密文發生錯誤,隻會影響該位對應的明文,而不會影響别的位。
- OFB模式不是自動同步的,如果加密和解密兩個操作失去同步,那麼系統需要重新初始化。
- 每次重新同步的時候,應該使用不同的初始向量。這樣可以避免産生相同的密文,進而避免“已知明文”攻擊。
缺點
對于同步錯誤沒有自恢複功能。
密文前後資料相關性小,安全性相對于CBC和CFB比較弱。
三重分組加密模式
為了提高加密模式安全性,提出了三重分組加密模式。OpenSSL常用的三重電子密碼本模式(3ECB)和三重加密分組連結模式(3CBC)。
三重分組加密模式使用不隻一個密鑰,對明文分組進行了基于基本分組加密模式的加密、解密和加密操作。目前有兩種應用方式:
- 使用兩個密鑰,即第一個密鑰和第三個密鑰相同。
- 使用三個不同的密鑰。 三重加密分組模式具有如下特點。
- 加密過程為使用K1加密,然後使用K2解密,最後使用K3加密完成加密過程。
- 加密過程使用了電子密碼本模式、加密分組連結模式等其他基本分組加密模式,但是密鑰增加到了168位,雖然目前理論上可以使得有效密鑰長度降到112位,相對于56位的密鑰來說,安全性還是得到了很大的提高。
- 如果前兩個密鑰是相同的,那麼就相當于使用一個密鑰加密了一次。
- 如果第一個和第三個密鑰是相同的,那麼密鑰長度事實上是112位,有些攻擊方法可以使得有效密鑰的長度降為比56位稍多的長度,但需要很大的記憶體空間。
- 如果三個密鑰都是相同的,那麼就跟普通的分組加密模式效果相同了。
- 三重分組加密模式的基本特點跟其使用的基本分組加密模式特點基本一緻。
其他分組加密模式
- 計數器模式:在輸出回報模式中,移位寄存器的輸入是從加密輸出分組中最左端的值取出的。計數器模式跟這種模式不同的是移位寄存器的輸出是一個計數器,每一個分組完成加密後,計數器要增加某一個常數。計數器模式跟輸出回報模式一樣沒有錯誤擴散的特點,但是也同樣沒有同步錯誤恢複功能。
- 分組連結模式:分組連結模式将分組密碼算法的輸入與前面所有密文分組的異或值相異或。分組連結模式也需要一個初始向量,具有密文錯誤擴散的性質。
- 其他模式:擴散密碼分組連結模式、帶校驗和的密碼分組連結等等。
資料填充方式
為了解決分組加密模式明文不是分組長度的整數倍,需要通過填充技術來對最後一個分組進行填充以使該分組正好為一個分組的固定長度。
- 全零或全1填充。
- 使用該分組不夠的位元組數的數作為值填充各個要填充的位元組,這樣,在密鑰恢複的時候,檢查最後一個位元組的值就知道要删除的填充位元組的數目。為了使這種方法正确工作,即便最後一個分組時完整的,也要增加一個分組作為填充。
- 密文挪用分組填充方法。從前一個輸出的密文分組中截取出一段跟要填充的資料長度相同的資料C’填充最後一個不完整的分組Pn,然後該分組加密後作為倒數第二個分組Cn-1傳輸,而Pn-1加密出來的密文分組截取後剩餘的一段資料(長度跟明文最後一個不完整的分組 Pn長度相同)作為作為最後一個不完整的密文分組Cn傳輸。解密的時候,先解密Cn-1得到不完整明文分組Pn和加密出來的密文分組的後一段C′,然後将Cn 和C′再次合成Pn-1對應的密文,再進行解密得到Pn-1。這樣,明文長度和密文長度就保持一緻。
使用密文挪用填充方法的電子密碼本模式:
使用密文挪用填充方法的加密分組連結模式:
二、序列加密模式
序列加密模式每次對一位明文進行簡單運算(一般時異或運算)進而得到密文。一個序列加密模式結構一般由密鑰序列發生器,運算單元、明文輸入和密文輸出組成。下圖為通用序列加密模式的模型圖:
數學表達公式表示為:
序列加密模式的安全性完全依賴密鑰序列的安全性,也就是說,依賴密鑰序列發生器的安全性。
一個密鑰序列發生器理論上可以抽象為三部分:内部狀态、狀态轉移函數及輸出函數。
密鑰可以看作時對其内部狀态進行初始化和重置的向量。
自同步序列加密模式
加密方式
自同步序列加密模式又稱為密文自動密鑰,它的主要思想是密鑰序列跟以前一定數量的密文位相關,即密鑰序列是以前一定數量密文位的函數。
特點
- 内部狀态時前面n位固定長度密文的函數。
- 算法的安全性依賴于輸出函數的複雜性和安全性。
- 會産生密文錯誤擴散,密文中一位發生錯誤,會導緻其後n位密文不能正确解密。
- 解密的時候具有密鑰序列和密文自動同步的功能,具有同步錯誤自恢複功能。
- 明文長度和密文長度相同。
- 容易受到回放攻擊。
缺點
存在錯誤擴散問題。
密鑰沒有更換的情況下,容易受到回放攻擊。
同步序列加密模式
加密方式
同步序列加密模式又稱為密鑰自動密鑰加密,它的特點是密鑰序列的産生跟處理的消息是不相關,互相獨立的。
在加密端,密鑰序列發生器在使用密鑰進行初始化後開始産生密鑰序列,在解密端,密鑰序列發生器使用同樣的密鑰進行狀态初始化進而産生同樣的密鑰序列,這樣就能夠開始進行正确的加密和解密。一般來說,加密端和解密端的同步都是通過相同的密鑰進行狀态初始化設定實作的。由于在加密和解密端必須産生相同的密鑰,是以事實上同步序列加密模式的密鑰發生器産生的密鑰必須是确定的,必須保證這些輸出密鑰序列在相當長的一個範圍内不能重複,否則安全性将得不到保證。
如果在解密過程中同步狀态被破壞了,比如增加或删除了一個密文位或者密鑰序列發生器跳過了一個周期,那麼必須重新進行同步,否則資料不可能進行正确的解密。是以同步序列加密模式對同步錯誤是沒有辦法恢複的。
同步序列加密模式不會産生密文錯誤擴散,如果一個密文位發生了錯誤,它隻會影響該位的正确解密,而不會對其他任何密文位的解密産生影響。
因為同步序列加密模式不會對密鑰和密文進行自動同步,是以能夠一定程度上防止直接針對密文的一些攻擊。比如在密文中插入或删除一位很容易被發現,這時候因為失去同步,解密的可能都是亂碼。在自同步序列加密模式下采用的簡單回放攻擊,對同步序列加密模式也是基本無效的。
特點
- 密鑰序列的産生跟明文和密文消息都無關。
- 不會産生密文報錯擴散,但是沒有同步錯誤自動恢複功能。
- 密文和明文長度相同。
缺點
沒有同步錯誤自動恢複功能。
三、加密模式選擇
- 分組加密模式和序列加密模式性能對比
- 分組加密算法性能比較
四、加密算法的應用
- 資料傳輸加密:根據加密裝置在網絡模型中放置位置的不同,我們可以将傳輸資料的加密分為實體信道加密、鍊路加密、終端加密、會話加密及應用加密。
- 存儲資料加密。
- 對稱加密算法主要被設計用于資料的加密,而公開密鑰算法主要用于解決密鑰分發和管理的問題。
- 硬體加密速度快、安全性高、容易使用,但開發成本高。軟體加密靈活性好、可移植性強,容易更新,但速度慢、開銷大,容易被篡改。
說明:《OpenSSL與網絡資訊安全》閱讀筆記