概述
什么是模式
第三章介紹的對稱密碼算法DES贮匕、AES都屬于分組密碼,分組密碼的特點是分組的長度是固定的喜德。但是由于明文的長度不固定且基本超過分組長度逛绵,所以就需要進(jìn)行多輪的迭代加密。
模式就是指的多輪迭代的方式频伤。
模式的種類
目前模式分成5種:
- ECB模式:Electronic CodeBook mode(電子密碼本模式)
- CBC模式:Cipher Block Chaining mode(密碼分組鏈接模式)
- CFB模式:Cipher FeedBack mode(密文反饋模式)
- OFB模式:Output FeedBack mode(輸出反饋模式)
- CTR模式:CounTeR mode(計數(shù)器模式)
ECB模式
概述
ECB模式應(yīng)該是最直觀的模式恳谎,簡單的說就是直接將每個分組進(jìn)行加密即可。
假設(shè)有一個35字節(jié)的明文憋肖,如果使用AES的算法因痛,則分成三個分組。其中第三個分組需要填充成16字節(jié)岸更。
然后針對這3個分組分別進(jìn)行AES加密鸵膏,加密完成后,組合起來就成為密文怎炊。
風(fēng)險
- 相同明文加密出來的密文是相同的谭企。因為參與加密的只有明文和密鑰,所以只能得出相同的密文评肆。這個可以給攻擊者通過推測猜測出明文的內(nèi)容债查。
- 存在被篡改的風(fēng)險,可以實現(xiàn)無需破解密文瓜挽,即可以操縱明文盹廷。
這個風(fēng)險的根本原因是因為,在加密的過程中久橙,每個分組是互相獨立的速和。
例子:
假設(shè)有明文被分成三個分組歹垫,恰好代表三個意思:
分組1:付款人
分組2:收款人
分組3:金額
怎樣通過密文操縱明文呢?
我們可以截獲密文颠放,然后將密文的分組2和分組1調(diào)整一下先后順序排惨,先發(fā)送分組2,再發(fā)送分組1碰凶。這樣付款人和收款人就互相調(diào)換了位置暮芭。
CBC模式
概述
- CBC模式跟上面的ECB模式的最大區(qū)別是,分組的加密不再是互相無關(guān)的獨立行為欲低,而是互相影響辕宏。
簡單的說,當(dāng)前分組不再直接進(jìn)行加密運算砾莱,而是先和前一個分組加密后的密文進(jìn)行XOR運算后瑞筐,再進(jìn)行加密運算。對于第一個分組腊瑟,則給定一個初始化向量進(jìn)行XOR運算聚假。
因為前后分組是鏈接在一起的,所以才被稱為鏈接模式闰非。 - 解密的過程是密文用密鑰解密后膘格,再和前一個分組的密文進(jìn)行XOR得到最終的明文。如果是第一個分組财松,則和初始化向量進(jìn)行XOR運算即可瘪贱。
- 解密的過程實際上只需要知道密鑰即可,因為前一個分組的密文和本分組的密文是早就存在的辆毡,所以解密的過程支持分布式運算菜秦。
風(fēng)險
- 如果其中一個密文的分組受到損壞,則會影響到此密文分組對應(yīng)的明文解密舶掖,以及其后面一個分組的明文解密球昨。因為這個密文分組參與到了后面分組的密文加解密的過程。
- 如果對初始化向量的某個比特進(jìn)行反轉(zhuǎn)访锻,則會對第一個分組的明文造成攻擊,使得其明文的對應(yīng)的比特反轉(zhuǎn)闹获,原因是參與了異或期犬。
- 如果是對某個密文進(jìn)行比特反轉(zhuǎn),會造成其后面的分組對應(yīng)比特反轉(zhuǎn)避诽,但同時會造成其對應(yīng)明文的多個比特進(jìn)行反轉(zhuǎn)龟虎。
- 對CBC模式的攻擊效果基本是破壞性的,相對而言ECB模式的攻擊效果更明顯沙庐。
CFB模式
概述
- 相對CBC模式而言鲤妥,不變的地方是前面分組的結(jié)果仍舊參與到后面分組的加解密過程中佳吞,形成一個鏈?zhǔn)浇Y(jié)構(gòu)。
改變的地方是參與的方式棉安,更確切的說是加密的對象底扳。 - CBC模式是分組1的密文和分組2的明文XOR后,再針對XOR的結(jié)果進(jìn)行加密贡耽。
而CFB模式是衷模,分組的明文不參與到加密過程中! - 加密過程是蒲赂。分組1輸出的密文進(jìn)行加密阱冶,然后和分組2的明文進(jìn)行XOR運算,得到分組2的密文滥嘴。
對于第一個分組木蹬,則是用初始化向量進(jìn)行加密后,再和第一個分組的明文進(jìn)行XOR若皱,得到密文镊叁。 -
解密的過程,不用解密是尖。
對于第一個分組而言意系,解密是把初始化向量進(jìn)行加密,然后和密文進(jìn)行XOR饺汹,就得到了明文蛔添。其他分組類似,只是初始化向量換成其前一個分組的密文兜辞。 - 和CBC模式一樣迎瞧,解密的過程支持分布式運算。
風(fēng)險
-
重放攻擊逸吵。CFB模式存在著被重放攻擊的可能性的凶硅。
1、假設(shè)發(fā)送了4個分組扫皱,其中攻擊者保存了后三個分組(分組2足绅、3、4)韩脑。
2氢妈、再假設(shè)又發(fā)送了4個分組,而且加密密鑰不變段多。
3首量、攻擊者將今天的后三個分組用之前保存的分組進(jìn)行替換。
4、接收者接收到了這4個分組之后加缘,進(jìn)行解密操作會得到什么情況呢鸭叙?
4.1 分組2的解密一定會失敗。因為分組2的解密依賴于分組1的密文拣宏,但是由于分組1的密文已經(jīng)變化沈贝,所以分組2必然失敗。
4.2 分組3蚀浆、分組4的解密會成功缀程,成功解密成之前保存的明文。因為分組3的解密依賴于分組2的密文市俊,這個由于已經(jīng)保存杨凑,所以完全沒有變化,加上加密密鑰不變摆昧,自然解密是成功的撩满。同樣的道理也發(fā)生在分組4上。
至此绅你,針對CFB模式的重放攻擊就完成了伺帘。 - 和CBC模式一樣,如果某一個分組的密文存在某個比特的問題忌锯,那么會影響此分組的明文和后一個分組的明文解密伪嫁。
能夠造成重放攻擊的根本原因在于,密文本身作為加密活動的唯一兩個因子偶垮,而攻擊者恰恰能獲取到這兩個因子
OFB模式
概述
- OFB模式和CFB模式相同的地方是张咳,都不是針對明文本身進(jìn)行加密,明文只是作為XOR運算的因子參與進(jìn)來似舵。
- OFB模式和CFB模式最大的區(qū)別在于脚猾,密文不再參與到XOR的運算中來,而僅僅是通過初始化向量產(chǎn)生的數(shù)據(jù)與明文進(jìn)行XOR運算得到密文砚哗。
- 加密流程龙助。
初始化向量進(jìn)行加密得到加密向量1,和分組1的明文進(jìn)行XOR運算蛛芥,得到密文1提鸟;
加密向量1再進(jìn)行加密得到加密向量2,和分組2的明文進(jìn)行XOR運算仅淑,得到密文2.
以此類推称勋。 - 解密流程。向量的運算跟加密一樣漓糙,只是跟密文進(jìn)行XOR得到明文罷了铣缠。
特點
- 生成XOR對象的過程跟明文沒有關(guān)系烘嘱,是直接通過初始化向量得到的昆禽。這可以被稱為是密鑰流蝗蛙。
- CFB模式的那種重放攻擊的風(fēng)險消失了,因為密文沒有參與到XOR運算中來醉鳖。
- 運算更加高效捡硅。在CBC模式和CFB模式中,后面的分組加密是必須等待前面的分組加密完成后才能進(jìn)行盗棵,因為需要等待前一個分組的密文參與運算壮韭。但OFB模式中參與運算的不是前一個分組的密文,而是通過初始化向量得到的密鑰流纹因。所以完全可以提前就準(zhǔn)備好密鑰流喷屋,然后快速進(jìn)行分組加密。也就是說生成密鑰流和XOR遠(yuǎn)算可以并行
- 由于密文不再參與其他分組的加解密過程瞭恰,所以如果一個分組密文的某個比特受損屯曹,則不會再影響到其他分組的明文結(jié)果。
CTR模式
概述
- CTR和OFB的相同點在于惊畏,密文同樣不參與到XOR的運算中來恶耽。
- CTR和OFB的不同點在于,OFB的密鑰流是通過初始化向量的不斷加密得到颜启,而CTR是通過生成計數(shù)器不斷增長+1后加密得到偷俭。
- CTR計數(shù)器,長度是128比特(16字節(jié))缰盏。前8個字節(jié)是叫做nonce的初始值涌萤,這個值每次加密都不相同。后8個字節(jié)則是分組序號乳规,也就是不斷+1得到的值形葬。
- 加密的過程就是生成一個初始的計數(shù)器。假設(shè)有8個分組暮的,就通過初始計數(shù)器不斷+1得到8個計數(shù)器值笙以,然后再加密得到密鑰流。剩下的步驟和OFB一樣冻辩。
特點
- 支持并行計算猖腕。OFB模式中,密鑰流必須由前一個密鑰密文加密得到恨闪,所以只能單線程等待倘感。CTR模式中,計數(shù)器可以通過分組個數(shù)先準(zhǔn)備好咙咽,然后后續(xù)的加密過程是相互獨立的老玛,所以可以支持并行運算。
- 速度最快。支持并行運算自然就加快了速度蜡豹。
- 由于密文不再參與其他分組的加解密過程麸粮,所以如果一個分組密文的某個比特受損,則不會再影響到其他分組的明文結(jié)果镜廉。
分組模式的實際使用
- ECB模式弄诲,這個已經(jīng)禁止使用。
- CBC模式娇唯,推薦使用齐遵。并沒有什么特別的風(fēng)險(從原理上分析,CFB模式被重放攻擊的條件下塔插,其實CBC模式應(yīng)該也會被重放攻擊梗摇,但是不知道為什么書中沒有提到。)想许,但是也不太清楚為什么有了CTR留美,還需要推薦CBC,特別的優(yōu)勢沒看到伸刃。
- CFB模式谎砾,目前不使用,推薦用CTR替代捧颅。這個其實是OFB/CTR 和 CBC之間的一個模式景图。
- OFB模式,和CTR比較起來幾乎是一回事碉哑。OFB有的CTR都有挚币,CTR有的OFB沒有。所以不適用扣典,推薦CTR替代妆毕。
- CTR模式,推薦使用贮尖。