網絡空間安全重點規劃叢書編審委員會顧問委員會主任:沈昌祥(中國工程院院士)
特別顧問:姚期智(美國國家科學院院士、美國人文及科學院院士、中國科學院院士、“圖靈獎”獲得者)
何德全(中國工程院院士)蔡吉人(中國工程院院士)
方濱興(中國工程院院士)
主任:封化民
副主任:韓臻李建華王小云張煥國馮登國
委員:(按姓氏拼音為序)
曹珍富陳克非陳興蜀杜瑞穎段海新高嶺
宮力谷大武何大可侯整風胡愛群胡道元
黃繼武黃劉生荊繼武寇衛東來學嘉李暉
劉建偉劉建亞馬建峰毛文波裴定一錢德沛
秦玉海秦志光卿斯漢石文昌汪烈軍王懷民
王勁松王軍王麗娜王美琴王清賢王新梅
王育民吳曉平謝冬青徐明許進楊波
楊庚楊義先俞能海張功萱張紅旗張宏莉
張敏情張玉清鄭東周福才
叢書策劃:張民21世紀是信息時代,信息已成為社會發展的重要戰略資源,社會的信息化已成為當今世界發展的潮流和核心,而信息安全在信息社會中將扮演極為重要的角色,它會直接關系到國家安全、企業經營和人們的日常生活。隨著信息安全產業的快速發展,全球對信息安全人才的需求量不斷增加,但我國目前信息安全人才極度匱乏,遠遠不能滿足金融、商業、公安、軍事和政府等部門的需求。要解決供需矛盾,必須加快信息安全人才的培養,以滿足社會對信息安全人才的需求。為此,教育部繼2001年批準在武漢大學開設信息安全本科專業之后,又批準了多所高等院校設立信息安全本科專業,而且許多高校和科研院所已設立了信息安全方向的具有碩士和博士學位授予權的學科點。
信息安全是計算機、通信、物理、數學等領域的交叉學科,對于這一新興學科的培養模式和課程設置,各高校普遍缺乏經驗,因此中國計算機學會教育專業委員會和清華大學出版社聯合主辦了“信息安全專業教育教學研討會”等一系列研討活動,并成立了“高等院校信息安全專業系列教材”編審委員會,由我國信息安全領域著名專家肖國鎮教授擔任編委會主任,指導“高等院校信息安全專業系列教材”的編寫工作。編委會本著研究先行的指導原則,認真研討國內外高等院校信息安全專業的教學體系和課程設置,進行了大量前瞻性的研究工作,而且這種研究工作將隨著我國信息安全專業的發展不斷深入。系列教材的作者都是既在本專業領域有深厚的學術造詣、又在教學第一線有豐富的教學經驗的學者、專家。
該系列教材是我國第一套專門針對信息安全專業的教材,其特點是:
①體系完整、結構合理、內容先進。
②適應面廣:能夠滿足信息安全、計算機、通信工程等相關專業對信息安全領域課程的教材要求。
③立體配套:除主教材外,還配有多媒體電子教案、習題與實驗指導等。
④版本更新及時,緊跟科學技術的新發展。
在全力做好本版教材,滿足學生用書的基礎上,還經由專家的推薦和審定,遴選了一批國外信息安全領域優秀的教材加入到系列教材中,以進一步滿足大家對外版書的需求。“高等院校信息安全專業系列教材”已于2006年年初正式列入普通高等教育“十一五”國家級教材規劃。
2007年6月,教育部高等學校信息安全類專業教學指導委員會成立大會暨第一次會議在北京勝利召開。本次會議由教育部高等學校信息安全類專業教學指導委員會主任單位北京工業大學和北京電子科技學院主辦,清華大學出版社協辦。教育部高等學校信息安全類專業教學指導委員會的成立對我國信息安全專業的發展起到重要的指導和推動作用。2006年教育部給武漢大學下達了“信息安全專業指導性專業規范研制”的教學科研項目。2007年起該項目由教育部高等學校信息安全類專業教學指導委員會組織實施。在高教司和教指委的指導下,項目組團結一致,努力工作,克服困難,歷時5年,制定出我國第一個信息安全專業指導性專業規范,于2012年年底通過經教育部高等教育司理工科教育處授權組織的專家組評審,并且已經得到武漢大學等許多高校的實際使用。2013年,新一屆“教育部高等學校信息安全專業教學指導委員會”成立。經組織審查和研究決定,2014年以“教育部高等學校信息安全專業教學指導委員會”的名義正式發布《高等學校信息安全專業指導性專業規范》(由清華大學出版社正式出版)。
現代密碼學(第4版)出版說明2015年6月,國務院學位委員會、教育部出臺增設“網絡空間安全”為一級學科的決定,將高校培養網絡空間安全人才提到新的高度。2016年6月,中央網絡安全和信息化領導小組辦公室(下文簡稱中央網信辦)、國家發展和改革委員會、教育部、科學技術部、工業和信息化部及人力資源和社會保障部六大部門聯合發布《關于加強網絡安全學科建設和人才培養的意見》(中網辦發文\[2016\]4號)。為貫徹落實《關于加強網絡安全學科建設和人才培養的意見》,進一步深化高等教育教學改革,促進網絡安全學科專業建設和人才培養,促進網絡空間安全相關核心課程和教材建設,在教育部高等學校信息安全專業教學指導委員會和中央網信辦資助的網絡空間安全教材建設課題組的指導下,啟動了“網絡空間安全重點規劃叢書”的工作,由教育部高等學校信息安全專業教學指導委員會秘書長封化民校長擔任編委會主任。本規劃叢書基于“高等院校信息安全專業系列教材”堅實的工作基礎和成果、陣容強大的編審委員會和優秀的作者隊伍,目前已經有多本圖書獲得教育部和中央網信辦等機構評選的“普通高等教育本科國家級規劃教材”、“普通高等教育精品教材”、“中國大學出版社圖書獎”和“國家網絡安全優秀教材獎”等多個獎項。
“網絡空間安全重點規劃叢書”將根據《高等學校信息安全專業指導性專業規范》(及后續版本)和相關教材建設課題組的研究成果不斷更新和擴展,進一步體現科學性、系統性和新穎性,及時反映教學改革和課程建設的新成果,并隨著我國網絡空間安全學科的發展不斷完善,力爭為我國網絡空間安全相關學科專業的本科和研究生教材建設、學術出版與人才培養做出更大的貢獻。
我們的Email地址是:zhangm@tup.tsinghua.edu.cn,聯系人:張民。
“網絡空間安全重點規劃叢書”編審委員會當今世界,互聯網深刻改變了人們的生產和生活方式,但我們在網絡安全方面卻面臨著嚴峻挑戰。從宏觀上說,網絡安全是事關國家安全的重大戰略問題——沒有網絡安全就沒有國家安全;從微觀上看,網絡安全關乎我們每個人的信息安全。網絡安全指網絡系統中硬件、軟件及其系統中的數據安全。從本質上說,網絡安全就是網絡上的信息安全。
信息安全又分為系統安全(包括操作系統的安全、數據庫系統的安全等)、數據安全(包括數據的安全存儲、安全傳輸)和內容安全(包括病毒的防護、不良內容的過濾等)3個層次,是一個綜合、交叉的學科領域,要利用數學、電子、信息、通信、計算機等諸多學科的長期知識積累和最新發展成果。信息安全研究的內容很多,涉及安全體系結構、安全協議、密碼理論、信息分析、安全監控、應急處理等,其中密碼技術是保障數據安全的關鍵技術。
密碼技術中的加密方法包括單鑰密碼體制(又稱為對稱密碼體制)和公鑰密碼體制,而單鑰密碼體制又包括流密碼和分組密碼。本書在第1章介紹現代密碼學的基本概念后,在第2~4章分別介紹流密碼、分組密碼、公鑰密碼。不管哪種密碼體制都需要用到密鑰,因此密鑰分配與密鑰管理也是密碼技術的重要內容,這部分內容在第5章介紹。信息的安全性除要考慮保密性外,還需考慮信息的真實性、完整性、順序性、時間性以及不可否認性。本書以3章的篇幅(第6章消息認證和哈希算法、第7章數字簽字和認證協議、第8章密碼協議)介紹這部分內容。第9章可證明安全介紹如何刻畫公鑰密碼體制的語義安全性。第10章網絡加密與認證介紹加密技術和認證技術在網絡中的具體應用。書中4.1.5節的卡米歇爾定理、4.1.11節循環群、4.1.12節循環群的選取、8.3節安全多方計算協議、第9章可證明安全供研究生使用。
本書自2003年8月第1版以來,已被150余所學校作為教材,曾獲批普通高等教育“十一五”國家級規劃教材,2016年獲得首屆國家網絡安全優秀教材獎。第4版在第3版的基礎上進行修訂,因為內容陳舊而去掉了原5.3節,重新編寫了第9章,增加了3.7節、3.8節、6.1.4節、6.6節和7.4節。
本書的特點:一是內容新穎、深入、全面,涵蓋了現代密碼學的最新成果;二是內容的安排充分考慮到作為教材,如何方便地在教學中使用。在本書的編寫過程中,參考了國內外的有關著作和文獻,特別是Stallings、王育民、盧開澄、朱文余等人的著作。
西安電子科技大學通信工程學院的肖國鎮教授作為本書的責任編委,認真審閱了全書并提出了許多寶貴的指導意見,對此表示特別的感謝。清華大學出版社張民編輯為本書的出版做了大量的工作,在此表示衷心的感謝。
由于作者水平有限,書中不足在所難免,懇請讀者批評指正。
現代密碼學(第4版)前言
作者2017年4月
楊波,北京大學學士,西安電子科技大學碩士、博士,陜西師范大學計算機科學學院教授、博士生導師,陜西省百人計劃特聘教授,中國密碼學會理事,中國密碼學會密碼算法專業委員會委員,《密碼學報》編委。曾任華南農業大學信息學院、軟件學院院長。2011年起在陜西師范大學計算機科學學院工作。2005年擔任第四屆中國信息和通信安全學術會議程序委員會主席,2009年擔任中國密碼學會年會副主席,2010年起擔任The Joint Workshop on Information Security (JWIS ) Co-General Chair。主持多項國家自然科學基金、863計劃、國家密碼發展基金、國防科技重點實驗室基金、陜西省自然科學基金項目。
第1章引言1
1.1信息安全面臨的威脅1
1.1.1安全威脅1
1.1.2入侵者和病毒2
1.1.3安全業務3
1.2信息安全模型4
1.3密碼學基本概念5
1.3.1保密通信系統5
1.3.2密碼體制分類7
1.3.3密碼攻擊概述7
1.4幾種古典密碼8
1.4.1單表代換密碼9
1.4.2多表代換密碼10
習題11
第2章流密碼13
2.1流密碼的基本概念13
2.1.1同步流密碼13
2.1.2有限狀態自動機14
2.1.3密鑰流產生器15
2.2線性反饋移位寄存器16
2.3線性移位寄存器的一元多項式表示18
2.4m序列的偽隨機性21
2.5m序列密碼的破譯23
2.6非線性序列26
2.6.1Geffe序列生成器26
2.6.2JK觸發器27
2.6.3Pless生成器28現代密碼學(第4版)目錄2.6.4鐘控序列生成器28
習題30
第3章分組密碼體制32
3.1分組密碼概述32
3.1.1代換33
3.1.2擴散和混淆34
3.1.3Feistel密碼結構35
3.2數據加密標準38
3.2.1DES描述38
3.2.2二重DES43
3.2.3兩個密鑰的三重DES44
3.2.43個密鑰的三重DES44
3.3差分密碼分析與線性密碼分析45
3.3.1差分密碼分析45
3.3.2線性密碼分析46
3.4分組密碼的運行模式47
3.4.1電碼本模式47
3.4.2密碼分組鏈接模式48
3.4.3密碼反饋模式49
3.4.4輸出反饋模式51
3.5IDEA52
3.5.1設計原理52
3.5.2加密過程54
3.6AES 算法——Rijndael58
3.6.1Rijndael的數學基礎和設計思想58
3.6.2算法說明61
3.7中國商用密碼算法SM469
3.8祖沖之密碼73
3.8.1算法中的符號及含義73
3.8.2祖沖之密碼的算法結構74
3.8.3祖沖之密碼的運行79
3.8.4基于祖沖之密碼的機密性算法 128EEA379
習題81
第4章公鑰密碼83
4.1密碼學中一些常用的數學知識83
4.1.1群、環、域83
4.1.2素數和互素數85
4.1.3模運算86
4.1.4模指數運算88
4.1.5費爾馬定理、歐拉定理、卡米歇爾定理89
4.1.6素性檢驗92
4.1.7歐幾里得算法95
4.1.8中國剩余定理98
4.1.9離散對數101
4.1.10平方剩余102
4.1.11循環群105
4.1.12循環群的選取106
4.1.13雙線性映射107
4.1.14計算復雜性108
4.2公鑰密碼體制的基本概念109
4.2.1公鑰密碼體制的原理110
4.2.2公鑰密碼算法應滿足的要求111
4.2.3對公鑰密碼體制的攻擊112
4.3RSA算法113
4.3.1算法描述113
4.3.2RSA算法中的計算問題115
4.3.3一種改進的RSA實現方法116
4.3.4RSA的安全性116
4.3.5對RSA的攻擊118
4.4背包密碼體制119
4.5Rabin密碼體制121
4.6NTRU公鑰密碼系統123
4.7橢圓曲線密碼體制124
4.7.1橢圓曲線124
4.7.2有限域上的橢圓曲線125
4.7.3橢圓曲線上的點數127
4.7.4明文消息到橢圓曲線上的嵌入127
4.7.5橢圓曲線上的密碼128
4.8SM2橢圓曲線公鑰密碼加密算法130
習題133
第5章密鑰分配與密鑰管理135
5.1單鑰加密體制的密鑰分配135
5.1.1密鑰分配的基本方法135
5.1.2一個實例135
5.1.3密鑰的分層控制137
5.1.4會話密鑰的有效期137
5.1.5無中心的密鑰控制137
5.1.6密鑰的控制使用138
5.2公鑰加密體制的密鑰管理139
5.2.1公鑰的分配139
5.2.2用公鑰加密分配單鑰密碼體制的密鑰141
5.2.3Diffie\|Hellman密鑰交換143
5.3隨機數的產生144
5.3.1隨機數的使用144
5.3.2隨機數源145
5.3.3偽隨機數產生器145
5.3.4基于密碼算法的隨機數產生器147
5.3.5隨機比特產生器149
5.4秘密分割150
5.4.1秘密分割門限方案150
5.4.2Shamir門限方案151
5.4.3基于中國剩余定理的門限方案152
習題154
第6章消息認證和哈希函數156
6.1消息認證碼156
6.1.1消息認證碼的定義及使用方式156
6.1.2產生MAC的函數應滿足的要求157
6.1.3數據認證算法158
6.1.4基于祖沖之密碼的完整性算法128EIA3159
6.2哈希函數161
6.2.1哈希函數的定義及使用方式161
6.2.2哈希函數應滿足的條件162
6.2.3生日攻擊164
6.2.4迭代型哈希函數的一般結構165
6.3MD5哈希算法166
6.3.1算法描述166
6.3.2MD5的壓縮函數169
6.3.3MD5的安全性170
6.4安全哈希算法171
6.4.1算法描述171
6.4.2SHA的壓縮函數172
6.4.3SHA與MD5的比較174
6.4.4對SHA的攻擊現狀174
6.5HMAC175
6.5.1HMAC的設計目標175
6.5.2算法描述175
6.5.3HMAC的安全性177
6.6SM3哈希算法178
6.6.1SM3哈希算法的描述178
6.6.2SM3哈希算法的安全性179
習題181
第7章數字簽名和認證協議182
7.1數字簽名的基本概念182
7.1.1數字簽名應滿足的要求182
7.1.2數字簽名的產生方式183
7.1.3數字簽名的執行方式184
7.2數字簽名標準186
7.2.1DSS的基本方式186
7.2.2數字簽名算法DSA187
7.3其他簽名方案188
7.3.1基于離散對數問題的數字簽名體制188
7.3.2基于大數分解問題的數字簽名體制192
7.3.3基于身份的數字簽名體制193
7.4SM2橢圓曲線公鑰密碼簽名算法194
7.5認證協議196
7.5.1相互認證196
7.5.2單向認證200
習題201
第8章密碼協議202
8.1一些基本協議202
8.1.1智力撲克202
8.1.2擲硬幣協議203
8.1.3數字承諾協議204
8.1.4不經意傳輸協議205
8.2零知識證明208
8.2.1交互式證明系統208
8.2.2交互式證明系統的定義209
8.2.3交互式證明系統的零知識性209
8.2.4非交互式證明系統212
8.2.5適應性安全的非交互式零知識證明213
8.2.6零知識證明協議的組合213
8.2.7圖的三色問題的零知識證明214
8.2.8知識證明215
8.2.9簡化的Fiat\|Shamir身份識別方案218
8.2.10FiatShamir身份識別方案219
8.3安全多方計算協議220
8.3.1安全多方計算問題220
8.3.2半誠實敵手模型221
8.3.3惡意敵手模型225
習題228
第9章可證明安全229
9.1語義安全的公鑰密碼體制的定義229
9.1.1選擇明文攻擊下的不可區分性229
9.1.2公鑰加密方案在選擇密文攻擊下的不可區分性233
9.1.3公鑰加密方案在適應性選擇密文攻擊下的不可區分性235
9.1.4歸約236
9.2語義安全的RSA加密方案237
9.2.1RSA問題和RSA假設237
9.2.2選擇明文安全的RSA加密238
9.2.3選擇密文安全的RSA加密240
9.3Paillier公鑰密碼系統243
9.3.1合數冪剩余類的判定243
9.3.2合數冪剩余類的計算244
9.3.3基于合數冪剩余類問題的概率加密方案246
9.3.4基于合數冪剩余類問題的單向陷門置換247
9.3.5Paillier密碼系統的性質248
9.4CramerShoup密碼系統249
9.4.1CramerShoup密碼系統的基本機制249
9.4.2CramerShoup密碼系統的安全性證明250
9.5RSAFDH簽名方案252
9.5.1RSA簽名方案252
9.5.2RSAFDH簽名方案的描述253
9.5.3RSAFDH簽名方案的改進255
9.6BLS短簽名方案257
9.6.1BLS短簽名方案所基于的安全性假設257
9.6.2BLS短簽名方案描述257
9.6.3BLS短簽名方案的改進一259
9.6.4BLS短簽名方案的改進二259
9.7基于身份的密碼體制260
9.7.1基于身份的密碼體制定義和安全模型260
9.7.2隨機諭言機模型下的基于身份的密碼體制263
9.8分叉引理273
習題275
第10章網絡加密與認證277
10.1網絡通信加密277
10.1.1開放系統互連和TCP/IP分層模型277
10.1.2網絡加密方式278
10.2Kerberos認證系統281
10.2.1Kerberos V4281
10.2.2Kerberos區域與多區域的Kerberos284
10.3X.509認證業務285
10.3.1證書285
10.3.2認證過程288
10.4PGP289
10.4.1運行方式289
10.4.2密鑰和密鑰環293
10.4.3公鑰管理298
習題301
參考文獻302
第3章分組密碼體制
3.1分組密碼概述在許多密碼系統中,單鑰分組密碼是系統安全的一個重要組成部分,用分組密碼易于構造偽隨機數生成器、流密碼、消息認證碼(MAC)和哈希函數等,還可進而成為消息認證技術、數據完整性機制、實體認證協議以及單鑰數字簽字體制的核心組成部分。實際應用中對于分組密碼可能會提出多方面的要求,除了安全性外,還有運行速度、存儲量(程序的長度、數據分組長度、高速緩存大小)、實現平臺(硬件、軟件、芯片)、運行模式等限制條件。這些都需要與安全性要求之間進行適當的折中選擇。
分組密碼是將明文消息編碼表示后的數字序列x0,x1,…,xi,…劃分成長為n的組x=(x0,x1,…,xn-1),各組(長為n的矢量)分別在密鑰k=(k0,k1,…,kt-1)控制下變換成等長的輸出數字序列y=(y0,y1,…,ym-1)(長為m的矢量),其加密函數E:Vn×KVm,Vn和Vm分別是n維和m維矢量空間,K為密鑰空間,如圖31所示。它與流密碼的不同之處在于輸出的每一位數字不是只與相應時刻輸入的明文數字有關,而是與一組長為n的明文數字有關。在相同密鑰下,分組密碼對長為n的輸入明文組所實施的變換是等同的,所以只需研究對任一組明文數字的變換規則。這種密碼實質上是字長為n的數字序列的代換密碼。
圖31分組密碼框圖
通常取m=n。若m>n,則為有數據擴展的分組密碼。若m
(1)分組長度n要足夠大,使分組代換字母表中的元素個數2n足夠大,防止明文窮舉攻擊法奏效。DES、IDEA、FEAL和LOKI等分組密碼都采用n=64,在生日攻擊下用232組密文成功概率為1/2,同時要求232×64比特=215Mbyte存儲,故采用窮舉攻擊是不現實的。
(2)密鑰量要足夠大(即置換子集中的元素足夠多),盡可能消除弱密鑰并使所有密現代密碼學(第4版)第3章分組密碼體制鑰同等地好,以防止密鑰窮舉攻擊奏效。但密鑰又不能過長,以便于密鑰的管理。DES采用56比特密鑰,現在看來太短了,IDEA采用128比特密鑰,據估計,在今后30~40年內采用80比特密鑰是足夠安全的。
(3)由密鑰確定置換的算法要足夠復雜,充分實現明文與密鑰的擴散和混淆,沒有簡單的關系可循,能抗擊各種已知的攻擊,如差分攻擊和線性攻擊;有高的非線性階數,實現復雜的密碼變換;使對手破譯時除了用窮舉法外,無其他捷徑可循。
(4)加密和解密運算簡單,易于軟件和硬件高速實現。如將分組n劃分為子段,每段長為8、16或者32。在以軟件實現時,應選用簡單的運算,使作用于子段上的密碼運算易于以標準處理器的基本運算,如加、乘、移位等實現,避免使用以軟件難以實現的逐比特置換。為了便于硬件實現,加密和解密過程之間的差別應僅在于由秘密密鑰所生成的密鑰表不同而已。這樣,加密和解密就可使用同一器件實現。設計的算法采用規則的模塊結構,如多輪迭代等,以便于軟件和VLSI快速實現。此外,差錯傳播和數據擴展要盡可能小。
(5)數據擴展盡可能小。一般無數據擴展,在采用同態置換和隨機化加密技術時可引入數據擴展。
(6)差錯傳播盡可能小。
要實現上述幾點要求并不容易。首先,要在理論上研究有效而可靠的設計方法,而后進行嚴格的安全性檢驗,并且要易于實現。
下面介紹設計分組密碼的一些常用方法。
3.1.1代換
如果明文和密文的分組長都為n比特,則明文的每一個分組都有2n個可能的取值。為使加密運算可逆(使解密運算可行),明文的每一個分組都應產生唯一的一個密文分組,這樣的變換是可逆的,稱明文分組到密文分組的可逆變換為代換。不同可逆變換的個數有2n!個。
圖32代換結構圖32表示n=4的代換密碼的一般結構,4比特輸入產生16個可能輸入狀態中的一個,由代換結構將這一狀態映射為16個可能輸出狀態中的一個,每一輸出狀態由4個密文比特表示。加密映射和解密映射可由代換表來定義,如表31所示。這種定義法是分組密碼最常用的形式,能用于定義明文和密文之間的任何可逆映射。表31與圖32對應的代換表
明文密文明文密文00001110100000110001010010011010001011011010011000110001101111000100001011000101010111111101100101101011111000000111100011110111密文明文密文明文00001110100001110001001110011101001001001010100100111000101101100100000111001011010111001101001001101010111000000111111111110101但這種代換結構在實用中還有一些問題需考慮。如果分組長度太小,如n=4,系統則等價于古典的代換密碼,容易通過對明文的統計分析而攻破。這個弱點不是代換結構固有的,只是因為分組長度太短。如果分組長度n足夠大,而且從明文到密文可有任意可逆的代換,那么明文的統計特性將被隱藏而使以上的攻擊不能奏效。
然而,從實現的角度來看,分組長度很大的可逆代換結構是不實際的。仍以表31為例,該表定義了n=4時從明文到密文的一個可逆映射,其中第二列是每個明文分組對應的密文分組的值,可用來定義這個可逆映射。因此從本質上來說,第二列是從所有可能的映射中決定某一特定映射的密鑰。在這個例子中,密鑰需要64比特。一般,對n比特的代換結構,密鑰的大小是n×2n比特。如對64比特的分組,密鑰大小應是64×264=270≈1021比特,因此難以處理。實際中常將n分成較小的段,例如可選n=r·n0,其中r和n0都是正整數,將設計n個變量的代換變為設計r個較小的子代換,而每個子代換只有n0個輸入變量。一般n0都不太大,稱每個子代換為代換盒,簡稱為S盒。例如DES中將輸入為48比特、輸出為32比特的代換用8個S盒來實現,每個S盒的輸入端數僅為6比特,輸出端數僅為4比特。
3.1.2擴散和混淆
擴散和混淆是由Shannon提出的設計密碼系統的兩個基本方法,目的是抗擊敵手對密碼系統的統計分析。如果敵手知道明文的某些統計特性,如消息中不同字母出現的頻率,或可能出現的特定單詞或短語,而且這些統計特性以某種方式在密文中反映出來,敵手就有可能得出加密密鑰或其一部分,或包含加密密鑰的一個可能密鑰集合。在Shannon稱之為理想密碼的密碼系統中,密文的所有統計特性都與所使用的密鑰獨立。圖32討論的代換密碼就是這樣的一個密碼系統,然而是不實用的。
所謂擴散,就是將明文的統計特性散布到密文中去,實現方式是使得密文中每一位由明文中多位產生。例如,對英文消息M=m1m2m3…的加密操作yn=chr(∑ki=1ord(mn+i)(mod26))其中ord(mi)是求字母mi對應的序號,chr(i)是求序號i對應的字母,密文字母yn是由明文中k個連續的字母相加而得。這時明文的統計特性將被散布到密文,因而每一字母在密文中出現的頻率比在明文中出現的頻率更接近于相等,雙字母及多字母出現的頻率也更接近于相等。在二元分組密碼中,可對數據重復執行某個置換再對這一置換作用以一個函數,便可獲得擴散。
分組密碼在將明文分組依靠密鑰變換到密文分組時,擴散的目的是使明文和密文之間的統計關系變得盡可能復雜,以使敵手無法得到密鑰。混淆是使密文和密鑰之間的統計關系變得盡可能復雜,以使敵手無法得到密鑰。因此即使敵手能得到密文的一些統計關系,由于密鑰和密文之間統計關系復雜化,敵手無法得到密鑰。使用復雜的代換算法可得預期的混淆效果,而簡單的線性代換函數得到的混淆效果不夠理想。
擴散和混淆成功地實現了分組密碼的本質屬性,因而成為設計現代分組密碼的基礎。
3.1.3Feistel密碼結構
很多分組密碼的結構從本質上說都是基于一個稱為Feistel網絡的結構。Feistel提出利用乘積密碼可獲得簡單的代換密碼,乘積密碼指順序地執行兩個或多個基本密碼系統,使得最后結果的密碼強度高于每個基本密碼系統產生的結果,Feistel還提出了實現代換和置換的方法。其思想實際上是Shannon提出的利用乘積密碼實現混淆和擴散思想的具體應用。
1.Feistel加密結構
圖33是Feistel網絡示意圖,加密算法的輸入是分組長為2w的明文和一個密鑰K。將每組明文分成左右兩半L0和R0,在進行完n輪迭代后,左右兩半再合并到一起以產生密文分組。其第i輪迭代的輸入為前輪輸出的函數:Li=Ri-1
Ri=Li-1F(Ri-1,Ki)其中Ki是第i輪用的子密鑰,由加密密鑰K得到。一般,各輪子密鑰彼此不同而且與K也不同。
圖33Feistel網絡
Feistel網絡中每輪結構都相同,每輪中右半數據被作用于輪函數F后,再與左半數據進行異或運算,這一過程就是上面介紹的代換。每輪輪函數的結構都相同,但以不同的子密鑰Ki作為參數。代換過程完成后,再交換左、右兩半數據,這一過程稱為置換。這種結構是Shannon提出的代換置換網絡(SubstitutionPermutationNetwork,SPN)的特有形式。
Feistel網絡的實現與以下參數和特性有關:
(1)分組大小。分組越大則安全性越高,但加密速度就越慢。分組密碼設計中最為普遍使用的分組大小是64比特。
(2)密鑰大小。密鑰越長則安全性越高,但加密速度就越慢。現在普遍認為64比特或更短的密鑰是不安全的,通常使用128比特長的密鑰。
(3)輪數。單輪結構遠不足以保證安全性,多輪結構可提供足夠的安全性。典型地,輪數取為16。
(4)子密鑰產生算法。該算法的復雜性越高,則密碼分析的困難性就越大。
(5)輪函數。輪函數的復雜性越高,密碼分析的困難性也越大。
在設計Feistel網絡時,還要考慮以下兩個問題:
(1)快速的軟件實現。在很多情況下,算法是被鑲嵌在應用程序中,因而無法用硬件實現。此時算法的執行速度是考慮的關鍵。
(2)算法容易分析。如果算法能被無疑義地解釋清楚,就可容易地分析算法抵抗攻擊的能力,有助于設計高強度的算法。
2.Feistel解密結構
Feistel解密過程本質上和加密過程是一樣的,算法使用密文作為輸入,但使用子密鑰Ki的次序與加密過程相反,即第一輪使用Kn,第二輪使用Kn-1,一直下去,最后一輪使用K1。這一特性保證了解密和加密可采用同一算法。
圖34的左邊表示16輪Feistel網絡的加密過程,右邊表示解密過程,加密過程由上而下,解密過程由下而上。為清楚起見,加密算法每輪的左右兩半用LEi和REi表示,解密算法每輪的左右兩半用LDi和RDi表示。圖中右邊標出了解密過程中每一輪的中間值與左邊加密過程中間值的對應關系,即加密過程第i輪的輸出是LEi‖REi(‖表示鏈接),解密過程第16-i輪相應的輸入是RDi‖LDi。
圖34Feistel加解密過程
加密過程的最后一輪執行完后,兩半輸出再經交換,因此密文是RE16‖LE16。解密過程取以上密文作為同一算法的輸入,即第一輪輸入是RE16‖LE16,等于加密過程第16輪兩半輸出交換后的結果。現在顯示解密過程第一輪的輸出等于加密過程第16輪輸入左右兩半的交換值。
在加密過程中:LE16=RE15
RE16=LE15F(RE15,K16)在解密過程中:LD1=RD0=LE16=RE15
RD1=LD0F(RD0,K16)=RE16F(RE15,K16)
=LE15F(RE15,K16)F(RE15,K16)
=LE15所以解密過程第一輪的輸出為LE15‖RE15,等于加密過程第16輪輸入左右兩半交換后的結果。容易證明這種對應關系在16輪中每輪都成立。一般,加密過程的第i輪有:LEi=REi-1
REi=LEi-1F(REi-1,Ki)因此REi-1=LEi
LEi-1=REiF(REi-1,Ki)=REiF(LEi,Ki)以上兩式描述了加密過程中第i輪的輸入與第i輪輸出的函數關系,由此關系可得圖34右邊顯示的LDi和RDi的取值關系。
最后可以看到,解密過程最后一輪的輸出是RE0‖LE0,左右兩半再經一次交換后即得最初的明文。
3.2數據加密標準DES(DataEncryptionStandard)是迄今為止世界上最為廣泛使用和流行的一種分組密碼算法,它的分組長度為64比特,密鑰長度為56比特,它是由美國IBM公司研制的,是早期的稱作Lucifer密碼的一種發展和修改。DES在1975年3月17日首次被公布在聯邦記錄中,在做了大量的公開討論后于1977年1月15日正式批準并作為美國聯邦信息處理標準,即FIPS46,同年7月15日開始生效。規定每隔5年由美國國家保密局(NationalSecurityAgency,NSA)作出評估,并重新批準它是否繼續作為聯邦加密標準。最后一次評估是在1994年1月,美國已決定1998年12月以后將不再使用DES。1997年,DESCHALL小組經過近4個月的努力,通過Internet搜索了3×1016個密鑰,找出了DES的密鑰,恢復出了明文。1998年5月美國EFF(ElectronicsFrontierFoundation)宣布,他們將一臺價值20萬美元的計算機改裝成的專用解密機,用56小時破譯了56比特密鑰的DES。美國國家標準和技術協會已征集并進行了幾輪評估篩選,產生了稱為AES(AdvancedEncryptionStandard)的新加密標準。盡管如此,DES對于推動密碼理論的發展和應用起了重大作用,對于掌握分組密碼的基本理論、設計思想和實際應用仍然有著重要的參考價值,下面是這一算法的描述。
3.2.1DES描述
圖35是DES加密算法的框圖,其中明文分組長為64比特,密鑰長為56比特。圖的左邊是明文的處理過程,有3個階段,首先是一個初始置換IP,用于重排明文分組的64比特數據。然后是具有相同功能的16輪變換,每輪中都有置換和代換運算,第16輪變換的輸出分為左右兩半,并被交換次序。最后再經過一個逆初始置換IP-1(為IP的逆)從而產生64比特的密文。除初始置換和逆初始置換外,DES的結構和圖33所示的Feistel密碼結構完全相同。
圖35DES加密算法框圖
圖35的右邊是使用56比特密鑰的方法。密鑰首先通過一個置換函數,然后,對加密過程的每一輪,通過一個左循環移位和一個置換產生一個子密鑰。其中每輪的置換都相同,但由于密鑰被重復迭代,所以產生的每輪子密鑰不相同。
1.初始置換
表32(a)和表32(b)分別給出了初始置換和逆初始置換的定義,為了顯示這兩個置換的確是彼此互逆的,考慮下面64比特的輸入M:表32DES的置換表
(a)初始置換IP58504234261810260524436282012462544638302214664564840322416857494133251791595143352719113615345372921135635547393123157(b)逆初始置換IP-140848165624643239747155523633138646145422623037545135321612936444125220602835343115119592734242105018582633141949175725(c)選擇擴展運算E3212345456789891011121312131415161716171819202120212223242524252627282928293031321(d)置換運算P1672021291228171152326518311028241432273919133062211425M1M2M3M4M5M6M7M8
M9M10M11M12M13M14M15M16
M17M18M19M20M21M22M23M24
M25M26M27M28M29M30M31M32
M33M34M35M36M37M38M39M40
M41M42M43M44M45M46M47M48
M49M50M51M52M53M54M55M56
M57M58M59M60M61M62M63M64
其中Mi是二元數字。由表32(a),得X=IP(M)為:M58M50M42M34M26M18M10M2
M60M52M44M36M28M20M12M4
M62M54M46M38M30M22M14M6
M64M56M48M40M32M24M16M8
M57M49M41M33M25M17M9M1
M59M51M43M35M27M19M11M3
M61M53M45M37M29M21M13M5
M63M55M47M39M31M23M15M7如果再取逆初始置換Y=IP-1(X)=IP-1(IP(M)),可以看出,M各位的初始順序將被恢復。
2.輪結構
圖36是DES加密算法的輪結構,首先看圖的左半部分。將64比特的輪輸入分為
圖36DES加密算法的輪結構
各為32比特的左、右兩半,分別記為L和R。和Feistel網絡一樣,每輪變換可由以下公式表示:Li=Ri-1
Ri=Li-1F(Ri-1,Ki)其中輪密鑰Ki為48比特,函數F(R,K)的計算如圖37所示。輪輸入的右半部分R為32比特,R首先被擴展成48比特,擴展過程由表32(c)定義,其中將R的16個比特各重復一次。擴展后的48比特再與子密鑰Ki異或,然后再通過一個S盒,產生32比特的輸出。該輸出再經過一個由表32(d)定義的置換,產生的結果即為函數F(R,K)的輸出。
圖37函數F(R,K)的計算過程
F中的代換由8個S盒組成,每個S盒的輸入長為6比特、輸出長為4比特,其變換關系由表33定義,每個S盒給出了4個代換(由一個表的4行給出)。表33DES的S盒定義
列
行0123456789101112131415S101441312151183106125907101574142131106121195382411481362111512973105031512824917511314100613S201518146113497213120510131347152814120110691152014711104131581269321531381013154211671205149S301009146315511312711428113709346102851412111512136498153011121251014731101306987415143115212續表
列
行0123456789101112131415S407131430691012851112415113811561503472121101492106901211713151314528433150610113894511127214S502124171011685315130149114112124713150151039862421111013781591256301431181271142136150910453S601211015926801334147511110154271295611314011382914155281237041011311634321295151011141760813S704112141508133129751061113011749110143512215862141113123714101568059236111381410795015142312S801328461511110931450127111513810374125611014922711419121420610131535832114741081315129035611對每個盒Si,其6比特輸入中,第1個和第6個比特形成一個2位二進制數,用來選擇Si的4個代換中的一個。在6比特輸入中,中間4位用來選擇列。行和列選定后,得到其交叉位置的十進制數,將這個數表示為4位二進制數即得這一S盒的輸出。例如,S1的輸入為011001,行選為01(即第1行),列選為1100(即第12列),行列交叉位置的數為9,其4位二進制表示為1001,所以S1的輸出為1001。
S盒的每一行定義了一個可逆代換,圖32(在3.1.1節)表示S1第0行所定義的代換。
3.密鑰的產生
再看圖35和圖36,輸入算法的56比特密鑰首先經過一個置換運算,該置換由表34(a)給出,然后將置換后的56比特分為各為28比特的左、右兩半,分別記為C0和D0。在第i輪分別對Ci-1和Di-1進行左循環移位,所移位數由表34(c)給出。移位后的結果作為下一輪求子密鑰的輸入,同時也作為置換選擇2的輸入。通過置換選擇2產生的48比特的Ki,即為本輪的子密鑰,作為函數F(Ri-1,Ki)的輸入。其中置換選擇2由表34(b)定義。表34DES密鑰編排中使用的表
(a)置換選擇1PC157494133251791585042342618102595143352719113605244366355473931231576254463830221466153453729211352820124(b)置換選擇2PC21417112415328156211023191242681672720132415231374755304051453348444939563453464250362932(c)左循環移位位數輪數12345678910111213141516位數11222222122222214.解密
和Feistel密碼一樣,DES的解密和加密使用同一算法,但子密鑰使用的順序相反。
3.2.2二重DES
……