官术网_书友最值得收藏!

2.2 對稱密碼算法

在對稱密碼算法中,加密密鑰和解密密鑰相同,或者通過其中一方可以推導(dǎo)出另一方,并且需要通信的雙方保管所使用的密鑰。它是密碼學(xué)中常見的一種密碼算法。對稱密碼算法包括分組密碼和序列密碼兩種類型。分組密碼與序列密碼是密碼學(xué)中兩種重要的密碼算法,兩者之間對信息加密的方式不同,各自的優(yōu)勢也不同,所以有不同的應(yīng)用領(lǐng)域。

本節(jié)將分別討論分組密碼和序列密碼,并介紹典型的應(yīng)用算法。

2.2.1 分組密碼

分組密碼是現(xiàn)代密碼學(xué)的一個重要分支。分組密碼的加解密速度快、安全性好并得到許多密碼芯片的支持,故在計(jì)算機(jī)通信和信息系統(tǒng)安全領(lǐng)域有廣泛的應(yīng)用,主要用于實(shí)現(xiàn)數(shù)據(jù)加密、數(shù)字簽名、認(rèn)證和密鑰管理。根據(jù)加密算法的不同,分組密碼分為對稱分組密碼和非對稱分組密碼。下面我們將介紹對稱分組密碼,并簡要介紹一些典型的分組密碼算法。

1.分組密碼概述

分組密碼(Block Cipher),也稱塊密碼,是將明文消息編碼表示后的數(shù)字序列劃分成固定大小的分組,然后在密鑰的控制下對各組分別進(jìn)行加密變換,從而獲得等長的二進(jìn)制序列的一類算法。塊的大小由加密變換的輸入長度確定,通常為64的倍數(shù)。

在現(xiàn)代分組密碼中,兩個重要的思想就是擴(kuò)散和混亂。擴(kuò)散,是指要將算法設(shè)計(jì)成明文中每一位的變化盡可能多地影響到密文輸出序列的變化,以便隱藏明文的統(tǒng)計(jì)特性,我們可以形象地將其描述為“雪崩效應(yīng)”。混亂,是指在加解密變換過程中明文、密鑰以及密文之間的關(guān)系要盡可能地復(fù)雜化,以防密碼破譯者通過建立并求解一些方程來進(jìn)行破譯。

分組密碼與序列密碼的不同之處在于:序列密碼算法是對序列中的每一個位或者每一個字符進(jìn)行加密,而分組密碼則是以由若干位組成的組為單位進(jìn)行加密變換,如圖2-5所示。

分組密碼的加密過程如下。

1)將明文分成m個明文組M1M2,…,Mi,…,Mm

圖2-5 分組密碼加密過程示意圖

2)對每個明文分組分別作相同的加密變換,從而生成m個密文組C1C2 ,…,Ci,…,Cm。在圖2-5所示的加密過程中,分組密碼以32位為一個分組對明文進(jìn)行劃分,明文單詞“this”經(jīng)過加密變換后得到密文“} kc {”。這些加密算法是對整個明文進(jìn)行操作的,即除了其中的文字以外,還包括空格、標(biāo)點(diǎn)符號和特殊字符等。

分組密碼的解密過程和加密過程類似,進(jìn)行的操作和變換也只是對應(yīng)于加密過程的逆變換。首先將收到的密文分成m個密文分組C1C2,…,Ci,…,Cm,它在相同的密鑰作用下,對每個分組執(zhí)行一個加密的逆變換,解密得到對應(yīng)的明文分組M1M2 ,…,Mi,…,Mm

2.典型的分組密碼算法

接下來,將介紹一些歷史上得到廣泛應(yīng)用的典型分組密碼算法。

(1)DES算法

DES算法的產(chǎn)生可以追溯到1972年,美國國家標(biāo)準(zhǔn)局(National Bureau of Standards,NBS),即現(xiàn)在的國家標(biāo)準(zhǔn)和技術(shù)研究院(National Institute of Standards and Technology,NIST)啟動了一個研究加密算法的項(xiàng)目,目的是為了對計(jì)算機(jī)和計(jì)算機(jī)通信中的數(shù)據(jù)進(jìn)行保護(hù)。很多公司參與到這一項(xiàng)目中并提供了一些建議,最后,IBM公司的Lucifer加密系統(tǒng)勝出。到1976年底,美國聯(lián)邦政府決定使用這個算法,并對其進(jìn)行了一些改動,將其更名為數(shù)據(jù)加密標(biāo)準(zhǔn)(DES)。不久之后,其他組織也認(rèn)可并開始采用DES作為加密算法。之后的20多年,DES成為很多應(yīng)用程序選用的加密算法。但是隨著計(jì)算機(jī)計(jì)算能力的提升,DES的安全性逐漸變?nèi)酰蟊桓呒壖用軜?biāo)準(zhǔn)(Advanced Encryption Standard,AES)所取代。雖然DES被取代了,但它的設(shè)計(jì)思想對現(xiàn)代密碼學(xué)的發(fā)展具有深遠(yuǎn)的意義。

