分组密码与模式
文章目錄
- 什么是分組密碼和模式
- ECB模式
- CBC模式
- CFB模式
- OFB模式
- CTR模式
什么是分組密碼和模式
前面我們講過了DES和AES算法,他們每次都只能加密固定長度的明文,這樣的密碼算法叫做分組密碼。
如果需要加密更長的明文則需要對分組密碼進行迭代。而分組密碼的迭代方法就稱為分組密碼的模式。
本文我們會講如下幾種模式:
- ECB模式:電子密碼本模式
- CBC模式: 密碼分組鏈接模式
- CFB模式: 密文反饋模式
- OFB模式: 輸出反饋模式
- CTR模式: 計數(shù)器模式
ECB模式
ECB模式的全稱是Electronic CodeBook模式,ECB模式是將明文分組(分組密碼算法中作為加密對象的明文)加密之后的結果直接成為密文分組(使用分組加密算法將明文分組加密之后所生成的密文)。
下圖為ECB模式的加密:
密文明文密文分組1密文分組2密文分組3明文分組1明文分組2明文分組3加密加密加密下圖為ECB模式的解密:
明文密文明文分組2明文分組2明文分組2密文分組1密文分組2密文分組2解密解密解密ECB模式的特點
ECB模式是最簡單的模式,在其中明文和密文是一一對應的,相同的明文會被加密為相同的密文,這樣可以通過觀察密文得到明文中重復的組合,并以此為線索來破解密碼。
ECB模式的攻擊
ECB模式中,每個明文對應著相應的密文。 那么攻擊者并不需要進行解密,他可以偽造密文的順序,從而改變了解密出來的明文順序。
比如 A 轉賬給B C元。如果A,B,C是明文分組,其對應的密文分組是a,b,c, 則攻擊者只需要改變密文的順序為:b,a,c, 那么被解密出來的明文含義就是 B轉賬給A C元。
CBC模式
CBC模式的全稱是Cipher Block Chaining模式。
CBC模式是將前一個密文分組與當前的明文分組的內容混合起來進行加密的模式。這樣可以避免ECB模式的弱點。
CBC模式的加密:
密文明文密文分組1密文分組2密文分組3明文分組1明文分組2明文分組3初始化向量XOR加密XOR加密XOR加密CBC模式的解密:
密文明文密文分組1密文分組2密文分組3明文分組1明文分組2明文分組3初始化向量XOR解密XOR解密XOR解密CBC模式的特點
和ECB模式相比,ECB只是進行了加密,而CBC則是在加密之前做了一次XOR。
并且CBC要與前面一個密文分組進行XOR運算,這樣相同的明文分組也會生成不同的密文。ECB的缺陷就不存在了。
這樣其實也是CBC的缺點,它是一個鏈式結構,如果要生成密文分組3,則必須先加密明文分組1,2 。 不能并行進行。
另外我們觀察CBC的解密過程可以看到,如果一個密文分組損壞,只要密文長度不變,則只會影響其相關聯(lián)的兩個明文分組的解密。
SSL/TLS 協(xié)議就是使用CBC模式來保證通信的機密性的。
CBC模式的攻擊
CBC模式可以操縱解密過程的初始化向量,從而對解密后的明文進行攻擊。具體來說就是對初始化向量進行反轉,從而導致XOR之后的明文分組1也被反轉了。
另外還有一種攻擊叫做填充提示攻擊,如果在分組密碼中,明文長度不是分組長度的整數(shù)倍時候,需要在最后一個分組填充一些數(shù)據(jù)讓其湊夠一個分組長度。在填充提示攻擊中,攻擊者會反復發(fā)送一段密文,每次發(fā)送都修改填充的數(shù)據(jù),從而根據(jù)解密的錯誤信息來推斷一部分明文相關的信息。
CFB模式
CFB模式的全稱是 Cipher FeedBack模式(密文反饋模式)。在CFB模式中,前一個密文分組會首先進行加密,然后再與明文分組進行XOR運算,最后得到密文分組。
如下圖所示CFB模式的加密:
密文明文密文分組1密文分組2密文分組3明文分組1明文分組2明文分組3初始化向量XOR加密XOR加密XOR加密下面是CFB模式的解密:
密文明文密文分組1密文分組2密文分組3明文分組1明文分組2明文分組3初始化向量XOR加密,不是解密XOR加密,不是解密XOR加密,不是解密CFB模式的攻擊
我們觀察在CFB解密階段,是通過密文加密之后和密文進行XOR操作得到明文的。
這樣就有可能進行重放攻擊。比如用戶可以將上一次發(fā)送過來的密文保存起來,將下一次發(fā)送過來的密文進行替換,從而達到修改新明文的目的。
OFB模式
OFB模式的全稱是Output-FeedBack模式(輸出反饋模式)。在OFB模式中,密碼的輸出會反饋到密碼算法的輸入中。
OFB模式是通過將明文分組和密碼算法的輸出進行XOR運算來產生密文分組的。
OFB模式的加密過程:
密文分組1密文分組2密文分組3明文分組1明文分組2明文分組3初始化向量加密1加密2加密3XOR1XOR2XOR3OFB模式的解密:
密文分組1密文分組2密文分組3明文分組1明文分組2明文分組3初始化向量加密1加密2加密3XOR1XOR2XOR3我們可以看到,OFB是將初始化向量不斷的加密從而得到后續(xù)的加密輸入。
他和CFB模式的區(qū)別也就在這里。CFB是將密文分組當做加密輸入。
因為OFB模式中加密輸入跟要加密的數(shù)據(jù)無關,所以我們可以提前計算出來所有要用到的加密輸入,從而提高效率。
CTR模式
CTR模式的全稱是Counter模式(計數(shù)器模式)。CTR模式是一種將計數(shù)器不斷累加,然后進行加密從而生成密鑰流的流密碼。
下面是CTR模式的加密:
密文分組1密文分組2密文分組3明文分組1明文分組2明文分組3計數(shù)器CTR加密1XOR1計數(shù)器CTR+1加密2XOR2計數(shù)器CTR+2加密3XOR3CTR模式的解密:
密文分組1密文分組2密文分組3明文分組1明文分組2明文分組3計數(shù)器CTR加密1XOR1計數(shù)器CTR+1加密2XOR2計數(shù)器CTR+2加密3XOR3CTR模式的特點
CTR的加密和解密使用了完全相同的結構,所以在程序設計上比較容易實現(xiàn)。
CTR 可以任意順序對分組進行加密和解密,從而支持并行計算。
更多精彩內容且看:
- 區(qū)塊鏈從入門到放棄系列教程-涵蓋密碼學,超級賬本,以太坊,Libra,比特幣等持續(xù)更新
- Spring Boot 2.X系列教程:七天從無到有掌握Spring Boot-持續(xù)更新
- Spring 5.X系列教程:滿足你對Spring5的一切想象-持續(xù)更新
- java程序員從小工到專家成神之路(2020版)-持續(xù)更新中,附詳細文章教程
更多教程請參考 flydean的博客
總結
- 上一篇: Spring5参考指南:AspectJ高
- 下一篇: 公钥私钥