對稱密碼
對稱密碼演算法可以分為分組密碼和流密碼:
分組密碼(block cipher)是每次只能處理特定長度的一塊(block)資料的密碼演算法,一次能處理的資料長度成為分組長度(block length)
流密碼(stream cipher)是對資料流進行連續處理的一類密碼演算法
分組密碼模式簡介
分組密碼一次只能處理特定長度的資料,但是通常情況下需要加密的明文資料長度是大於分組長度的,因此就需要將明文分為若干個block進行加密,不同分組之間的加密成為迭代,不同的分組迭代加密方式就是分組密碼的模式。
分組密碼常用的模式有5種:
- ECB模式:Electronic CodeBook mode,電子密碼本模式
- CBC模式:Cipher Block Chaining mode,密碼分組連線模式
- CFB模式:Cipher FeedBack mode,密文反饋模式
- OFB模式:Output FeedBack mode,輸出反饋模式
- CTR模式:Counter mode,計數器模式
模式實現
ECB模式
ECB模式按照分組長度,將明文分為若干個分組,每個分組獨立加密得到密文,每個分組之間相互不影響。
-
加密
-
解密
針對ECB模式的攻擊
- ECB模式每個分組獨立加密,相同的明文分組,最後輸出的密文是一樣的,因此,通過觀察密文分佈情況,就能大概確定明文分佈情況
- 攻擊者操縱調整密文順序,導致接收者解密後得到的明文也發生變化
CBC模式
CBC為密文分組連結模式。
-
加密:
每次分組加密時,首先將明文和前一個分組密文進行XOR運算,然後再進行加密得到密文。第一個分組沒有可以XOR的密文分組,因此第一個分組是和IV進行XOR運算,然後再加密。
-
解密:
解密時,從第一個密文分組到最後一個密文分組,先使用金鑰解密,然後和前一個密文進行XOR運算得到明文。第一個分組是解密後和IV進行XOR。
針對CBC模式的攻擊
IV位元反轉:由於CBC模式第一個分組解密後,是通過與IV進行XOR操作,因此,攻擊者通過反轉IV中的某些位元,就可以操縱明文變化
CFB模式
CFB為密文反饋模式。
-
加密
加密時,將前一個密文加密後和當前分組明文進行XOR操作,得到當前分組的密文。第一個分組加密時,將IV進行加密後和第一組明文XOR
-
解密
解密時,將前一個分組密文先加密,然後和當前分組密文進行XOR,得到明文。第一個分組解密,是將IV加密後和密文XOR
針對CFB模式的攻擊
重放攻擊:Alice向Bob發生訊息,由4個密文分組組成,中間人Mallory將後3個密文儲存下來。Alice第二次向Bob傳送訊息時,Mallory將儲存的3箇舊密文替換後傳送給Bob,Bob解密時,第一個密文可以正常解密,第二個會報錯,第三個和第四個會變成Mallory替換的內容。
OFB模式
OFB為輸出反饋模式
-
加密
加密時,通過將IV加密,和第一個明文分組XOR得到第一個密文分組,對加密後的IV繼續加密,和第二個明文XOR,以此類推
-
解密
解密時,將IV加密,和第一個密文分組XOR得到第一個明文分組,繼續對IV加密後的結果加密和第二個密文分組XOR,得到第二個明文,以此類推
CTR模式
CTR為計數器模式,將主詞累加的計數器進行加密生成金鑰流,和明文XOR得到密文。
-
加密
第一個分組加密時,將計數器CTR加密,和第一個明文XOR,得到第一個密文,然後將計數器CTR加一,加密後和第二個明文XOR,以此類推
-
解密
解密時,通過將CTR加密後和密文XOR得到明文。