DES是一種使用密鑰加密的分組算法,加密和解密密鑰相同,處理單位是位,其分組長度為64位,初始密鑰長度為64位,含有8個奇偶校驗(yàn)位,故密鑰有效長度為56位。其加密過程分為4步,即選擇擴(kuò)展運(yùn)算、子密鑰異或、選擇壓縮運(yùn)算和置換運(yùn)算。在計(jì)算能力得到大大提高之后,DES的密鑰長度和分組長度顯得過短,可以被窮舉攻破。為了能夠充分利用已有的DES軟硬件資源,多重DES開始得到應(yīng)用。多重DES是使用多個密鑰,利用DES對明文進(jìn)行多次加密。使用多重DES可以增加密鑰量,大大提高抗窮舉攻擊的能力。

(2)AES算法

1997年,美國ANST(美國國家標(biāo)準(zhǔn)協(xié)會)向全球發(fā)起征集AES的活動,并且成立了AES工作小組,要求AES比三重DES快,至少與三重DES一樣安全,數(shù)據(jù)分組長度為128位,密鑰長度為128/192/256位。2000年,NIST將候選算法Rijndael選為新的AES,故AES也被稱為Rijndael加密算法。自此,AES替代了原先的DES,并被全世界廣泛使用。

AES的處理單位是字節(jié),其加密過程分為4個步驟:字節(jié)代換、行移位、列混合和輪密鑰加。當(dāng)AES的密鑰長度為128位時(shí),迭代的輪數(shù)是10;密鑰長度為192位時(shí),迭代的輪數(shù)是12;密鑰長度為256位時(shí),迭代的輪數(shù)是14。AES算法具有穩(wěn)定的數(shù)學(xué)基礎(chǔ),沒有算法弱點(diǎn),而且抗密碼分析強(qiáng)度高,可以在多個平臺上快速實(shí)現(xiàn),不占用大量的存儲空間和內(nèi)存,所以得到了廣泛的應(yīng)用。

(3)IDEA算法

國際數(shù)據(jù)加密算法(International Data Encryption Algorithm,IDEA),是最強(qiáng)大的加密算法之一。IDEA是上海交通大學(xué)教授來學(xué)嘉與瑞士學(xué)者James Massey聯(lián)合提出的,它在1990年被正式公布并在之后得到增強(qiáng)。這種算法是在DES算法的基礎(chǔ)上發(fā)展而來的,類似于三重DES。由于DES的密鑰長度太短,IDEA的密鑰長度增加到128位,較長的密鑰使得今后若干年內(nèi)IDEA都是安全的。

盡管IDEA很強(qiáng)大,但它不像DES那么普及,原因主要有兩個:第一,IDEA受到專利保護(hù)而DES不受專利保護(hù),IDEA需要先獲得許可證之后才能在商業(yè)應(yīng)用程序中使用;第二,DES具有比IDEA更長的歷史和跟蹤記錄。

2.2.2 序列密碼

序列密碼具有實(shí)現(xiàn)簡單、加密和解密速度快、安全性能較好、沒有或少有差錯傳播等優(yōu)點(diǎn)。由于序列密碼具有的優(yōu)勢,它可以適用于資源受限、體積小、運(yùn)算速度高的應(yīng)用場景。藍(lán)牙加密算法和手機(jī)加密算法中就有序列密碼的應(yīng)用。接下來,將對序列密碼進(jìn)行詳細(xì)介紹。

