分组加密的四种模式(ECB、CBC、CFB、OFB)
加密一般分為對(duì)稱加密(Symmetric Key Encryption)和非對(duì)稱加密(Asymmetric Key Encryption)。
對(duì)稱加密又分為分組加密和序列password。
分組password。也叫塊加密(block cyphers)。一次加密明文中的一個(gè)塊。是將明文按一定的位長(zhǎng)分組,明文組經(jīng)過(guò)加密運(yùn)算得到密文組,密文組經(jīng)過(guò)解密運(yùn)算(加密運(yùn)算的逆運(yùn)算),還原成明文組。
序列password。也叫流加密(stream cyphers),一次加密明文中的一個(gè)位。是指利用少量的密鑰(制亂元素)通過(guò)某種復(fù)雜的運(yùn)算(password算法)產(chǎn)生大量的偽隨機(jī)位流,用于對(duì)明文位流的加密。
解密是指用相同的密鑰和password算法及與加密相同的偽隨機(jī)位流,用以還原明文位流。
分組加密算法中,有ECB,CBC,CFB,OFB這幾種算法模式。
1)ECB(Electronic Code Book)/電碼本模式
<img src="http://img.blog.csdn.net/20160405180712271?
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">
DES ECB(電子密本方式)事實(shí)上很easy。就是將數(shù)據(jù)依照8個(gè)字節(jié)一段進(jìn)行DES加密或解密得到一段8個(gè)字節(jié)的密文或者明文,最后一段不足8個(gè)字節(jié),依照需求補(bǔ)足8個(gè)字節(jié)進(jìn)行計(jì)算,之后依照順序?qū)⒂?jì)算所得的數(shù)據(jù)連在一起就可以。各段數(shù)據(jù)之間互不影響。
特點(diǎn):
1.簡(jiǎn)單。有利于并行計(jì)算。誤差不會(huì)被傳送。
2.不能隱藏明文的模式;
repetitions in message may show in cipher text/在密文中出現(xiàn)明文消息的反復(fù)
3.可能對(duì)明文進(jìn)行主動(dòng)攻擊;
加密消息塊相互獨(dú)立成為被攻擊的弱點(diǎn)/weakness due to encrypted message blocks being independent
2)CBC(Cipher Block Chaining)/密文分組鏈接方式
<img src="http://img.blog.csdn.net/20160405180951038?
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">
DES CBC(密文分組鏈接方式)有點(diǎn)麻煩。它的實(shí)現(xiàn)機(jī)制使加密的各段數(shù)據(jù)之間有了聯(lián)系。事實(shí)上現(xiàn)的機(jī)理例如以下:
加密過(guò)程例如以下:
1)首先將數(shù)據(jù)依照8個(gè)字節(jié)一組進(jìn)行分組得到D1D2......Dn(若數(shù)據(jù)不是8的整數(shù)倍,用指定的PADDING數(shù)據(jù)補(bǔ)位)
2)第一組數(shù)據(jù)D1與初始化向量I異或后的結(jié)果進(jìn)行DES加密得到第一組密文C1(初始化向量I為全零)
3)第二組數(shù)據(jù)D2與第一組的加密結(jié)果C1異或以后的結(jié)果進(jìn)行DES加密,得到第二組密文C2
4)之后的數(shù)據(jù)以此類推,得到Cn
5)按順序連為C1C2C3......Cn即為加密結(jié)果。
解密是加密的逆過(guò)程。過(guò)程例如以下:
1)首先將數(shù)據(jù)依照8個(gè)字節(jié)一組進(jìn)行分組得到C1C2C3......Cn
2)將第一組數(shù)據(jù)進(jìn)行解密后與初始化向量I進(jìn)行異或得到第一組明文D1(注意:一定是先解密再異或)
3)將第二組數(shù)據(jù)C2進(jìn)行解密后與第一組密文數(shù)據(jù)進(jìn)行異或得到第二組數(shù)據(jù)D2
4)之后依此類推。得到Dn
5)按順序連為D1D2D3......Dn即為解密結(jié)果。
這里注意一點(diǎn),解密的結(jié)果并不一定是我們?cè)瓉?lái)的加密數(shù)據(jù),可能還含有你補(bǔ)得位。一定要把補(bǔ)位去掉才是你的原來(lái)的數(shù)據(jù)。
特點(diǎn):
1. 不easy主動(dòng)攻擊,安全性好于ECB,適合傳輸長(zhǎng)度長(zhǎng)的報(bào)文,是SSL、IPSec的標(biāo)準(zhǔn)。
each ciphertext block depends on all message blocks/每一個(gè)密文塊依賴于全部的信息塊
thus a change in the message affects all ciphertext blocks/明文消息中一個(gè)改變會(huì)影響全部密文塊
2. need Initial Vector (IV) known to sender & receiver/發(fā)送方和接收方都須要知道初始化向量
3.加密過(guò)程是串行的,無(wú)法被并行化(在解密時(shí),從兩個(gè)鄰接的密文塊中就可以得到一個(gè)平文塊。因此。解密過(guò)程能夠被并行化)。
3)Cipher Feedback (CFB)/密文反饋模式
<img src="http://img.blog.csdn.net/20160405181228492?
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">
密文反饋(CFB,Cipher feedback)模式類似于CBC。能夠?qū)Kpassword變?yōu)樽酝降牧鱬assword;工作過(guò)程亦很相似,CFB的解密過(guò)程差點(diǎn)兒就是顛倒的CBC的加密過(guò)程:
須要使用一個(gè)與塊的大小同樣的移位寄存器。并用IV將寄存器初始化。然后。將寄存器內(nèi)容使用塊password加密,然后將結(jié)果的最高x位與平文的x進(jìn)行異或,以產(chǎn)生密文的x位。
下一步將生成的x位密文移入寄存器中。并對(duì)以下的x位平文反復(fù)這一過(guò)程。
解密過(guò)程與加密過(guò)程相似,以IV開始,對(duì)寄存器加密,將結(jié)果的高x與密文異或,產(chǎn)生x位平文。再將密文的以下x位移入寄存器。
與CBC相似,平文的改變會(huì)影響接下來(lái)全部的密文,因此加密過(guò)程不能并行化;而相同的,與CBC類似,解密過(guò)程是能夠并行化的。
4)Output Feedback (OFB)/輸出反饋模式
輸出反饋模式(Output feedback, OFB)能夠?qū)Kpassword變成同步的流password。它產(chǎn)生密鑰流的塊,然后將其與平文塊進(jìn)行異或。得到密文。
與其他流password一樣,密文中一個(gè)位的翻轉(zhuǎn)會(huì)使平文中相同位置的位也產(chǎn)生翻轉(zhuǎn)。
這樣的特性使得很多錯(cuò)誤校正碼,比如奇偶校驗(yàn)位。即使在加密前計(jì)算而在加密后進(jìn)行校驗(yàn)也能夠得出正確結(jié)果。
每一個(gè)使用OFB的輸出塊與其前面全部的輸出塊相關(guān)。因此不能并行化處理。
然而,因?yàn)槠轿暮兔芪膬H僅在終于的異或過(guò)程中使用。因此能夠事先對(duì)IV進(jìn)行加密。最后并行的將平文或密文進(jìn)行并行的異或處理。
能夠利用輸入全0的CBC模式產(chǎn)生OFB模式的密鑰流。這樣的方法十分有用。由于能夠利用高速的CBC硬件實(shí)現(xiàn)來(lái)加速OFB模式的加密過(guò)程。
總結(jié)
以上是生活随笔為你收集整理的分组加密的四种模式(ECB、CBC、CFB、OFB)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 899元 华硕推出ProArt MD30
- 下一篇: ABAP Netweaver和Hybri