上期講了ssl握手流程與非對(duì)稱加密毁菱,這期繼續(xù)上期的話題講一下對(duì)稱加密以及模式哭靖。
1.什么是對(duì)稱加密瑰谜?
采用單鑰密碼系統(tǒng)的加密方法欺冀,同一個(gè)密鑰可以同時(shí)用作信息的加密和解密,這種加密方法稱為對(duì)稱加密萨脑。
它的優(yōu)點(diǎn):
1.安全強(qiáng)度高
2.計(jì)算量小
3.加解密速度快效率高
如圖:
從圖中我們可以看到,在相同安全強(qiáng)度的情況下,對(duì)稱加密80位長(zhǎng)度 = RSA加密1024位長(zhǎng)度 = EC橢圓曲
線算法加密160位長(zhǎng)度脚猾。秘鑰長(zhǎng)度越長(zhǎng)計(jì)算量越大體積也越大。由此可見在性能方面對(duì)稱加密是性能最優(yōu)的砚哗。
所以這也是為什么在建立連接之后我們更傾向于使用對(duì)稱加密的方式進(jìn)行數(shù)據(jù)加密的原因龙助。
2.對(duì)稱加密模式
對(duì)稱加密主要是有6種常見的模式:
1.ECB模式 電子密碼本模式
2.CBC模式 密文分組鏈接模式
3.CFB模式 密文反饋模式
4.OFB模式 輸出反饋模式
5.CTR模式 計(jì)數(shù)器模式
6.AEAD模式 關(guān)聯(lián)數(shù)據(jù)的認(rèn)證加密模式
這里我們不討論算法也不討論實(shí)現(xiàn)方式。
拿出3個(gè)重點(diǎn) ECB CBC AEAD
如圖:(來自維基百科)
將一個(gè)明文信息 拆分成若干個(gè)小塊蛛芥,然后分別進(jìn)行加密提鸟。然后并行傳輸。對(duì)端在分別對(duì)塊進(jìn)行解密后拼裝
成一個(gè)完整的信息仅淑。
優(yōu)點(diǎn)顯而易見 通俗易懂,簡(jiǎn)單方便,速度快
缺點(diǎn)也顯而易見 可以對(duì)密文塊替換刪除添加從而篡改明文塊的相關(guān)數(shù)據(jù)称勋,同樣的明文塊會(huì)被加密成相同的
密文塊這樣不能很好的隱藏?cái)?shù)據(jù)模式也無法抵御重放攻擊。
那怎么辦呢涯竟? CBC模式登場(chǎng)
在CBC模式中赡鲜,每個(gè)明文塊先與前一個(gè)密文塊進(jìn)行異或運(yùn)算后再進(jìn)行加密。在這種方法中庐船,每個(gè)密文塊都依賴于它
前面的所有明文塊银酬。同時(shí),為了保證每條消息的唯一性筐钟,在第一個(gè)塊中需要使用初始化向量揩瞪。
這樣看上去是不是比ECB模式更好呢?但是這樣就不能并行計(jì)算效率大打折扣篓冲。而且也并沒有很安全李破。為什么宠哄?
在這種模式下需要在加載前確保每個(gè)塊的長(zhǎng)度都是總長(zhǎng)度的整數(shù)倍。一般情況下嗤攻,明文的最后一個(gè)塊很有可能會(huì)
出現(xiàn)長(zhǎng)度不足總長(zhǎng)度的現(xiàn)象毛嫉。這個(gè)時(shí)候,普遍的做法是在最后一個(gè)分組后填充一個(gè)固定的值妇菱。而攻擊者可以根據(jù)
這個(gè)原理進(jìn)行相應(yīng)的填充攻擊承粤。想了解具體內(nèi)容可以閱讀LittleHann大神的文章
那怎么辦?
或許可以嘗試下AEAD(認(rèn)證加密方法)
它同時(shí)對(duì)數(shù)據(jù)提供機(jī)密性恶耽,完整性和真實(shí)性保證。
AEAD 3種方式(來自維基百科):
Encrypt-then-MAC(EtM)
明文首先被加密颜启,然后基于生成的密文生成MAC偷俭。密文和MAC一起發(fā)送。
Encrypt-and-MAC(E&M)
基于明文生成MAC缰盏,明文加密涌萤,無MAC。明文的MAC和密文一起發(fā)送口猜。
MAC-then-Encrypt(MtE)
基于明文生成MAC负溪,然后明文和MAC一起被加密以產(chǎn)生基于兩者的密文。發(fā)送密文(包含加密MAC)
注: MAC(消息摘要算法用于數(shù)據(jù)完整性校驗(yàn))
AEAD是目前相對(duì)于其他模式而言比較好的選擇济炎。