1.序列密碼概述

序列密碼又稱為流密碼,它的起源可以追溯到20世紀(jì)20年代的Vernam密碼,是一種對稱密碼算法。序列密碼將明文消息字符串在密鑰流的控制下逐位進(jìn)行加密和解密,所以具有加解密速度快、實(shí)現(xiàn)簡單、便于硬件實(shí)施、沒有或只有有限的錯誤傳播的特點(diǎn)。因此,在實(shí)際應(yīng)用中,特別是在專用或機(jī)密機(jī)構(gòu)中,序列密碼保持著一定的優(yōu)勢。序列密碼典型的應(yīng)用領(lǐng)域包括無線通信、外交通信等。

序列密碼通過將明文或密文劃分成字符或基本單元(如0、1數(shù)字),再分別與密鑰流作用來進(jìn)行加密或解密。序列密碼算法的設(shè)計(jì)關(guān)鍵在于密鑰序列產(chǎn)生器,它可以使生成的密鑰序列具有不可預(yù)測性。根據(jù)通信雙方使用的密鑰是否相同,序列密碼可以是對稱密鑰算法下的,也可以是公鑰密碼算法下的。本節(jié)的重點(diǎn)是介紹對稱密鑰算法,如果沒有特殊說明,下面討論的序列密碼都屬于對稱密鑰。

序列密碼一般包含以下幾個組成部分:明文序列mi、密鑰序列ki、用于控制密鑰序列產(chǎn)生器的種子密鑰K和密文序列ci。在序列密碼中,加解密運(yùn)算是簡單的模2加運(yùn)算,其安全性強(qiáng)度主要取決于密鑰序列的隨機(jī)性。序列密碼的加解密過程如圖2-6所示。

圖2-6 序列密碼加解密過程示意圖

在圖2-6中,KG是密鑰流生成器,它主要分為兩部分:驅(qū)動部分和組合部分。驅(qū)動部分一般使用線性反饋移位寄存器(Linear Feedback Shift Register,LFSR),用于產(chǎn)生控制生成器的狀態(tài)序列,并控制生成器的周期和統(tǒng)計(jì)特性。組合部分主要負(fù)責(zé)對驅(qū)動部分的各輸出序列進(jìn)行非線性組合。在數(shù)據(jù)通信時(shí),長時(shí)間通過安全信道傳遞密鑰流在實(shí)際應(yīng)用中很難實(shí)現(xiàn),所以大多數(shù)序列密碼算法都采用“種子密鑰”的方式來構(gòu)造偽隨機(jī)序列。此時(shí),密鑰流生成器的工作是根據(jù)較短的“種子密鑰”來構(gòu)造統(tǒng)計(jì)性能良好的偽隨機(jī)序列。在這種情形下,密鑰序列元素ki的產(chǎn)生是由第i時(shí)刻密鑰流發(fā)生器中記憶元件(存儲器)的內(nèi)部狀態(tài)σi和種子密鑰k共同決定的,一般可以寫作:ki=fkσi)。

假設(shè)待加密消息流(明文流)為:

m=m1m2mimiM

密鑰流為:

k=k1k2kikiK

加密后的密文流為:

c=c1c2ciciC

則加密算法可以表示為:

c=c1c2ci…=Ek1m1Ek2m2)…Ekimi)…

解密算法可以表示為:

m=m1m2mi…=Dk1c1Dk2c2)…Dkici)…

ci=Ekimi)=miki,則稱這類序列密碼為加法序列密碼。

2.反饋移位寄存器

為了更好地理解序列密碼的工作原理,下面對反饋移位寄存器做簡單介紹。反饋移位寄存器由n位的寄存器(稱為n級移位寄存器)和反饋函數(shù)(Feedback Function)組成。移位寄存器序列的理論由挪威的密碼學(xué)家Ernst Selmer于1965年提出。移位寄存器用來存儲數(shù)據(jù),當(dāng)受到脈沖驅(qū)動時(shí),移位寄存器中所有位右移一位,最右邊移出的位是輸出位,最左端的一位由反饋函數(shù)的輸出來填充,此過程稱為進(jìn)動一拍。反饋函數(shù)fa1,…,an)是n元(a1,…,an)的布爾函數(shù)。移位寄存器根據(jù)需要不斷地進(jìn)動m拍,便有m位的輸出,形成輸出序列o1o2om,如圖2-7所示。

