分组密码简介和五大分组模式
                                                            生活随笔
收集整理的這篇文章主要介紹了
                                分组密码简介和五大分组模式
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.                        
                                分組密碼
分組密碼(blockcipher)是每次只能處理特定長度的一塊數據的一類密碼算法,這里的一塊"就稱為分組(block)。此外,一個分組的比特數就稱為分組長度(blocklength)。例如,SM4的分組長度是128比特。這些密碼算法一次只能加密128比特的明文.并生成128比特的密文。模式
分組密碼算法只能加密固定長度的分組,但是我們需要加密的明文長度可能會超過分組密碼的分組長度,這時就需要對分組密碼算法進行迭代,以便將一段很長的明文全部加密。而迭代的方法就稱為分組密碼的模式(mode),分組密碼的主要模式有以下5種:ECB模式:Electronic Code Book mode(電子密碼本模式:不推薦) CBC模式:Cipher Block Chaining mode(密碼分組鏈接模式) CFB模式:Cipher FeedBack mode(密文反饋模式) OFB模式:Output FeedBack mode(輸出反饋模式) CTR模式:CounTeR mode(計數器模式)ECB 模式
ECB(Electronic Code Book, 電子密碼本)模式是最簡單的加密模式,明文消息被分成固定大小的塊(分組),并且每個塊被單獨加密。 每個塊的加密和解密都是獨立的,且使用相同的方法進行加密,所以可以進行并行計算,但是這種方法一旦有一個塊被破解,使用相同的方法可以解密所有的明文數據,安全性比較差。 K:密鑰; C:密文; P:明文適用于數據較少的情形,加密前需要把明文數據填充到塊大小的整倍數。 使用ECB模式加密時,相同的明文分組會被轉換為相同的密文分組,也就是說,我們可以將其理解為是一個巨大的“明文分組-->密文分組"的對應表,因此ECB模式也稱為電子密碼本模式當最后一個明文分組的內容小于分組長度時,需要用一特定的數據進行填充(padding),讓值一個分組長度等于分組長度。ECB模式是所有模式中最簡單的一種。ECB模式中,明文分組與密文分組是一一對應的關系,因此,如果明文中存在多個相同的明文分組,則這些明文分組最終都將被轉換為相同的密文分組。這樣一來,只要觀察一下密文,就可以知道明文中存在怎樣的重復組合,并可以以此為線索來破譯密碼,因此ECB模式是存在一定風險的。CBC模式
CBC(Cipher Block Chaining, 密碼塊鏈)模式中每一個分組要先和前一個分組加密后的數據進行XOR異或操作,然后再進行加密。 這樣每個密文塊依賴該塊之前的所有明文塊,為了保持每條消息都具有唯一性,第一個數據塊進行加密之前需要用初始化向量IV進行異或操作。 IV:初始化向量; K:密鑰; C:密文; P:明文CBC模式是一種最常用的加密模式,它主要缺點是加密是連續的,不能并行處理,并且與ECB一樣消息塊必須填充到塊大小的整倍數。 如果將一個分組的加密過程分離出來,我們就可以很容易地比較出ECB模式和CBC模式的區別 。ECB模式只進行了加密,而CBC模式則在加密之前進行了一次XOR。-  初始化向量 當加密第一個明文分組時,由于不存在“前一個密文分組",因此需要事先準備一個長度為一個分組的比特序列來代替“前一個密文分組",這個比特序列稱為初始化向量(initialization vector)通常縮寫為 IV 一般來說,每次加密時都會隨機產生一個不同的比特序列來作為初始化向量。明文分組在加密之前一定會與“前一個密文分組"進行 XOR 運算,因此即便明文分組1和2的值是相等的,密文分組1和2的值也不一定是相等的。這樣一來,ECB模式的缺陷在CBC模式中就不存在了。
CFB 模式
CFB模式的全稱是Cipher FeedBack模式(密文反饋模式)。在CFB模式中,前一個分組的密文加密后和當前分組的明文XOR異或操作生成當前分組的密文。所謂反饋,這里指的就是返回輸人端的意思,即前一個密文分組會被送回到密碼算法的輸入端。IV:初始化向量; K:密鑰; C:密文; P:明文s位:明文,反饋位數,取1、8、64、128 記為CFB-1,CFB-8,CFB-64,CFB-128; b位:移位寄存器值CFB模式的解密和CBC模式的加密在流程上其實是非常相似的。 在ECB模式和CBC模式中,明文分組都是通過密碼算法進行加密的,然而,在CFB模式中,明文分組并沒有通過密碼算法來直接進行加密。從上圖可以看出,明文分組和密文分組之間并沒有經過"加密"這一步驟。在CFB模式中,明文分和密文分組之間只有一個XOR。我們將CBC模式與CFB模式對比一下,就可以看出其中的差異了(如下圖)。在CBC模式中,明文分組和密文分組之間有XOR和密碼算法兩個步驟,而在CFB模式中,明文分組和密文分組之間則只有XOR。-  初始化向量 在生成第一個密文分組時,由于不存在前一個輸出的數據,因此需要使用初始化向量(IV)來代替,這一點和CBC模式是相同的。一般來說,我們需要在每次加密時生成一個不同的隨機比特序列用作初始化向量。
-  CFB模式與流密碼 CFB模式是通過將“明文分組”與“密碼算法的輸出"進行XOR運算來生成“密文分組”的。在CFB模式中,密碼算法的輸出相當于一個隨機比特序列。由于密碼算法的輸出是通過計算得到的,并不是真正的隨機數,因此CFB模式不可能具各理論上不可破譯的性質。CFB模式中由密算法所生成的比特序列稱為密鑰流(key stream)。在CFB模式中,密碼算法就相當于用來生成密鑰流的偽隨機數生成器,而初始化向量相當于偽隨機數生成器的“種子“。在CFB模式中,明文數據可以被逐比特加密,因此我們可以將CFB模式看做是一種使用分組密碼來實現流密碼的方式。
OFB 模式
OFB式的全稱是Output-Feedback模式(輸出反饋模式)。在OFB模式中,密碼算法的輸出會反饋到密碼算法的輸入中, 即上一個分組密碼算法的輸出是當前分組密碼算法的輸入(下圖)。IV:初始化向量; K:密鑰; C:密文; P:明文s位:明文,反饋位數,隨機序列; b位:移位寄存器值OFB模式并不是通過密碼算法對明文直接進行加密的,而是通過將 “明文分組" 和 “密碼算法的輸出” 進行XOR來產生 “密文分組” 的,在這一點上OFB模式和CFB模式非常相似。-  初始化向量 和CBC模式、CFB模式一樣,OFB模式中也需要使用初始化向量(IV)。一般來說,我們需要在每次加密時生成一個不同的隨機比特序列用作初始化向量。
-  CFB模式和OFB模式對比 OFB模式和CFB模式的區別僅僅在于密碼算法的輸入。CFB式中,密碼算法的輸人是前一個密文分組,也就是將密文分組反饋到密算法中,因此就有了“密文反饋模式”這個名字。相對地,OFB模式中,密碼算法的輸入則是密碼算法的前一個輸出,也就是將輸出反饋給密碼算法,因此就有了“輸出反饋模式"這個名字。如果將一個分組抽出來對CFB模式和OFB模式進行一個對比.就可以很容易看出它們之間的差異(下圖)。
CTR 模式
CTR模式的全稱是CounTeR模式(計數器模式)。CTR摸式是一種通過將逐次累加的計數器進行加密來生成密鑰流的流密碼(下圖)。Counter:計數器; K:密鑰; C:密文; P:明文CTR模式中,每個分組對應一個逐次累加的計數器,并通過對計數器進行加密來生成密鑰流。也就是說,最終的密文分組是通過將計數器加密得到的比特序列,與明文分組進行XOR而得到的。-  計數器的生成方法 每次加密時都會生成一個不同的值(nonce)來作為計數器的初始值。當分組長度為128比特(16字節)時,計數器的初始值可能是像下面這樣的形式。
其中前8個字節為nonce(隨機數),這個值在每次加密時必須都是不同的,后8個字節為分組序號,這個部分是會逐次累加的。在加密的過程中,計數器的值會產生如下變化:
按照上述生成方法,可以保證計數器的值每次都不同。由于計數器的值每次都不同,因此每個分組中將計數器進行加密所得到的密鑰流也是不同的。也是說,這種方法就是用分組密碼來模擬生成隨機的比特序列。
-  OFB模式與CTR模式對比 CTR模式和OFB模式一樣,都屬于流密碼。如果我們將單個分組的加密過程拿出來,那么OFB模式和CTR模式之間的差異還是很容易理解的(下圖)。OFB模式是將加密的輸出反憒到輸入,而CTR模式則是將計數器的值用作輸入。
-  CTR模式的特點 CTR模式的加密和解密使用了完全相同的結構,因此在程序實現上比較容易。這一特點和同為流密碼的OFB模式是一樣的。此外,CTR模式中可以以任意順序對分組進行加密和解密,因此在加密和解密時需要用到的“計數器"的值可以由nonce和分組序號直接計算出來。這一性質是OFB模式所不具備的。能夠以任意順序處理分組,就意味著能夠實現并行計算。在支持并行計算的系統中,CTR模式的速度是非常快的。
總結
總結
以上是生活随笔為你收集整理的分组密码简介和五大分组模式的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 离散化处理 模板
- 下一篇: 银行理财迎来涅槃重生,平均收益率却跌破4
