分组加密的工作模式
分組加密算法把數(shù)據(jù)分成固定長度的分組處理,算法的輸入長度為一個分組的長度。為了改善安全性,適應不同的應用環(huán)境,分組加密有多種不同的工作模式。最常見的四種工作模式是:ECB,CBC,CFB,OFB。
ECB模式,
ECB模式是最簡單的基本模式。在密鑰的控制下,把一個分組長度的輸入,轉換為一個分組長度的輸出。一個分組算法設計出來就是ECB模式的。這一模式用于實際應用加密的問題是,容易遭受字典攻擊。ECB模式下,只要密鑰確定了,相同明文一定輸出相同密文。這一特性如同諜戰(zhàn)片里的替換密碼本,一字對一字。這就是ECB模式這一名稱的來源,Electronic Code Book,一個電子密碼本。每一種一種明文密文的對應關系,也唯一確定了密鑰。由于明文往往存在固定的格式部分,這些固定輸入對應的輸出的變化僅為密鑰的變化所導致。這大大降低了敵方分析密鑰的難度,敵方可以預先把這些固定輸入以不同密鑰加密的密文制成字典,通過查閱字典,使得逆推密鑰成為可能。傳統(tǒng)的替換密碼本會被詞頻統(tǒng)計方式攻擊,ECB模式同樣易于被類似的方式攻擊。即使不知道密鑰,在輸入變化種類較少時,敵方只需一次獲取這些明文與密文的對應關系,只要密鑰未更換,敵方就能夠在后續(xù)的通信中,持續(xù)獲得密文對應的明文。
ECB模式加密是很直接的,將明文按照算法規(guī)定的分組長度分組并填充(padding),逐個分組分別加密即可。
ECB模式示意圖
圖片來自http://www.cnblogs.com/happyhippy/archive/2006/12/23/601353.html
CBC模式,
為了阻止相同的用戶明文在密鑰不變時輸出不變的密文,我們使用一個隨機組成的分組作為擾碼與第一個明文分組異或,擾亂明文的內在的一些固定結構和冗余,再加密這樣擾亂過的分組,分組加密的輸出密文分組既是加密結果的一部分,又是下一個分組加密的擾碼。最初的那個隨機數(shù)組成的分組稱為初始向量,一般用符號IV表示。前一分組輸出與下一個分組輸入之間的鏈接關系使得IV的隨機性擴散到整個輸出密文之中。IV一般會隨著密文一同保存和發(fā)送。解密時,逆向使用IV,即可恢復所有明文分組。隨機IV的存在,使得相同明文相同密鑰在不會輸出相同的密文,增加了根據(jù)密文分析推測密鑰和明文的難度。CBC模式的缺點之一是分組的前后鏈接關系使得加密難以實現(xiàn)并行處理。
CBC模式示意圖
圖片來自http://www.cnblogs.com/happyhippy/archive/2006/12/23/601353.html
CFB模式,
ECB和CBC模式下,分組密碼會把任意長度明文填充到分組長度的整數(shù)倍,然后這個分組處理。在流媒體的加密處理中,這是一個問題,信道往往不會去適應分組處理帶來的長度變化。CFB和OFB模式可以用來把分組密碼轉換成一個流密碼,加密可以做到不改變數(shù)據(jù)的長度。CFB使用密文反饋,能夠支持任意長度數(shù)據(jù)的等長加密。但是密文反饋使得密文的誤碼會擴散。
CFB模式示意圖
圖片來自http://www.cnblogs.com/happyhippy/archive/2006/12/23/601353.html
OFB模式
OFB模式看起來像一個真正的流密碼。OFB的輸出反饋機制使得主要的密碼運算只需密鑰確定了就可以進行,發(fā)方無需等待明文就緒,收方也無需等待密文收到。OFB模式下,分組密碼具備流密碼的使用特性,明密文長度一致,傳輸誤碼不會擴散。與真正的流密碼算法對比,分組密碼的OFB模式及CFB模式存在著運算效率降低,輸出流周期難以確定的問題。
OFB模式示意圖
圖片來自http://www.cnblogs.com/happyhippy/archive/2006/12/23/601353.html
小結
以上是幾種最常見的分組加密工作模式,ECB是一個分組算法的基本模式,其他模式都是在ECB的基礎上,引入各種鏈接、反饋等擴展處理流程所得。通過這些流程的不同組合,當然還能形成更多的工作模式。這些不同的工作模式,有些是為了增強安全性,有些是為了適應不同的加密應用環(huán)境。成熟的加密軟件包均會支持這幾種常用模式。作為加密應用開發(fā)者,如果基于這些加密軟件包開發(fā),需要關注的只是結合應用需要,選擇合適的工作模式。一些加密硬件邏輯往往只會提供基本的ECB模式分組加密。這時,開發(fā)者需要按照應用的選擇,將ECB模式的基本組件包裝成需要的其他工作模式。
轉載于:https://www.cnblogs.com/kodefun/p/4671882.html
總結
- 上一篇: (八十二)利用苹果服务器获取导航信息和绘
- 下一篇: appium第一个安卓自动化工程