圖2-7 反饋移位寄存器

當(dāng)反饋移位寄存器的反饋函數(shù)是異或變換時(shí),這樣的反饋移位寄存器稱作線性反饋移位寄存器,如圖2-8所示。

圖2-8n級線性反饋移位寄存器模型

圖2-8所示的是一個n級線性反饋移位寄存器的模型,移位寄存器中存儲器的個數(shù)稱為移位寄存器的級數(shù),移位寄存器存儲的數(shù)據(jù)是寄存器的狀態(tài),狀態(tài)的順序從左到右依次為從最高位到最低位。在所有狀態(tài)中,(a1a2,…,an)叫初態(tài),并且從左到右依次稱為第一級、第二級、…、第n級,也稱為抽頭1、抽頭2、抽頭3、…、抽頭nn級線性反饋移位寄存器主要是用來產(chǎn)生周期大、統(tǒng)計(jì)性能好的序列,可以產(chǎn)生2n-1個有效狀態(tài)。

非線性組合部分主要是增加密鑰流的復(fù)雜程度,使密鑰流能夠抵抗各種攻擊(對流密碼的攻擊手段主要是對密鑰流進(jìn)行攻擊)。這樣,以線性反饋移位寄存器產(chǎn)生的序列為基序列,經(jīng)過不規(guī)則采樣、函數(shù)變換等操作(即非線性變換),就可以得到安全又實(shí)用的密鑰流。不規(guī)則采樣是在控制序列作用下,對被采樣序列進(jìn)行采樣輸出,得到的序列稱為輸出序列。控制序列的控制方式有鐘控方式和抽取方式等,函數(shù)變換有前饋?zhàn)儞Q和有記憶變換等。下面簡單介紹兩種具有代表性的序列模型。

(1)鐘控模型

圖2-9展示了一種鐘控發(fā)生器的模型。當(dāng)LFSR-1輸出1時(shí),時(shí)鐘信號被采樣,即能通過“與門”,并驅(qū)動LFSR-2進(jìn)動一拍;當(dāng)LFSR-1輸出0時(shí),時(shí)鐘信號不被采樣,即不能通過“與門”,此時(shí)LFSR-2不進(jìn)動,重復(fù)輸出前一位。

圖2-9 鐘控發(fā)生器示意圖

(2)前饋模型

Geffe發(fā)生器是前饋序列的一種典型模型,如圖2-10所示。其前饋函數(shù)gx)=(x1x2 )⊕(x2x3)為非線性函數(shù),即當(dāng)LFSR-2輸出1時(shí),gx)的輸出位是LFSR-1的輸出位;當(dāng)LFSR-2輸出0時(shí),gx)的輸出位是LFSR-3的輸出位。

圖2-10 Geffe發(fā)生器示意圖

序列密碼通常分為同步序列密碼和自同步序列密碼兩類。若密鑰序列的產(chǎn)生獨(dú)立于明文消息和密文消息,這樣的序列密碼稱為同步序列密碼。分組密碼的輸出反饋模式(OFB)就是同步序列密碼的一個例子。若密鑰序列的產(chǎn)生是密鑰及固定大小的以往密文位的函數(shù),這樣的序列密碼稱為自同步序列密碼或非同步序列密碼,分組密碼的密文反饋模式(CFB)就是自同步序列密碼的一個例子。

(1)同步序列密碼

圖2-11所示,ki表示密鑰流,ci表示密文流,mi表示明文流。在同步序列密碼中,密鑰流的產(chǎn)生完全獨(dú)立于消息流(明文流或密文流)。在這種工作方式下,如果傳輸過程中丟失一個密文字符,發(fā)送方和接收方就必須使他們的密鑰生成器重新進(jìn)行同步,這樣才能正確地加/解密后續(xù)的序列,否則加/解密將失敗。

圖2-11 同步流密碼

