目錄
一、什么是CBC模式?
二、初始化向量
三、異或運算?
四、密鑰少一位會有影響嗎?
一、什么是CBC模式?
CBC模式中,明文分組在加密前,要與前一組的密文分組進行異或運算,異或運算的結(jié)果參與加密函數(shù)的運算。
每一個密文分組,都依賴于前面所有的明文分組,包括初始化向量。
?
?文章來源地址http://www.zghlxwxcb.cn/news/detail-492680.html
加密過程中:加密函數(shù)的輸入數(shù)據(jù)是明文分組和上一次密文分組異或運算的結(jié)果。
解密過程中:解密函數(shù)的輸入數(shù)據(jù)是密文分組,得到的結(jié)果是明文分組和上一次密文分組異或運算的結(jié)果,因此,要得到明文分組,還要將他們分離開來。?
加密過程的初始化向量和解密過程的初始化向量必須一樣,否則無法得到第一個明文分組。初始化向量只影響第一個明文分組,并不影響后續(xù)的解密過程和明文分組。
加密分組只影響它的下一個明文分組,并不影響后續(xù)的解密過程和明文分組。
而在加密過程中,每一個密文分組,都依賴于前面所有的明文分組,包括初始化向量。?
?
二、初始化向量
如果每一次運算,初始化向量都不能重復(fù),即使是相同的明文數(shù)據(jù),它的加密結(jié)果也是不同的。但是,如果初始化向量重復(fù)使用,相同的明文就會有相同的密文。重復(fù)使用的初始化向量,會消解密文反饋的作用,使得CBC模式和ECB模式一樣脆弱。
所以,初始化向量的唯一性在加密算法中的安全性至關(guān)重要。
初始化向量不需要保密。
三、異或運算?
異或運算在密碼學(xué)中應(yīng)用廣泛,為什么?
第一個原因:異或運算數(shù)據(jù)只與數(shù)據(jù)的位數(shù)有關(guān),與數(shù)值無關(guān),因此無法通過運算時間和數(shù)值的的關(guān)聯(lián)來破解密碼。
第二個原因:在相同的計算環(huán)境下,異或運算的復(fù)雜度,只與數(shù)據(jù)的位數(shù)相關(guān)。因而無法通過CPU的占用、電力消耗或內(nèi)存消耗,來破解密碼。
第三個原因:相同的數(shù)據(jù)歸0,不同的數(shù)據(jù)歸
歸零律:如果兩段數(shù)據(jù)完全相同,它們的異或運算結(jié)果,就是每一位都是零的數(shù)據(jù);
恒等律:如果一段數(shù)據(jù)和一段全足零的數(shù)據(jù)進行異或運算,前一段數(shù)據(jù)中是要的位運算后還是零,是一的位運算后還是一。也就是說,和零進行異或運算,不改變原數(shù)據(jù)的數(shù)值。正是異或運算的歸零律和恒等律,CBC模式才能成立,解密才能進行。這兩個性質(zhì),還使得解密運算和加密運算具有相同的運算效率。
然而,CBC模式的主要安全問題,也來源于異或運算的這兩個性質(zhì)。
如果兩段數(shù)據(jù)中只有一位不同,它們的異或運算結(jié)果,就是只有這一位的數(shù)據(jù)是一,其他的數(shù)據(jù)都是零。那是不是我們就可以通過構(gòu)造明文分組或者密文分組,一次改變一位數(shù)據(jù),然后把數(shù)據(jù)交給加密運算或者解密運算來處理,通過觀察加密或者解密的結(jié)果展開攻擊了?
比如說,一個128位的密鑰,它的強度能承受2^128次的運算,是一個強度的指數(shù)級別的量級。
一次改變一個字節(jié)的意思就是攻擊的時候,需要一個字節(jié)一個字節(jié)的嘗試。256表示,一個字節(jié)有8位,如果每次改變這個字節(jié)的一位,需要256次,才能把這個字節(jié)所有的可能數(shù)值列舉完。4080表示攻擊一個數(shù)據(jù)分組需要的計算量,一個字節(jié)需要256次,由于嘗試了255種可能性后,最后一種可能性就不需要再嘗試了,所以不是256,是最多需要255次嘗試。一個數(shù)據(jù)分組16個字節(jié),255乘以16,就是需要的計算次數(shù)。
?阻斷一個攻擊的方式之一,就是破壞攻擊依賴的路徑或者條件。對于上面的攻擊方式,其實只要攻擊者沒有辦法一次改變一位數(shù)據(jù)或者少量的數(shù)據(jù),這樣的攻擊就可以被有效破解了。
也就是要保證攻擊者在展開攻擊的時候,沒有辦法一次改變不少于一個數(shù)據(jù)分組的數(shù)據(jù)。對于AES來說,數(shù)據(jù)分組大小是128位,攻擊者需要運算2^128次,才可以攻擊得逞。
57
計算量這么大,攻擊者的攻擊方式就無效了。那我們怎么做才能讓攻擊者沒辦法呢?
密文分組、密鑰、加密算法、解密算法,這些都是固定的數(shù)據(jù)或算法,沒有考量的空間。剩下的變量,就只有明文分組和初始化向量了。要想解決掉這個安全問題,該怎么控制明文分組和初始化向量?異或運算又是怎樣帶來麻煩的?
四、密鑰少一位會有影響嗎?
在分組運算中,初始化向量、密文分組和明文分組密鑰的數(shù)據(jù)位數(shù)也都是固定的。所以,我們也不需要擔(dān)心它們的位數(shù)的變化。加密算法和解密算法不涉及數(shù)據(jù)位數(shù),所以我們也不擔(dān)心算法。剩下的一個變量,就是密鑰了。密鑰的位數(shù)會變化嗎?密鑰的位數(shù)變化有影響嗎?
出于互操作性的考慮,很多標(biāo)準(zhǔn)和協(xié)議(包括應(yīng)用最廣泛的TLS 1.2協(xié)議)需要把密鑰的高位的零清除掉,然后再參與運算。
原來128位的密鑰,可能就被清除成了127位或者126位的密鑰了。2018年發(fā)布的的TLS 1.3版本,不再需要清除密鑰高位的零。少一位密碼,當(dāng)然會帶來計算性能的差異,以及由此引發(fā)的計算時間偏差。
“浣熊攻擊”可以利用密鑰高位清零的造成的計算時間差,通過觀察,測算運算時間,運用統(tǒng)計學(xué)的技術(shù)破解運算密鑰。因此,我們要量避免計算時間偏差和計算算力偏差,謹(jǐn)慎地處理不可避免的計算時間偏差和算力偏差。文章來源:http://www.zghlxwxcb.cn/news/detail-492680.html
?
到了這里,關(guān)于怎么防止數(shù)據(jù)重放攻擊——CBC模式【密碼學(xué)】(7)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!