- 計(jì)算機(jī)網(wǎng)絡(luò)安全與應(yīng)用技術(shù)(第2版)
- 張兆信
- 2520字
- 2020-05-29 12:08:50
3.2 傳統(tǒng)加密方法(對(duì)稱密碼)
傳統(tǒng)加密算法是以密鑰為基礎(chǔ)的,是一種對(duì)稱加密,加密密鑰與解密密鑰是相同的,或者可以由其中的一個(gè)推知另一個(gè)。
在早期的密鑰密碼體制中,典型的有換位密碼和代換密碼。
換位是對(duì)明文L長(zhǎng)字母組中的字母位置進(jìn)行重新排列,而每個(gè)字母本身并不改變。它很像一種字母游戲,打亂字母的順序,設(shè)法把打亂的字母重新組成一個(gè)單詞。比如:給定明文hedeterminedtogoatonce,將明文分成長(zhǎng)為L(zhǎng)=6的段,m1=hedete,m2=rmined,m3=togoat,m4=oncexx,最后一段不足6,加添字母x。將各段的字母序號(hào)按下述矩陣進(jìn)行換位:
得到密文如下:
etehedmenrdioaottgnxeoxc
上面的密文利用下述置換矩陣可恢復(fù)為明文:
因此,由加密矩陣可推知解密矩陣。
代換有單表代換和多表代換,此處只介紹單表代換。單表代換是對(duì)明文的所有字母用同一代換表映射成密文。比如最典型的凱撒密碼是對(duì)英文的26個(gè)字母進(jìn)行位移代換,即將每一字母向前推移k位,不同的k將得到不同的密文。若選擇密鑰k=6,則有下述變換,如表3-1所示。
表3-1 密鑰為6的凱撒密碼映射表
對(duì)于明文:she avoided signing the document,經(jīng)k=6的凱撒密碼變換后得到如下密文:MBY UPICXYX MCAHCHA NBY XIWOGYHN。當(dāng)然這種映射很容易被破譯。
稍復(fù)雜的單表代換可以使明文和密文的映射關(guān)系沒什么規(guī)律可循,比如字母表中先排列出密鑰字母,然后在密鑰后面填上其他字母。若用ZHANG作為密鑰,則映射關(guān)系如表3-2所示。
表3-2 密鑰為ZHANG和映射關(guān)系表
但無論是上面哪一種,都相對(duì)比較簡(jiǎn)單,在今天的電子時(shí)代很容易被破譯。現(xiàn)在最常用的對(duì)稱加密方案是數(shù)據(jù)加密標(biāo)準(zhǔn)(DES),雖然它正向公鑰交出半壁江山,但它依然是數(shù)據(jù)加密中所用的最重要的加密方法。
3.2.1 數(shù)據(jù)加密標(biāo)準(zhǔn)(DES)
DES是最著名的保密密鑰或?qū)ΨQ密鑰加密算法,它是由IBM公司在20世紀(jì)70年代發(fā)展起來的,并經(jīng)美國(guó)政府的加密標(biāo)準(zhǔn)篩選后,于1976年11月被美國(guó)政府采用。
DES可以分成初始置換、16次迭代過程和逆置換。在迭代過程中,使用56位密鑰對(duì)64位的數(shù)據(jù)塊進(jìn)行加密,并對(duì)64位的數(shù)據(jù)塊進(jìn)行16輪編碼。在每輪編碼時(shí),首先將待加密的右半部分由32位擴(kuò)展為48位,然后與由56位密鑰生成的48位某一密鑰進(jìn)行異或,得到的結(jié)果通過S盒壓縮到32位(上述通過圖3-2中的函數(shù)f完成),這32位數(shù)據(jù)經(jīng)過置換再與左半部分異或,最后產(chǎn)生新的右半部分。它的整體框圖如圖3-2所示。
圖3-2D ES整體框圖
下面把DES框圖用文字分步來進(jìn)行一下詳細(xì)說明。
1)DES的明文初始置換。把64位明文按初始置換表換位,如表3-3所示。表中給出的為每位二進(jìn)制數(shù)據(jù)的下標(biāo)。
表3-3 初始置換表
2)在初始置換后,把64位二進(jìn)制明文分成左32位和右32位,進(jìn)入迭代。
3)把R0(32)賦給L1(32)。
4)將右半部分R0(32)進(jìn)行擴(kuò)展排列,由32位擴(kuò)展為48位。擴(kuò)展排列下標(biāo)次序如表3-4所示。
表3-4 擴(kuò)展排列表
5)生成第一輪的子密鑰,首先把64位密鑰每隔7位刪除1位,即刪除第8、16位等,使之成為56位的密鑰。56位密鑰經(jīng)過置換選擇1,即生成56位初始子密鑰,置換選擇1如表3-5所示(表中為數(shù)據(jù)下標(biāo))。
表3-5 置換選擇1
6)經(jīng)過置換選擇1后,把56位的初始密鑰分成左28位和右28位,對(duì)左右兩部分分別循環(huán)移位LSi位,各輪移位次數(shù)如表3-6所示。然后將兩部分拼合起來。
表3-6 各輪移位次數(shù)表
7)拼合后,對(duì)56位密鑰用置換選擇2進(jìn)行置換(置換選擇2如表3-7所示,表中為數(shù)據(jù)下標(biāo)),置換后即為本輪子密鑰,本輪子密鑰與經(jīng)過擴(kuò)展的數(shù)據(jù)的右半部分進(jìn)行異或得到48位數(shù)據(jù)。
表3-7 置換選擇2
8)得到的48位數(shù)據(jù)按順序平均分成8組,這8組通過S盒(Substitution Box)變換,把每組的6位輸入變成4位輸出,從而得到32位數(shù)據(jù)。S盒變換數(shù)據(jù)如表3-8所示。
表3-8 S盒數(shù)據(jù)變換表
(續(xù))
S盒的用法:對(duì)于8組中的每組Si,6個(gè)輸入端依次為b1b2b3b4b5b6,求出b1b6合在一起的十進(jìn)制數(shù)并作為行,求出b2b3b4b5合在一起表示的十進(jìn)制數(shù)并作為列,在S盒數(shù)據(jù)表中找出對(duì)應(yīng)的值,即為Si對(duì)應(yīng)的4位二進(jìn)制給出的十進(jìn)制值。
例如:S1的輸入為101110,則b1b6=(10)2=(2)10,b2b3b4b5=(0111)2=(7)10。
那么在S1組中查找第2行第7列,可以得到值(11)10,所以S1(2,7)=11,(11)10的二進(jìn)制表示形式為(1011)2,得到S1的輸出就為4位二進(jìn)制數(shù)1011。
9)S盒輸出的32位數(shù)據(jù)還要經(jīng)過Permutation置換,簡(jiǎn)稱P置換(P置換如表3-9所示)。P置換后再與左32位按位異或,所得即為新的右半部分。
表3-9 P置換位置表
10)上面只是16次迭代中的一次,經(jīng)過16次這樣的迭代后,把得到的64位二進(jìn)制數(shù)進(jìn)行逆初始置換,便得到了64位可輸出的密文。逆置換表如表3-10所示。
表3-10 逆初始置換表
至此才算完成了一次DES加密。
DES的解密過程和加密過程類似,不同的16輪子密鑰的順序是顛倒的,即第一輪用子密鑰16,第二輪用子密鑰15,最后一輪用子密鑰1。這個(gè)過程用文字表示比較煩瑣,但為了讓讀者對(duì)DES加密過程有更強(qiáng)的感性認(rèn)識(shí),下面用例子來說明DES加密過程的一部分。
假如給出明文為M=’FOOTBALL’,密鑰為K=’OVERSEAS’,它們的ASCII碼如下:
明文M=(0100011001001111010011110101010001000010010000010100110001001100)2
密鑰K=(0100111101010110010001010101001001010011010001010100000101010011)2
1)明文M按表3-3初始變換后得到:
M初始置換后=1111111100001010110011110010011000000000000000001100011000010111
讀者可觀察表3-3,會(huì)很容易發(fā)現(xiàn)它的規(guī)律,在練習(xí)初始變換時(shí),畫一張8×8的表格,把明文的二進(jìn)制數(shù)順序?qū)懭耄缓笠?、4、6、8、1、3、5、7列的次序把數(shù)據(jù)依次倒寫即可。
2)把明文分成左32位和右32位后得到:
L0(32)=11111111000010101100111100100110
R0(32)=00000000000000001100011000010111
把R0(32)賦給L1(32),即L1(32)=R0(32)。
3)把R0(32)按表3-4擴(kuò)展為48位:
R0(48)=100000000000000000000001011000001100000010101110
4)再來看密鑰,把64位的密鑰K刪除第8、16、24、32、40、48、56、64位,變成56位的K’:
K’= 01001110101011010001001010010101001010001001000000101001
5)K’按表3-5置換選擇1進(jìn)行置換,得到:
K’置換選擇1=00000000111111110000000010011001101100100111000000011010
對(duì)于密鑰的變換同樣可以用8×8的表格,把密鑰的64位二進(jìn)制數(shù)依次寫入表格,先刪除最后一列,然后把表格中的數(shù)值依1、2、3、4列的次序倒著寫數(shù)據(jù),寫到第36位,即第4列的中間,再從最后一列依7、6、5的次序把數(shù)據(jù)倒著往前寫,最后倒著補(bǔ)上第4列的上面4位。讀者可研究一下表3-5置換選擇1中下標(biāo)的次序,就會(huì)得出規(guī)律。
6)把K’置換選擇1分成左28位和右28位:
L0=0000000011111111000000001001
R0=1001101100100111000000011010
7)把L0、R0循環(huán)左移LS1位,通過查表3-6各輪移位次數(shù)表可知,LS1為1,循環(huán)左移1位后即有:
L1=0000000111111110000000010010
R1=0011011001001110000000110101
8)L1、R1重新拼合在一起,用置換選擇2進(jìn)行置換(置換見表3-7置換選擇2),即可得到第一個(gè)子密鑰K1:
K1=101100000001001001000010111100001000000110000001
9)得到R0(48)和K1后,把這兩個(gè)48位的數(shù)值進(jìn)行異或后得到:
A=001100000001001001000011100100000100000100101111
10)將上面的A值平均分成8組,再通過查表3-8的S盒數(shù)據(jù)變換表,得到:
A1=001100,S1(0,6)=11=(1011)2
A2=000001,S2(1,0)=3=(0011)2
A3=001001,S3(1,4)=3=(0011)2
A4=000011,S4(1,1)=8=(1000)2
A5=100100,S5(2,2)=1=(0001)2
A6=000100,S6(0,2)=10=(1010)2
A7=000100,S7(0,2)=2=(0010)2
A8=101111,S8(3,7)=13=(1101)2
11)依次合并S1(0,6)到S8(3,7),得到以下數(shù)據(jù):
B=10110011001110000001101000101101
12)對(duì)B值進(jìn)行Permutation置換,查表3-9的P置換位置表,得到:
X0=01111100101000000100111001000110
13)L0(32)與X0按位異或可以得到:
R1(32)=10000011101010101000000101100000
令L2(32)=R1(32),這樣第一輪迭代就完成了,有了R1(32)和L1(32)就可以開始下一輪迭代了,以此類推就可求出R16(32)和L16(32),然后把R16(32)和L16(32)拼合在一起進(jìn)行逆初始變換就可得到密文。
DES算法具有極高的安全性,到目前為止,除了用窮舉搜索法對(duì)DES進(jìn)行攻擊外,還沒有發(fā)現(xiàn)更有效的辦法,即到目前為止還沒有發(fā)現(xiàn)DES算法有什么陷門。但隨著計(jì)算機(jī)速度的提高和價(jià)格下降,DES也存在密鑰長(zhǎng)度不足、不夠復(fù)雜以及密鑰傳遞困難等因素,針對(duì)DES存在的問題,人們發(fā)展了許多變形DES算法,比如多重DES、S盒可選擇的DES、具有獨(dú)立子密鑰的DES和G-DES等。
多重DES是將DES進(jìn)行級(jí)聯(lián),在不同密鑰的作用下連續(xù)多次對(duì)一組明文進(jìn)行加密,現(xiàn)在人們建議使用三重DES,并已達(dá)成共識(shí)。三重DES(TDEA)是將128位的密鑰分成兩個(gè)64位的組,用這兩個(gè)密鑰對(duì)明文進(jìn)行三次加解密。假設(shè)兩個(gè)密鑰為K1、K2,首先用密鑰K1對(duì)明文進(jìn)行DES加密,然后用K2對(duì)上面加密后的結(jié)果進(jìn)行DES解密,最后再用密鑰K1對(duì)解密后的信息進(jìn)行DES加密。據(jù)稱,目前尚無人找到針對(duì)此方案的攻擊方法。
S盒可選擇的DES也稱交換S盒的DES算法。它可使S盒的次序隨密鑰而變化或使S盒的內(nèi)容本身可變。
3.2.2 其他對(duì)稱分組密碼
(1)國(guó)際數(shù)據(jù)加密算法IDEA
國(guó)際數(shù)據(jù)加密算法(International Data Encryption Algorithm,IDEA)是賴學(xué)家(Xuejia Lai)和梅西(Massey)開發(fā)的,在1990年首次成型,稱為PES(建議的加密標(biāo)準(zhǔn))。次年,設(shè)計(jì)者對(duì)該算法進(jìn)行了強(qiáng)化并稱之為IPES(改進(jìn)的建議加密標(biāo)準(zhǔn))。1992年改名為IDEA,即“國(guó)際加密標(biāo)準(zhǔn)”。
IDEA算法的密鑰長(zhǎng)度為128位,每次加密一個(gè)64位的數(shù)據(jù)塊。IDEA密碼中使用了3種不同的運(yùn)算,即逐位異或運(yùn)算、模2加運(yùn)算和模2+1乘運(yùn)算。
IDEA算法由8圈迭代和隨后的一個(gè)輸出變換組成。它將64位的數(shù)據(jù)分成4塊,每個(gè)16位,令這4個(gè)子塊作為迭代第一輪的輸出,全部共8圈迭代。每圈迭代都是4個(gè)子塊彼此間以及16位的子密鑰進(jìn)行異或、模2加運(yùn)算、模2+1乘運(yùn)算。任何一輪迭代,第三和第四子塊互換。
IDEA有大量的弱密鑰,這些弱密鑰是否會(huì)威脅它的安全性還是一個(gè)謎。
(2)LOKI算法
LOKI算法作為DES的一種潛在替代算法于1990年在密碼學(xué)界首次亮相。LOKI和DES一樣以64位二進(jìn)制分組加密數(shù)據(jù),也使用64位密鑰(只是其中無奇偶校驗(yàn)位),所有64位均為密鑰。LOKI密鑰公布之后,有關(guān)專家對(duì)其進(jìn)行了研究破譯并證明不大于14圈的LOKI算法極易受到差分密碼分析等的攻擊。不過,這仍然優(yōu)于56位密鑰的DES。
- unidbg逆向工程:原理與實(shí)踐
- 數(shù)字安全藍(lán)皮書:本質(zhì)屬性與重要特征
- 工業(yè)物聯(lián)網(wǎng)安全
- Preventing Digital Extortion
- .NET安全攻防指南(上冊(cè))
- Python Penetration Testing Cookbook
- Kali Linux Wireless Penetration Testing Cookbook
- 軟件安全保障體系架構(gòu)
- API安全技術(shù)與實(shí)戰(zhàn)
- End to End GUI Development with Qt5
- INSTANT Apple Configurator How-to
- VMware vCloud Security
- Bug Bounty Hunting Essentials
- 計(jì)算機(jī)網(wǎng)絡(luò)安全實(shí)驗(yàn)指導(dǎo)
- Real-World SRE