密碼學專題 密鑰生成|分組加密的模式 ECB|CBC|CFB|OFB

密鑰生成?

  • 如何安全地生成密鑰。即如何生成可信任的密鑰,保證用戶得到的密鑰是安全的, 生成密鑰的機器或程序是可信的。
  • 如何生成安全的密鑰。安全的密鑰沒有統一準確的定義,但一般來說是指密鑰抗 猜測和抗窮舉等針對密鑰攻擊的能力。涉及密鑰長度和密鑰強弱的問題。

分組加密

  • 對稱加密算法按其加密數據的方式一般來說可以分成兩種類型:分組加密和序列加密。
  • 分組加密又稱為塊加密,是將要處理的數據分成固定的長度,然后在這固定長度的數據上使用密碼算法進行計算。
  • 序列加密模式又稱為流加密方式,是對要處理的數據按位 (或字節)逐個進行加密處理。

注意事項

  • 算法加密模式的安全性。雖然加密模式不會對密碼算法本身的安全性產生影響,但是一個差的算法加密模式可能會增加攻擊者攻擊成功的機會,甚至提供機會。例如,如果相同的明文加密后總是產生相同的密文,就很容易被攻擊者利用。
  • 算法加密模式的容錯性。加密的數據通常要經過網絡傳輸,網絡傳輸中出現差錯是很可能的,這時候就需要考慮算法的容錯性。有些算法會導致錯誤擴散,其中一位出錯 而導致多位甚至多個字節不能正常解密。
  • 算法加密模式的效率。算法加密模式的選擇,對加密效率會有影響,一般來說, 要基本保證加密模式的效率不會比算法本身的效率低過多。
  • 算法加密模式的實時性。不同的算法加密模式實時性不同,有的算法可以一邊加密一邊實時傳輸和解密,有些則需要等到一個數據塊全部接收到了才能進行解密。在不同的應用中,對實時性的要求是不一樣的。

