分组加密的四种模式
(以下內容整理自網絡文章)
加密一般分為對稱加密(Symmetric Key Encryption)和非對稱加密(Asymmetric Key Encryption)。
對稱加密又分為分組加密和序列密碼。
分組密碼,也叫塊加密(block cyphers),一次加密明文中的一個塊。是將明文按一定的位長分組,明文組經過加密運算得到密文組,密文組經過解密運算(加密運算的逆運算),還原成明文組。
序列密碼,也叫流加密(stream cyphers),一次加密明文中的一個位。是指利用少量的密鑰(制亂元素)通過某種復雜的運算(密碼算法)產生大量的偽隨機位流,用于對明文位流的加密。
解密是指用同樣的密鑰和密碼算法及與加密相同的偽隨機位流,用以還原明文位流。
在分組加密算法中,有ECB,CBC,CFB,OFB這幾種算法模式。
1)ECB(Electronic Code Book)/電碼本模式
1.簡單,有利于并行計算,誤差不會被傳送;
2.不能隱藏明文的模式;
repetitions in message may show in cipher text/在密文中出現明文消息的重復?
3.可能對明文進行主動攻擊;
加密消息塊相互獨立成為被攻擊的弱點/weakness due to encrypted message blocks being independent?
2)CBC(Cipher Block Chaining)
這個詞在分組密碼中經常會用到,它是指一個明文分組在被加密之前要與前一個的密文分組進行異或運算。當加密算法用于此模式的時候除密鑰外,還需協商一個初始化向量(IV),這個IV沒有實際意義,只是在第一次計算的時候需要用到而已。采用這種模式的話安全性會有所提高。
1. 不容易主動攻擊,安全性好于ECB,適合傳輸長度長的報文,是SSL、IPSec的標準。
each ciphertext block depends on all message blocks/每個密文塊依賴于所有的信息塊
thus a change in the message affects all ciphertext blocks/明文消息中一個改變會影響所有密文塊
2. need Initial Vector (IV) known to sender & receiver/發送方和接收方都需要知道初始化向量?
3.加密過程是串行的,無法被并行化(在解密時,從兩個鄰接的密文塊中即可得到一個平文塊。因此,解密過程可以被并行化);誤差傳遞
3)Cipher Feedback (CFB)
密文反饋(CFB,Cipher feedback)模式類似于CBC,可以將塊密碼變為自同步的流密碼;工作過程亦非常相似,CFB的解密過程幾乎就是顛倒的CBC的加密過程:
需要使用一個與塊的大小相同的移位寄存器,并用IV將寄存器初始化。然后,將寄存器內容使用塊密碼加密,然后將結果的最高x位與平文的x進行異或,以產生密文的x位。下一步將生成的x位密文移入寄存器中,并對下面的x位平文重復這一過程。解密過程與加密過程相似,以IV開始,對寄存器加密,將結果的高x與密文異或,產生x位平文,再將密文的下面x位移入寄存器。
與CBC相似,平文的改變會影響接下來所有的密文,因此加密過程不能并行化;而同樣的,與CBC類似,解密過程是可以并行化的。
4)Output Feedback (OFB)
輸出反饋模式(Output feedback, OFB)可以將塊密碼變成同步的流密碼。它產生密鑰流的塊,然后將其與平文塊進行異或,得到密文。與其它流密碼一樣,密文中一個位的翻轉會使平文中同樣位置的位也產生翻轉。這種特性使得許多錯誤校正碼,例如奇偶校驗位,即使在加密前計算而在加密后進行校驗也可以得出正確結果。
每個使用OFB的輸出塊與其前面所有的輸出塊相關,因此不能并行化處理。然而,由于平文和密文只在最終的異或過程中使用,因此可以事先對IV進行加密,最后并行的將平文或密文進行并行的異或處理。
可以利用輸入全0的CBC模式產生OFB模式的密鑰流。這種方法十分實用,因為可以利用快速的CBC硬件實現來加速OFB模式的加密過程。
?
http://blog.csdn.net/fw0124/article/details/8472560
總結
- 上一篇: 201621123053《Java程序设
- 下一篇: Objective-C 之Block(2