密鑰生成?
- 如何安全地生成密鑰。即如何生成可信任的密鑰,保證用戶得到的密鑰是安全的, 生成密鑰的機器或程序是可信的。
- 如何生成安全的密鑰。安全的密鑰沒有統一準確的定義,但一般來說是指密鑰抗 猜測和抗窮舉等針對密鑰攻擊的能力。涉及密鑰長度和密鑰強弱的問題。
分組加密
- 對稱加密算法按其加密數據的方式一般來說可以分成兩種類型:分組加密和序列加密。
- 分組加密又稱為塊加密,是將要處理的數據分成固定的長度,然后在這固定長度的數據上使用密碼算法進行計算。
- 序列加密模式又稱為流加密方式,是對要處理的數據按位 (或字節)逐個進行加密處理。
注意事項
- 算法加密模式的安全性。雖然加密模式不會對密碼算法本身的安全性產生影響,但是一個差的算法加密模式可能會增加攻擊者攻擊成功的機會,甚至提供機會。例如,如果相同的明文加密后總是產生相同的密文,就很容易被攻擊者利用。
- 算法加密模式的容錯性。加密的數據通常要經過網絡傳輸,網絡傳輸中出現差錯是很可能的,這時候就需要考慮算法的容錯性。有些算法會導致錯誤擴散,其中一位出錯 而導致多位甚至多個字節不能正常解密。
- 算法加密模式的效率。算法加密模式的選擇,對加密效率會有影響,一般來說, 要基本保證加密模式的效率不會比算法本身的效率低過多。
- 算法加密模式的實時性。不同的算法加密模式實時性不同,有的算法可以一邊加密一邊實時傳輸和解密,有些則需要等到一個數據塊全部接收到了才能進行解密。在不同的應用中,對實時性的要求是不一樣的。
常用的分組加密模式有四種,分別是:電子密碼本模式 (ECB)、加密分組鏈接模式 (CBC)、加密反饋模式 (CFB)和輸出反饋模式 (OFB)。下面重點介紹這四種加密模式, 對其他的加密模式僅作簡單的概括。
電子密碼本模式(ECB)
-
電子密碼本模式 (ECB)是最簡單的分組加密模式,也是最能體現 “分組”概念的加 密模式。它將加密的數據分成若干組,每組的大小跟加密密鑰長度相同,然后每組都用相 同的密鑰進行加密。比如 DES算法,使用一個64位的密鑰,如果采用該模式加密,就是 將要加密的數據分成每組64位的數據,如果最后一組不夠64位,那么就補齊為64位, 然后每組數據都采用DES算法的64位密鑰進行加密 。 如圖所示是電子密碼本模式的加密和解密的流程圖,圖中P0、P1是明文分組,C0、C1是相應的密文分組。
- 比如對“My name is DragonKing”這句話,就可以8個字符(64位)為一分組,形成圖所示的這樣的分組,最后一個分組不足8個字符,可以采用其他數據填充補齊。
- 電子密碼本加密模式的每個分組的加密是相互獨立的,相互之間沒有關系,可以不必按順序進行,各分組也可以并行進行加密和解密。這在某些應用方式下是非常有用的,比 如數據庫加密。如果使用電子密碼本模式對數據庫中的每個記錄進行加密,那么數據庫的 存取就會非常方便,每個記錄都可以獨立進行加密和解密的存取、添加或者刪除等操作, 而且可以進行并行的處理以提高速度。
- 電子密碼本模式加密的數據,如果密文數據出錯了,解密的時候會影響整個明文分組,可能導致整個明文分組不能正確地解密,但是不會影響其他明文分組。電子密碼本模式對密文數據的增減是十分敏感的,如果密文數據中插入或丟失了一位數據,那么隨后的整個密文序列都將不能正確地解密,這稱為同步錯誤。所以,使用電子密碼本模式的時候,必須確保密文分組的完整性。
- 采用電子密碼本模式加密,相同的明文采用相同的密鑰加密總是得到相同的密文,對于加密大量數據的密鑰來說,這非常容易受到攻擊。大量信息的情況下會有很多數據重復,那么如果攻擊者知道了一段明文對應的密文,無論那段密文在哪兒出現,他都能解密該密文。更加嚴重的是,如果電子密碼本模式加密的是一種有固定結構的信息,那么攻擊者甚至可以不通過破譯密鑰就能達到自己的目的。
電子密碼本模式(ECB)的特點
- ?每次加密的數據長度固定。
- 各個分組相互獨立,可以并行加密和解密。
- 相同的明文使用相同的密鑰總是產生相同的密文。
- 一個位的錯誤只對所在的明文塊產生影響,但是增加或刪除一個位會導致其后整個密文序列沒有辦法正確解密。
加密分組鏈接模式(CBC)
- 加密分組鏈接模式 (CBC)可以解決電子密碼本模式(ECB)容易受到分組替換攻擊的問題。
- 加密分組鏈接模式首先也是將明文分成固定長度的分組,然后將前面一個加密分組輸出的密文與下一個要加密的明文分組進行異或操作計算,將計算結果再用密鑰進行加密得到密文。第一明文分組加密的時候,因為前面沒有加密的密文,所以需要一個初始化向量 (IV)。跟電子密碼本模式不一樣,通過鏈接關系,使得密文跟明文不再是一一 對應的關系,破解起來更困難,而且克服了只要簡單調換密文分組就可能達到目的的攻擊。加密分組鏈接模式的流程如圖所示,其中P0、P1是明文分組,C0、C1是密文分組,IV 是初始向量。
- 加密分組鏈接模式的過程用數學公式表示如下:?
- 使用不同的初始向量,相同的明文使用相同的密鑰會產生完全不同的密文,這使得攻擊者對密文的分析更加困難;而使用相同的初始化向量,相同的明文使用相同 的密鑰還是會產生相同的密文,這是我們不愿意看到的結果,所以一般應該避免重復 利用初始向量。?
- 初始向量在加密分組鏈接模式中沒有任何保密價值,因為除第一個分組外,加密分組鏈接中其他分組用來跟明文進行異或的數據都是前面輸出的密文分組,而這個密文分組顯 然是可以在網絡上簡單獲取的,所以,即便你對初始向量進行保密,也僅僅對第一個分組 有一點點意義,而對其他大部分分組來說沒有任何意義。
加密分組鏈接模式的缺點之一是會造成錯誤擴散。對于明文錯誤來說,性質并不是很嚴重,因為經過加密和解密來說恢復的明文還只是發送錯誤的地方有錯誤,不會擴散到別的地方。而且,明文發生錯誤的可能性較小。 密文發生錯誤的可能性更大,因為密文要經過有許多不可確定因素的網絡的傳播。 - 在加密分組鏈接模式中,如果密文有一位發生了錯誤,那么其后的一個分組中相應的位會發生錯誤,該分組的明文不能恢復,但是錯誤分組的第二個分組之后的分組不會受這個錯誤 的影響,這稱為加密分組鏈接模式的自恢復功能。
- 跟電子密碼本模式一樣,加密分組鏈接模式也不能恢復同步錯誤。也就是說,如果密文中增加或刪除了一位,那么該位以后的所有密文的解密都將難以得到正確的明文結果。 所以使用加密分組鏈接和電子密碼本模式都需要確保分組鏈接的完整性。
- 加密分組鏈接模式雖然對抵抗分組重復攻擊和分組替換攻擊有效,但是很容易受到干擾性的攻擊。比如攻擊者可以在密文之后附加一些信息,而接收者沒有辦法發現這是附加 的信息,雖然可能是亂碼,但有時候可能導致其他重大的安全問題。攻擊者還可以利用加 密分組鏈接錯誤擴散的特點進行破壞性的攻擊,比如通過改變一個分組的一位從而控制下 面一個分組相應位的變化,甚至通過刪除或增加一位密文數據從而使得明文無法恢復,等 等。此外,如果使用相同的初始化變量和加密密鑰加密的信息數據量太大,一樣會給攻擊 者提供大量的信息,這也是需要注意的。
加密分組鏈接(CBC)模式特點
- 每次加密的數據長度固定。
- 當相同的明文使用相同的密鑰和初始向量的時候 CBC模式總是產生相同的密文。
- 鏈接操作使得密文分組要依賴當前和以前處理過的明文分組,密文分組順序不能進行重新排列,也不能進行并行操作。
- 可以使用不同的初始化向量來避免相同的明文產生相同的密文,能一定程度上抵抗字典攻擊等密文分析。
- 一位發生錯誤后,會對當前及后一個分組的明文產生錯誤。增加或刪除一個位會導致其后整個密文序列沒有辦法正確解密。
- 不能實時解密,必須等到8個字節都接收到之后才能開始解密,否則得不到正確的結果。
加密反饋模式(CFB)
- 在加密分組鏈接模式下,必須等整個分組的數據接收完之后才能進行解密,不能實時解密,這在很多網絡應用中是不適合的。加密反饋模式 (CFB)正是了為了適應這種要求作的改進。
- 加密反饋模式通過引入移位寄存器來克服加密分組鏈接模式不能實時解密的困難。如圖所示是帶64位移位寄存器的加密反饋模式的加密和解密流程圖 。 圖 中 C2 、 C3 及 P10等都是一個字節 (8位)的數據,所以能夠實現字符的實時加密和解密,不用再等到8個 字節都接收到之后再進行解密。圖中是在進行第10個字節數據的加密和解密過程,在該過程中,先從移位寄存器取8個字節的數據 (C2到C9)用密鑰進行加密,然后取加密數 據最左邊的一個字節跟輸入的明文 P10進行異或操作,得到的值作為輸出密文 C10,同時 將 C10送入到移位寄存器中。
- 跟加密分組鏈接模式一樣,加密反饋模式的密文也跟以前所有的明文有關系,具有相關聯的關系。在剛開始的時候,移位寄存器也要使用初始向量填充。初始向量同樣沒有必 要保密,其原因跟加密分組鏈接模式是一樣的。對不同的消息,初始向量應更換,以保證 在使用相同的密鑰加密信息的時候不會產生重復的密文,比如可以使用不斷增大的索引號 碼作為初始向量。
- 加密反饋模式同樣存在錯誤擴散的問題。明文錯誤不會有太大的影響,如果明文其中 一位出錯了,解密后它也只會影響明文錯誤的那一位。
- 但是密文錯誤影響就會嚴重得多。在如圖所示的加密反饋模式中,如果密文中有 一位發生了錯誤,那么當前字節的密文及隨后8個字節的密文的解密都會受到影響,可能 會導致無法正確解密。因為在這9個字節的解密計算都使用到了該錯誤的密文。但是在這9個字節之后,密文就能自動恢復到正常解密的狀態。 對于同步錯誤,加密反饋模式同樣具有自恢復的功能,如果密文數據中增加或刪除一位,在這一位進入到寄存器的時候,會影響其所在的8個字節,然后移出寄存器,密文就 恢復了正確解密。
- 基于加密反饋模式的錯誤擴散性能,攻擊者一樣可以通過更改密文某些位使得密文解 密成另外一些消息。
加密反饋模式(CFB)特點
- 每次加密的數據不超過64位。
- 當使用相同的密鑰和初始向量的時候,相同明文使用 CFB模式加密輸出相同的密文。
- 鏈接操作的方法使得密文數據依賴當前和以前所有的數據,所以數據都應該按順序組織在一起,不能進行并行計算操作。
- 可以使用不同的初始變量使相同的明文產生不同的密文,防止字典攻擊等密文分析行為。
- CFB模式的強度依賴于密鑰的長度,強度最大的情況是每次加密的數據長度和密鑰長度相同的情況。
- 當每次加密的數據長度的取值比較小的時候,相同的明文一般需要更多的循環來完成加密,這可能會導致過大的開銷。
- 每次加密數據的位數應該為8的整數倍。
- 一旦某位數據出錯,會影響到目前和其后一些字節的加密數據的正確解密,但是對同步錯誤具有自恢復功能。
- 數據可以實時傳輸,每接收到一位都可以隨即進行解密。
?輸出反饋模式(OFB)
- 輸出反饋模式也需要使用初始向量對寄存器進行初始化,初始化向量也不需要保密。
- 輸出反饋模式不存在錯誤擴散的問題,如果密文的一位發生了錯誤,那么只會影響其對應明文的一個位,而不會影響別的位。對于同步錯誤,輸出反饋模式沒有自恢 復功能,所以一旦增加或刪除了密文的一位,該位后面的所有密文都將不能正確 解密。
- 輸出反饋模式的密文與前后數據的相關性小,所以安全性相對于加密分組鏈接模式和 加密反饋模式比較弱。輸出反饋模式使用密文序列跟明文異或產生明文,而密文序列由密 鑰本身產生,這肯定具有周期性,在使用相同密鑰加密的數據到達一定數量時,會產生重 復,這就會大大降低算法的安全性。
特點
- 每次加密的數據不超過64位。
- 當使用相同的密鑰和初始向量的時候,相同明文使用 OFB模式加密輸出相同的密文。要注意的是,在 OFB模式下相同的密鑰和初始向量產生相同的密鑰流,所以,為了 安全原因,一個特定的初始向量對一個給定的密鑰應該只使用一次。
- 因為沒有使用鏈接操作,數據相關性小,所以使得 OFB模式更容易受到攻擊。
- 可以使用不同的初始變量產生不同的密鑰流,從而使得相同的明文使用不同密鑰 產生不同的密文。
- 當每次加密的數據長度取值比較小的時候,相同的明文一般需要更多的循環來完 成加密,這可能會導致過大的開銷。
- 每次加密數據的位數應該為8的整數倍。 OFB模式不會進行錯誤傳播,某位密文發生錯誤,只會影響該位對應的明文,而不會影響別的位。 OFB模式不是自同步的,如果加密和解密兩個操作失去同步,那么系統需要重新初始化。
- 每次重新同步的時候,應該使用不同的初始向量。這樣可以避免產生相同的密文,從而避免 “已知明文”攻擊。
- 在OFB模式中,XOR所需要的比特序列(密鑰流)可以事先通過密碼算法生成,和明文分組無關。只要提前準備好所需的密鑰流,則在實際從明文生成密文的過程中,就完全不需要動用密碼算法了。只要將明文與密鑰流進行XOR就可以了。和AES等密碼算法相比,XOR運算的速度是非常快的。這就意味著只要提前準備好密鑰流就可以快速完成加密。換個角度來看,生成密鑰流的操作和進行XOR運算的操作是可以并行的。?
三重分組加密模式
-
上述三種方式的安全性限定于分組長度,比如 DES算法,密鑰長度一般來說就是64位,容易受到窮舉 攻擊
-
OpenSSL常用的有三重電子密碼本模式 (3ECB)和三重加密分組鏈接模式 (3CBC)。
-
三重分組加密模式使用了不止一個密鑰,對明文分組進行了基于基本分組加密模式的 加密、解密和加密操作。目前來說,有兩種應用方式:一種是使用兩個密鑰,即第一個密 鑰和第三個密鑰相同;還有一種就是使用三個不同的密鑰。圖38所示是使用兩個密鑰的 三重分組加密模式的加密和解密流程圖;圖39所示是使用了三個不同密鑰的三重分組加 密模式的加密和解密流程圖。
三重加密分組模式特點
- 加密過程為使用 K1加密,然后使用 K2解密,最后使用 K3加密完成加密過程。 加密過程使用了電子密碼本模式、加密分組鏈接模式等其他基本分組加密模式,
- 但是密鑰增加到了168位,雖然目前理論上可以使得有效密鑰長度降到112位,相對于 56位的密鑰來說,安全性還是得到了很大的提高。
- 如果前兩個密鑰是相同的,那么就相當于使用一個密鑰加密了一次。
- 如果第一個和第三個密鑰是相同的,那么密鑰長度事實上是112位,有些攻擊方法可以使得有效密鑰的長度降為比56位稍多的長度,但需要很大的內存空間。 如果三個密鑰都是相同的,那么就跟普通的分組加密模式效果相同了。
- 三重分組加密模式的基本特點跟其使用的基本分組加密模式特點基本一致。
其他分組加密模式
計數器模式:
-
在輸出反饋模式中,移位寄存器的輸入是從加密輸出分組中最左端的值取出的。計數 器模式跟這種模式不同的是移位寄存器的輸出是一個計數器,每一個分組完成加密后,計數器要增加某一個常數。計數器模式跟輸出反饋模式一樣沒有錯誤擴散的特點,但是也同 樣沒有同步錯誤恢復功能。
分組鏈接模式
-
分組鏈接模式將分組密碼算法的輸入與前面所有密文分組的異或值相異或。分組鏈接模式也需要一個初始向量,具有密文錯誤擴散的性質。
其他
- 還有很多其他的分組加密模式,比如擴散密碼分組鏈接模式、帶校驗和的密碼分組鏈 接,等等,其基本原理跟前面介紹的分組加密模式相似
參考鏈接:
- 分組密碼的加密模式(CFB,OFB)_lkw23333的博客-CSDN博客
- 加密算法分組4-OFB 輸出反饋模式 – OKWEEX