內容簡介
本書深入地探討特定的、具體的協議,講述如何設計密碼協議,分析做齣設計決策的原因,並指齣其中可能存在的陷阱,從而幫助讀者像密碼學傢一樣思考。本書分為五部分,第 一部分對密碼學進行概述,第二到四部分分彆講述消息安全、密鑰協商、密鑰管理方麵的內容,第五部分介紹標準和專利等其他問題。本書可作為高等院校計算機安全和密碼學相關專業的教材或教學參考書,也可作為應用密碼工程的自學指南。
作者簡介
關於作者CryptographyEngineering:DesignPrinciplesandPracticalApplicationsNielsFeiguso的整個職業生涯都是密碼工程師。在Eindhoven大學學習數學後,他在DigiCash分析、設計和實現用來保護用戶隱私的高級電子支付係統。後來,他擔任Counterpane公司和MacFergus公司的密碼顧問,分析瞭數百個係統並參與瞭幾十個係統的設計。他參與瞭Twofish分組密碼設計,對AES做瞭一些好的初步分析,並參與瞭現在WiFi所使用的加密係統的研發。自2004年以來,他在微軟工作,幫助設計和實現BitLocker磁盤加密係統。他目前在Windows密碼小組工作,負責Windows和其他微軟産品中的加密實現。
BruceSchneier是國際知名的安全技術專傢,被《經濟學人》雜誌稱為“安全教父”。他是14本書的作者,其中包括暢銷書《超過恐懼:在一個不確定的世界中明智地思考安全》《秘密和謊言》和《應用密碼學》,並發錶瞭數百篇文章和學術論文。他的很有影響力的通訊“Crypto-Gram”和博客“SchneieronSecurity”有超過25萬讀者。他是電視和廣播電颱的常客,並且他關於安全和隱私問題的言論經常被報紙引用。他曾多次在國會作證,並且曾在多個政府技術委員會任職。他是BT(原英國電信)的首席安全技術官。
TadayoshiKohno(Yoshi)是華盛頓大學計算機科學與工程係教授。他的研究興趣是提高當前和未來技術的安全性和隱私性。他在2003年對DieboldAccuVote-TS電子投票機的源代碼進行瞭初步安全分析,並從此將研究領域轉嚮瞭從無綫植入式起搏器和除顫器到雲計算的新興安全技術。他獲得瞭國傢科學基金會CAREER奬和AlfredP.Sloan研究奬學金。2007年,鑒於他對應用密碼學的貢獻,入選《麻省理工學院科技評論》全球青年科技創新人纔榜(TR35),是35歲以下的世界創新者之一。他在加州大學聖迭戈分校獲得計算機科學博士學位。
Niels、Bruce和Yoshi是Skein散列函數設計團隊的成員,該團隊是NIST的SHA-3競賽的參與者之一。
目錄
目錄
CryptographyEngineering:DesignPrinciplesandPracticalApplications
齣版者的話
譯者序
前言
《實用密碼學》前言
關於作者
第一部分概述
第1章密碼學研究範圍2
1.1密碼學的作用2
1.2木桶原理3
1.3對手設定4
1.4專業偏執狂5
1.4.1更廣泛的好處5
1.4.2攻擊5
1.5威脅模型6
1.6密碼學不是唯一解決方案7
1.7密碼學是非常難的8
1.8密碼學是簡單的部分8
1.9通用攻擊9
1.10安全性和其他設計準則9
1.10.1安全性和性能9
1.10.2安全性和特性10
1.10.3安全性和演變的係統11
1.11更多閱讀材料11
1.12專業偏執狂練習12
1.12.1時事練習12
1.12.2安全審查練習12
1.13習題13
第2章密碼學簡介14
2.1加密14
2.2認證15
2.3公鑰加密16
2.4數字簽名17
2.5PKI18
2.6攻擊18
2.6.1唯密文攻擊模型19
2.6.2已知明文攻擊模型19
2.6.3選擇明文攻擊模型19
2.6.4選擇密文攻擊模型19
2.6.5區分攻擊的目的20
2.6.6其他類型的攻擊20
2.7深入探討20
2.7.1生日攻擊20
2.7.2中間相遇攻擊21
2.8安全等級22
2.9性能22
2.10復雜性23
2.11習題24
第二部分消息安全
第3章分組密碼26
3.1什麼是分組密碼26
3.2攻擊類型27
3.3理想分組密碼27
3.4分組密碼安全的定義28
3.5實際分組密碼30
3.5.1DES30
3.5.2AES32
3.5.3Serpent34
3.5.4Twofish34
3.5.5其他的AES候選算法36
3.5.6如何選擇分組密碼36
3.5.7如何選擇密鑰長度36
3.6習題37
第4章分組密碼工作模式39
4.1填充39
4.2ECB40
4.3CBC40
4.3.1固定IV40
4.3.2計數器IV41
4.3.3隨機IV41
4.3.4瞬時IV41
4.4OFB42
4.5CTR43
4.6加密與認證44
4.7如何選擇工作模式44
4.8信息泄露44
4.8.1碰撞的可能性45
4.8.2如何處理信息泄露46
4.8.3關於數學證明46
4.9習題47
第5章散列函數48
5.1散列函數的安全性48
5.2實際的散列函數49
5.2.1一種簡單但不安全的散列函數50
5.2.2MD550
5.2.3SHA-151
5.2.4SHA-224、SHA-256、SHA-384和SHA-51251
5.3散列函數的缺陷52
5.3.1長度擴充52
5.3.2部分消息碰撞52
5.4修復缺陷53
5.4.1一個臨時的修復方法53
5.4.2一個更有效的修復方法53
5.4.3其他修復方法54
5.5散列算法的選擇55
5.6習題55
第6章消息認證碼56
6.1MAC的作用56
6.2理想MAC與MAC的安全性56
6.3CBC-MAC和CMAC57
6.4HMAC58
6.5GMAC59
6.6如何選擇MAC60
6.7MAC的使用60
6.8習題61
第7章安全信道63
7.1安全信道的性質63
7.1.1角色63
7.1.2密鑰63
7.1.3消息或字節流64
7.1.4安全性質64
7.2認證與加密的順序65
7.3安全信道設計概述66
7.3.1消息編號66
7.3.2認證67
7.3.3加密67
7.3.4組織格式68
7.4詳細設計68
7.4.1初始化68
7.4.2發送消息69
7.4.3接收消息70
7.4.4消息的順序71
7.5備選方案71
7.6習題72
第8章實現上的問題I74
8.1創建正確的程序75
8.1.1規範75
8.1.2測試和修復75
8.1.3不嚴謹的態度76
8.1.4如何著手76
8.2製作安全的軟件77
8.3保守秘密77
8.3.1清除狀態77
8.3.2交換文件79
8.3.3高速緩衝存儲器79
8.3.4內存保留數據80
8.3.5其他程序的訪問82
8.3.6數據完整性82
8.3.7需要做的工作83
8.4代碼質量83
8.4.1簡潔性83
8.4.2模塊化83
8.4.3斷言84
8.4.4緩衝區溢齣84
8.4.5測試85
8.5側信道攻擊85
8.6一些其他的話86
8.7習題86
第三部分密鑰協商
第9章生成隨機性88
9.1真實隨機88
9.1.1使用真實隨機數的問題89
9.1.2僞隨機數89
9.1.3真實隨機數和僞隨機數生成器90
9.2僞隨機數生成器的攻擊模型90
9.3Fortuna91
9.4生成器91
9.4.1初始化93
9.4.2更新種子93
9.4.3生成塊94
9.4.4生成隨機數94
9.4.5生成器速度95
9.5纍加器95
9.5.1熵源95
9.5.2熵池96
9.5.3?實現注意事項97
9.5.4?初始化98
9.5.5獲取隨機數據99
9.5.6添加事件100
9.6種子文件管理101
9.6.1寫種子文件101
9.6.2更新種子文件101
9.6.3讀寫種子文件的時間102
9.6.4備份和虛擬機102
9.6.5文件係統更新的原子性103
9.6.6初次啓動103
9.7選擇隨機元素103
9.8習題104
第10章素數106
10.1整除性與素數106
10.2産生小素數107
10.3素數的模運算109
10.3.1加法和減法109
10.3.2乘法110
......
精彩書摘
關於種子文件的另外一個重要問題就是文件係統更新的原子性。在大多數操作係統中,對種子文件的寫操作僅僅是對一些內存緩衝區進行更新,很久之後纔會將數據真正寫到磁盤上。雖然一些文件係統提供瞭“flush”命令,聲稱能夠將緩存上的所有數據都寫到磁盤上,但是這個操作執行得非常緩慢,而且有時候硬件上並不會真正執行“flush”命令。
無論何時使用種子文件來更新種子,都要在用戶請求隨機數據之前更新種子文件,而且必須要保證磁盤上的數據也進行瞭更新。在一些文件係統中,對文件數據和文件管理信息的操作是分開進行的,所以更新種子文件時文件管理信息和實際的文件信息不符,如果此時機器斷電瞭,種子文件就會損壞甚至丟失,這樣的文件係統對安全係統來說是不適用的。
一些文件係統使用日誌來解決部分問題。日誌技術最初是在大型數據庫係統中提齣來的,而日誌就是對文件係統的所有更新操作的列錶。如果恰當地使用日誌,能夠保證在進行更新操作時,文件管理信息和文件信息也是一緻的。從可靠性的角度看,使用瞭日誌的文件係統更適用,遺憾的是常見的文件係統隻是將日誌用於文件管理信息,並不能完全達到我們的要求。
如果硬件和操作係統不能保證文件更新的原子性和永久性,就不能安全地使用種子文件。在實際應用中,可以根據具體的工作平颱來盡量可靠地更新種子文件。
……
前言/序言
前言CryptographyEngineering:DesignPrinciplesandPracticalApplications大多數圖書涵蓋瞭“密碼學是什麼?”——現在的密碼是如何設計的,以及現有的密碼協議(如SSL/TLS)是如何工作的。BruceSchneier的早期著作《應用密碼學》(AppliedCryptography)就是這樣。這樣的書對於任何密碼領域的人都是非常有價值的參考書,但與現實中密碼工程師和安全工程師的需求有差距。密碼工程師和安全工程師不僅需要知道當前的密碼協議如何工作,還需要知道如何正確地使用密碼。
要知道如何使用密碼,人們必須學會像密碼學傢一樣思考。本書旨在幫助你實現這一目標。我們通過深入的討論做到這一點——對明確具體的協議進行深入的設計和分析,而不是對密碼學中的所有協議進行泛泛的探討。我們手把手地教你設計密碼協議,分享我們做齣某些設計決策的原因,並指齣其中可能存在的陷阱。
通過學習如何像密碼學傢一樣思考,你還將學習如何成為更聰明的密碼使用者。你將能夠查看現有的加密工具包,理解其核心功能,並瞭解如何使用它們。你還將更好地理解加密技術所涉及的挑戰,以及如何剋服這些挑戰。
本書也是學習計算機安全的一本指導書。在許多方麵,計算機安全是密碼學的超集。計算機安全和密碼學都是關於設計和評價以某些方式錶現的對象(係統或算法)的,甚至在有對手的情況下。在本書中,你將學習如何在加密技術的背景下思考對手的行為。一旦知道如何像對手一樣思考,你就可以將這種思維方式擴展到一般的計算機係統安全上。
曆史這本書基於NielsFerguson和BruceSchneier編著的《實用密碼學》(PracticalCryptography),並由TadayoshiKohno(Yoshi)增補內容修改而成。Yoshi是華盛頓大學計算機科學與工程係教授,也是Niels和Bruce之前的同事。Yoshi以《實用密碼學》作為基礎,將其修改為適閤課堂使用和自學,同時保持瞭Niels和Bruce的原書主旨。
教學大綱本書可以用作應用密碼工程的自學指南,也可以用作教材。可以在關於計算機安全的一季度或一學期的課程中使用本書,例如作為6周或10周的密碼學課程的基礎教材,如果時間允許,還可以增加高級材料。為瞭方便課堂使用,我們提供以下幾種可能的教學大綱。
下麵的教學大綱適閤於6周的課程。對於這一課程,假設第1章的內容在一般的計算機安全的更廣泛背景下單獨討論,此處不考慮。
第1周:第2~4章;第2周:第5~7章;第3周:第8~10章;第4周:第11~13章;第5周:第14~17章;第6周:第18~21章。
以下大綱是針對10周的密碼學課程。
第1周:第1和2章;第2周:第3和4章;第3周:第5和6章;第4周:第7和8章;第5周:第9和10章;第6周:第11和12章;第7周:第13和14章;第8周:第15~17章;第9周:第18~20章;第10周:第21章。
以下大綱適用於12周的課程,可以增加密碼學或計算機安全的高級材料。
第1周:第1和2章;第2周:第3和4章;第3周:第5和6章;第4周:第7章;第5周:第8和9章;第6周:第9(續)和10章;第7周:第11和12章;第8周:第13和14章;第9周:第15和16章;第10周:第17和18章;第11周:第19和20章;第12周:第21章。
本書有幾種類型的練習,建議你盡可能多地完成這些練習。其中包括傳統的練習,旨在測試你對加密技術的理解。但是,由於我們的目標是幫助你學習如何在真實係統中考慮加密,所以還引入瞭一組非傳統練習(參見1.12節)。密碼學不是孤立存在的,而是由其他硬件和軟件係統、人、經濟、倫理、文化差異、政治、法律等組成的更大生態係統的一部分。非傳統練習是明確設計的,以促使你在真實係統和周邊生態係統的上下文中考慮加密。這些練習提供瞭將本書的內容直接應用到真實係統中的機會。此外,通過這些練習,隨著學習的推進,你將看到自己的知識不斷增加。
其他信息雖然我們努力使本書沒有錯誤,但是無疑錯誤不可避免。我們為本書維護瞭在綫勘誤錶,使用此勘誤錶的方法如下。
閱讀本書之前,請訪問http://www.schneier.com/ce.html並下載當前的更正列錶。
如果你在書中發現錯誤,請檢查其是否已在列錶中。如果它不在列錶中,請發郵件到cryptographyengineering@schneier.com。我們將把錯誤添加到在綫列錶中。
希望你有一個學習密碼學的美好旅程。密碼學是一個奇妙和迷人的主題,希望你從本書中學到很多東西,並且像我們一樣享受密碼工程。
緻謝非常感謝密碼學和安全社區,如果沒有他們在推進這一領域研究上所做的努力,本書是不可能齣現的。本書還反映瞭我們作為密碼學傢的知識和經驗,非常感謝我們的同行和導師幫助我們形成對密碼學的理解。
感謝JonCallas、BenGreenstein、GordonGoetz、AlexHalderman、JohnKelsey、KarlKoscher、JackLloyd、GabrielMaganis、TheresaPortzer、JesseWalker、DougWhiting、ZookoWilcox-O’Hearn和HusseinYapit,他們對本書的早期版本給齣瞭非常有價值的反饋意見。
本書的部分內容是在華盛頓大學的本科生計算機安全課程教學中得到發展和完善的,感謝所有學生和助教。特彆感謝Josh
密碼工程:原理與應用 下載 mobi epub pdf txt 電子書