圖2-11所示的操作過程可以用以下函數(shù)描述。

其中,σi表示密鑰流生成器的內(nèi)部狀態(tài),F是狀態(tài)轉(zhuǎn)移函數(shù),G是密鑰流ki產(chǎn)生函數(shù),E是同步流密碼的加密變換,D是同步流密碼的解密變換。

由于同步流密碼各操作位之間相互獨(dú)立,因此,應(yīng)用這種方式進(jìn)行加解密時(shí)不會有錯誤傳播。如果在操作過程中產(chǎn)生一位錯誤,也只會影響一位,不影響后續(xù)位,這是同步流密碼的一個重要特點(diǎn)。

(2)自同步流密碼

與同步流密碼相比,自同步流密碼是一種有記憶變換的密碼,如圖2-12所示。自同步流密碼的每一個密鑰字符是由前面n個密文字符參與運(yùn)算推導(dǎo)出來的,其中n為定值。如果在傳輸過程中丟失或更改了一個字符,那么這一錯誤就要向前傳播n個字符。因此,自同步流密碼會出現(xiàn)錯誤傳播現(xiàn)象。不過,在收到n個正確的密文字符之后,密碼自身會實(shí)現(xiàn)重新同步。

圖2-12 自同步流密碼

圖2-12所示的操作過程可以用以下函數(shù)進(jìn)行描述。

式中,σi表示密鑰流生成器的內(nèi)部狀態(tài),ci是密文,F是狀態(tài)轉(zhuǎn)移函數(shù),G是密鑰流ki產(chǎn)生函數(shù),E是同步流密碼的加密變換,D是同步流密碼的解密變換。

在自同步流密碼系統(tǒng)中,密文流參與密鑰流的生成,這使得對密鑰流的分析會很復(fù)雜,從而導(dǎo)致對自同步流密碼進(jìn)行系統(tǒng)性的理論分析也會非常困難。因此,目前應(yīng)用較多的流密碼是同步流密碼。

3.典型的序列密碼算法

序列密碼的算法很多,比較典型的有A5算法、RC4算法、HC算法和Rabbit算法等,這些序列密碼的設(shè)計(jì)思想各有特點(diǎn),本節(jié)主要對A5算法進(jìn)行介紹。

A5算法是GSM系統(tǒng)中主要使用的序列密碼加密算法,用于加密移動終端與基站之間傳輸?shù)男畔ⅰT撍惴梢悦枋鰹橛?2位長的參數(shù)(幀號碼,F n)和64位長的參數(shù)(會話密鑰,K c)生成兩個114位長的序列(密鑰流)的黑盒子。這樣設(shè)計(jì)的原因是GSM會話每幀含228位,通過與A5算法產(chǎn)生的228位密鑰流進(jìn)行異或來達(dá)到保密。A5算法主要有3種版本:A5/1算法限制出口,保密性較強(qiáng);A5/2算法沒有出口限制,但保密性較弱;A5/3算法則是更新的版本,它基于KASUMI算法,但尚未被GSM標(biāo)準(zhǔn)所采用。如果沒有特殊說明,下面介紹的A5算法都是指A5/1算法。

A5算法是一種典型的基于線性反饋移位寄存器的序列密碼算法,構(gòu)成A5加密器主體的LFSR有3個,組成了一個集互控和停走于一體的鐘控模型。其主體部分由3個長度不同的線性移位寄存器(A、B、C)組成,其中A有19位,B有22位,C有23位,它們的移位方式都是由低位移向高位。每次移位后,最低位就要補(bǔ)充一位,補(bǔ)充的值由寄存器中的某些抽頭位進(jìn)行異或運(yùn)算的結(jié)果來決定,比如:運(yùn)算的結(jié)果為“1”,則補(bǔ)充“1”,否則補(bǔ)充“0”。在3個LFSR中,A的抽頭系數(shù)為:18,17,16,13;B的抽頭系數(shù)為:21,20,16,12;C的抽頭系數(shù)為:22,21,18,17。3個LFSR輸出的異或值作為A5算法的輸出值。A5加密器的主體部分如圖2-13所示。

在圖2-13中,A的生成多項(xiàng)式為