常用的分組加密模式有四種,分別是:電子密碼本模式 (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

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/446336.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/446336.shtml
英文地址,請注明出處:http://en.pswp.cn/news/446336.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

java 狗的年齡轉換為對應的人的年齡

題目 我家的狗5歲了,5歲的狗相當于人類多大呢? 其實,狗的前兩年每 一年相當于人類的10.5歲,之后每增加一年就增加四歲。 那么5歲的狗相當于人類多少年齡呢?應該是:10.5 10.5 4 4 4 33歲。 編寫一個程序…

excel高級篩選怎么用_Excel表格中高級篩選的優點以及常用方法介紹

在Excel表格中普通的數據篩選只能滿足一些基本的篩選要求,這篇文章為朋友們總結一下高級篩選的優點以及常用方法。一.與普通篩選相比,高級篩選可以使用比較運算符。在下圖中要篩選性別為男并且評分大于90的人員。如果使用普通篩選需要一個個的勾選成績大…

STL源碼剖析 第二次溫習 細節審核

臨時對象的產生 臨時對象也叫做 無名對象,(使用pass by value的方式會引發copy的操作,于是產生一個臨時的對象),造成效率的負擔,但是可以可以制造一些臨時對象在型別的后面 直接加上() 并可以指定初始數值,相當于調用…

java 彩票游戲

題目 Math.random()獲取隨機數 Math.random()返回的是一個[0.0,1.0)的doule類型的數 所以,獲取0-9:(int)Math.random()*10–> [0,10) 獲取0-10:(int)Math.random()*101–> [0,11) 獲取10-99:(int)Math.random()9010–> […

python異常處理_Python入門 斷言與異常處理

一、斷言斷言,可以理解為判斷是否斷開的預言。assert 表達式 , 描述表達式為我們的預期結果,當表達式的結果為False時,拋出 AssertionError 異常,如無異常捕獲程序遇到異常時直接結束運行。反之,表達式結果為True 程序…

C++ 左值和右值 的學習

引用是一個變量,它引用其他變量的內存位置 int x 34; int &lRef x; 標識符 IRef 就是一個引用。在聲明中,引用是通過 & 來指示的,出現在類型與變量的標識符之間,這種類型的引用稱為左值引用左值看作是一個關聯了名稱的…

百度關鍵詞排名查詢源碼_章丘百度霸屏總部,關鍵詞排名騰沃云

上海保沃騰沃云為您詳細解讀URiIr章丘百度霸屏總部的相關知識與詳情,做網站SEO優化文章內容優化效果已經十分明顯。內容的量量關于網站的整體量量很重要。通過關鍵字闡發,陳某們曉得需要環繞關鍵字編寫網頁。使您的內容的重要根底是您對網頁籌算描述的賣…

java 結婚問題

題目 大家都知道,男大當婚,女大當嫁。那么女方家長要嫁女兒,當然要提出 一定的條件:高:180cm以上;富:財富1千萬以上;帥:是。 如果這三個條件同時滿足,則&…

密碼學專題 數據填充的方式|序列加密的方式

電子密碼本模式和加密分組鏈接模式的分組算法都要求加密輸入的分組是固定長度 的,但是大多數輸入明文可能都不是分組長度的整數倍,也就是說,最后一個分組一般來 說是不足一個分組長度的。為了使分組加密算法能夠正常工作,通常使用…

win10此電腦不見了_教程 | win10總提示“你要允許此應用對電腦的修改嗎”,如何關閉?...

在使用電腦的時候,你是否曾遇到過這樣的情況,點擊打開軟件的時候,系統總是提示我們“你要允許此應用對你的設備進行修改嗎?”難道是軟件中病毒了嗎?,這其實上并沒有什么用處,只是系統無法判斷軟…

java 小時轉換為xx天xx小時

題目 為抵抗洪水,戰士連續作戰89小時,編程計算共多少天零多少小時? 代碼 使用/與% class ExchangeTime {public static void main(String[] args) {/*為抵抗洪水,戰士連續作戰89小時,編程計算共多少天零多少小時&a…

密碼學專題 加密模式的選擇|傳輸數據加密

分組加密模式和序列加密模式。它們之間最大的區 別在于分組加密模式每次對一組數據進行加密運算處理,而序列加密模式則逐位對數據進 行加密運算處理。事實上,在實際設計應用的算法中,并沒有那么嚴格的區別,它們有可能是相互結合的…

微信公眾號數據2019_2019年9月原創公眾號排行榜數據報告出爐

西瓜數據發布 2019 年 9 月原創公眾號排行榜,分別從西瓜指數、原創文章占比、周期內公眾號發文次數、發文篇數、總閱讀數、頭條平均閱讀數等方面展示公眾號數據。榜單說明1、涉及榜單本期月榜截取 ①財經、②教育、③娛樂、④科技、⑤體育、⑥游戲、⑦文化、⑧美食、…

java 求100天之后是周幾

題目 今天是周二,100天以后是周幾? 代碼 代碼1:減去天數,使循環從周一開始 //方法1:減去天數,使循環從周一開始int today2;//7天一個循環:3 4 5 6 7 1 2 3 4 5 6 7int after100;//(100-5)%…

密碼學專題 OpenSSL專題

OpenSSL總體架構 軟件包分為三個主要的功能部分:密碼算法庫 、 SSL協議庫及應用程序 MacOS,MS,OS/2及 VMS這幾個目錄,包含了在不同的 平臺編譯時的環境變量配置文件,在安裝編譯完成之后,這幾個目錄就沒有作…

java 華氏溫度轉換為攝氏溫度

題目 小明要到美國旅游,可是那里的溫度是以華氏度為單位記錄的。 它需要一個程序將華氏溫度(80度)轉換為攝氏度,并以華氏度和攝氏度為單位分別顯示該溫度。 公式:華氏溫度(攝氏溫度-32)/1.8 M…

hs控什么意思_凡爾賽文學 到底是什么?

點擊藍字關注我們XIE XIE NI DE XI HUAN|| 動漫 情頭 耽美 閨蜜 男女頭 句子控 壁紙 ||左句 凡爾賽文學野象:老是有人提知不知道凡爾賽文學,說實話我不太清楚網絡時下流行的梗,也沒有興趣參與,我還是比較喜歡歐洲古典文學和后現…

密碼學專題 openssl編譯和安裝

Configure 腳本文件 使得OpenSSL可以適應多種不同的系統平臺和多達幾十種不同的編譯器。Configure指令還可以使OpenSSL在編譯的時候具備組件的選擇功能,比如可以選擇支持或者不支持某種算法或者協議等,這使得OpenSSL具有很大的靈活性,比如在…

Python學習12 文件的讀寫

目標 文件的打開和關閉 mode缺省情況下表示只讀r 文件的路徑 前面加個r’,代表其中的轉義字符不起作用 文件的打開方式 案例:實現文件拷貝的功能 將某一文件夾下的某一文件 保存在當前文件 所在目錄。 import os #讀取文件1 path./file.txt fileopen(path,…

密碼學專題 openssl的基本概念

配置文件 配置文件是OpenSSL的一個基礎結構組件,OpenSSL使用一組稱為OpenSSLCONF的函數來讀取OpenSSL配置文件的信息。OpenSSL提供的主配置文件是opensl.cnf,它集成了OpenSSL所要使用的配置文件選項的大部分內容。此外,OpenSSL還提供了其他一…