fAx)=x19+x18+x17+x14+1

B的生成多項(xiàng)式為

fBx)=x22+x21+x17+x13+1

C的生成多項(xiàng)式為

fCx)=x23+x22+x19+x18+1

由此可見,3個線性反饋移存器的生成多項(xiàng)式均為本原多項(xiàng)式。

這3個加密器的移位是由時(shí)鐘控制的,且遵循“少數(shù)服從多數(shù)”的原則,即從每個寄存器中取出一個中間位(圖2-13中的xyz,位置分別為A、B、C的第9、11、11位)并進(jìn)行判斷,若在取出的3個中間位中至少有兩個為“1”,則為“1”的寄存器進(jìn)行一次移位,而為“0”的不進(jìn)行移位。反之,若3個中間位中至少有兩個為“0”,則為“0”的寄存器進(jìn)行一次移位,而為“1”的不進(jìn)行移位。顯然,這種機(jī)制保證了每次至少有兩個LFSR被驅(qū)動移位。

圖2-13 A5算法加密器示意圖

A5算法的初始密鑰長度為64位。為了對該算法進(jìn)行攻擊,已知明文攻擊法只需要確定其中兩個寄存器的初始值就可以計(jì)算出另一個寄存器的初始值,這說明攻擊A5算法一般要用240次嘗試來確定兩個寄存器的結(jié)構(gòu),而后從密鑰流來決定第三個LFSR。A5算法設(shè)計(jì)巧妙、效率高,可以通過所有已知的統(tǒng)計(jì)校驗(yàn)標(biāo)準(zhǔn)。其唯一的缺點(diǎn)是移位寄存器的級數(shù)較短,其最短循環(huán)長度為4/3?2kk是最長的LFSR的級數(shù)),總級數(shù)為19+22+23=64,這樣就可以用窮盡搜索法來破譯。而且目前,A5算法已經(jīng)被攻破。如果能夠采用更長的、抽頭更多的線性反饋移位寄存器,A5算法會更加安全。

2.2.3 密碼的工作模式

分組密碼算法每次加密的明文數(shù)據(jù)的大小是固定的。通常明文的長度會超過分組密碼的分組長度,此時(shí)就需要對分組密碼算法進(jìn)行迭代,迭代的方法就稱為分組密碼的工作模式。密碼工作模式通常是基本密碼、一些反饋和一些簡單運(yùn)算的組合。

常用的分組密碼的工作模式有5種,即電子密碼本模式、密文分組鏈接模式、密文反饋模式、輸出反饋模式和計(jì)數(shù)器模式。其中,密文反饋模式可以看作是序列密碼的工作模式,輸出反饋模式是將分組密碼作為同步序列密碼算法來運(yùn)行的一種方法。接下來,本節(jié)將詳細(xì)介紹這5種密碼工作模式及其工作過程。

1.電子密碼本模式

電子密碼本模式(Electronic Code Mode,ECB)是使用分組密碼算法的最簡單方式之一,即該模式只能加密長度等于密碼分組長度的單塊數(shù)據(jù),若要加密變長數(shù)據(jù),則數(shù)據(jù)必須先被劃分為一些單獨(dú)的密碼塊。

yi=DESkxi

上式中的xi表示分組后的第i個明文塊,yi表示加密后的密文塊。在該模式下,每個分組獨(dú)立進(jìn)行加解密運(yùn)算,一次處理一組明文塊,每次使用相同的密鑰進(jìn)行加密,不同分組間沒有任何關(guān)聯(lián)。而且這種方式不必按次序進(jìn)行,可以先加密中間的分組,然后是尾部分組,最后再加密最開始的分組。由此可見,在密鑰一致的情況下,同一段明文總會產(chǎn)生一樣的密文。圖2-14展示的是ECB模式的工作過程。

圖2-14 ECB模式的工作過程

a)加密 b)解密

在安全性方面,ECB模式的特點(diǎn)是:一段消息若有幾個相同的明文組,那么密文也將出現(xiàn)幾個相同的密文分組。對于很長的消息,該模式可能就不安全了。通常消息的開頭和結(jié)尾都會被格式化,其中包含了關(guān)于發(fā)送者、接收者和日期等信息,這些信息會趨向于在不同消息的同一位置出現(xiàn),密碼分析者可以獲得很多信息。然后,他就可以對明文發(fā)起統(tǒng)計(jì)攻擊,而不用考慮密文分組的長度。如果消息是非結(jié)構(gòu)化的,密碼分析者可能利用這些規(guī)律性特征來進(jìn)行破譯。

所以,ECB模式特別適合于數(shù)據(jù)較少的情況,比如加密密鑰。如果想安全傳輸一個DES或AES密鑰,ECB模式是比較合適的。

2.密文分組鏈接模式

為了克服ECB模式的上述弱點(diǎn),需要將重復(fù)的明文分組加密成不同的密文分組。滿足這一要求的簡單方法就是使用密文分組鏈接模式(Cipher Block Chaining,CBC)。鏈接是將一種反饋機(jī)制加入到分組密碼中,加密算法的輸入是當(dāng)前的明文組和上一個密文組的異或結(jié)果,而使用的密鑰是相同的。這就相當(dāng)于將所有的明文組鏈接起來。加密算法的每次輸入與本明文組沒有固定的關(guān)聯(lián)。因此,如果有重復(fù)的明文組,加密之后也看不出來。

圖2-15展示了CBC模式的工作過程,其中初始向量為IV,密鑰為K。第一個明文分組被加密后,其結(jié)果被存儲在反饋寄存器中,在下一明文分組進(jìn)行加密之前,它將與保存在反饋寄存器中的前一個分組的密文進(jìn)行異或并作為下一次加密的輸入。同樣地,加密后的結(jié)果仍然保存在反饋寄存器中,直到最后一個分組加密后直接輸出。由此可見,每一分組的加密都依賴于所有前面的分組。

在解密時(shí),每個密文組分別進(jìn)行解密,再與上一分組進(jìn)行異或就可以恢復(fù)出明文。

圖2-15 CBC模式的工作過程

a)加密 b)解密

從上述的工作原理可以看出,由于鏈接反饋機(jī)制的存在,CBC模式對線路中的差錯比較敏感,會出現(xiàn)錯誤傳播。密文中的小錯誤會轉(zhuǎn)變?yōu)槊魑闹泻艽蟮腻e誤。在分組中出現(xiàn)錯誤后,緊接著第二分組的分組就不再受到錯誤影響,所以CBC模式的錯誤傳播是有限的,它具有自恢復(fù)(Self-Recovering)能力。

雖然CBC模式的一個密文分組出錯會影響兩個分組的正確解密,但系統(tǒng)可以恢復(fù)并使后面的分組都不受影響。盡管CBC能很快將位錯誤進(jìn)行恢復(fù),但它卻不能恢復(fù)同步錯誤。如果密文流中增加或丟失一位,那么所有后續(xù)分組都要移動一位,并且解密將全部是錯誤的。所以,任何使用CBC的加密系統(tǒng)都必須確保分組結(jié)構(gòu)的完整性。

3.密文反饋模式

密文反饋模式(Cipher Feedback Block,CFB)是分組密碼算法用于自同步序列密碼算法的一個實(shí)例。典型的流密碼輸入某個初始值和密鑰,然后輸出位流,這個位流再和明文位進(jìn)行異或運(yùn)算。而在CFB模式里,與明文異或的位流是與明文相關(guān)的。

圖2-16展示了CFB模式的工作過程。若設(shè)分組長度為n位,初始向量為IV(n位),密鑰為K,則j位(bit)的CFB模式下(j在1~n之間),加密過程如下。

圖2-16 CFB模式的工作過程

a)加密 b)解密

1)設(shè)一個n位長的隊(duì)列,隊(duì)列初始值為IV,并把明文消息分成Mj位的比特塊。

2)依次對每個j位比特塊明文Pj進(jìn)行以下操作:用密鑰K加密隊(duì)列,把該密文最左端的j位與j位比特塊明文Pj進(jìn)行異或,即可獲得其j位比特塊的密文Cj;然后把該j位比特塊密文Cj放入隊(duì)列的最右端,并丟棄隊(duì)列最左端的j位。

3)最后把全部j位比特塊密文C1…CM依次連起來,即可得到消息密文C

在CFB模式中,明文的一個錯誤就會影響所有后面的密文和解密過程。同樣地,密文里單獨(dú)一位的錯誤會引起明文的一個單獨(dú)錯誤。除此之外,錯誤進(jìn)入移位寄存器,導(dǎo)致密文變成無用的信息,直到該錯誤從移位寄存器的另一端移出,這會使加密明文產(chǎn)生更大的錯誤。

CFB模式對同步錯誤來說是可以自我恢復(fù)的。錯誤進(jìn)入移位寄存器,就可以造成數(shù)據(jù)毀壞,直到它從另一端移出寄存器為止。

4.輸出反饋模式

輸出反饋模式(Output Feedback Block,OFB)是將分組密碼作為同步序列密碼算法來運(yùn)行的一種方法,如圖2-17所示。在OFB模式中,密碼算法的輸出會反饋到密碼算法的輸入中。OFB模式并不是通過密碼算法對明文直接加密,而是通過將明文分組和密碼算法的輸出進(jìn)行異或來產(chǎn)生密文分組,但OFB是將前一個j位輸出分組送入隊(duì)列最右邊位置。解密是加密的一個逆過程。在OFB模式的加解密過程中,分組算法都以加密模式使用。由于反饋機(jī)制獨(dú)立于明文和密文,這種方法有時(shí)也被稱為“內(nèi)部反饋”。

圖2-17 OFB模式的工作過程

a)加密 b)解密

OFB模式有一個很好的特性就是大部分工作可以離線進(jìn)行,甚至可以在明文存在之前。當(dāng)消息最終到達(dá)時(shí),它可以與算法的輸出進(jìn)行異或運(yùn)算,從而產(chǎn)生密文。

OFB模式的優(yōu)點(diǎn)如下。

1)明文模式可以得到隱藏。

2)分組密碼的輸入是隨機(jī)的。

3)可以及時(shí)加密傳送小于分組的數(shù)據(jù)。

OFB模式的缺點(diǎn)如下。

1)明文很容易被控制或篡改。

2)不利于并行計(jì)算。

3)任何對密文的改變都會直接影響明文。

5.計(jì)數(shù)器模式

計(jì)數(shù)器模式(Counter Mode,CTR)采用與明文分組相同的長度來加密不同的明文組,該模式的工作過程如圖2-18所示。在該模式中,分組密碼沒有直接被用來加密明文,而是用于加密計(jì)數(shù)器的輸出。計(jì)數(shù)器首先被初始化為一個值,然后隨著消息塊的增加,計(jì)數(shù)器的值會依次遞增1,計(jì)數(shù)器加1后與明文分組進(jìn)行異或得到密文分組。

使用計(jì)數(shù)器模式,不需要先生成前面所有的密鑰位就可以直接生成第j個密鑰位Sj。通過手動設(shè)置計(jì)數(shù)器到第j個內(nèi)部狀態(tài),然后就可以產(chǎn)生該位。這對保障隨機(jī)訪問數(shù)據(jù)文件的機(jī)密性會非常有用,不需要解密整個文件就可以直接解密某個特殊的數(shù)據(jù)分組。

圖2-18 CTR模式的工作過程

a)加密 b)解密

CTR模式的同步和錯誤擴(kuò)散特性與OFB模式完全一樣。由于沒有反饋,CTR模式的加密和解密能夠同時(shí)進(jìn)行,這是CTR模式比CFB模式和OFB模式優(yōu)越的地方。

主站蜘蛛池模板: 涟源市| 通州区| 黄平县| 桂阳县| 呼图壁县| 晴隆县| 古蔺县| 东乡族自治县| 宁波市| 宜阳县| 高州市| 揭东县| 珠海市| 黔江区| 南平市| 佛山市| 奉新县| 石台县| 晋城| 昂仁县| 浮梁县| 遂昌县| 河东区| 武山县| 金寨县| 双桥区| 芷江| 吉首市| 呼图壁县| 浮梁县| 城口县| 拉孜县| 大洼县| 玉林市| 南木林县| 内黄县| 瑞金市| 上思县| 河源市| 珠海市| 遂平县|