本書深入地探討特定的、具體的協(xié)議,講述如何設(shè)計密碼協(xié)議,分析做出設(shè)計決策的原因,并指出其中可能存在的陷阱,從而幫助讀者像密碼學家一樣思考。本書分為五部分,第 一部分對密碼學進行概述,第二到四部分分別講述消息安全、密鑰協(xié)商、密鑰管理方面的內(nèi)容,第五部分介紹標準和專利等其他問題。本書可作為高等院校計算機安全和密碼學相關(guān)專業(yè)的教材或教學參考書,也可作為應(yīng)用密碼工程的自學指南。
目 錄
Cryptography Engineering: Design Principles and Practical Applications
出版者的話
譯者序
前言
《實用密碼學》前言
關(guān)于作者
第一部分 概述
第1章 密碼學研究范圍 2
1.1 密碼學的作用 2
1.2 木桶原理 3
1.3 對手設(shè)定 4
1.4 專業(yè)偏執(zhí)狂 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 安全性和其他設(shè)計準則 9
1.10.1 安全性和性能 9
1.10.2 安全性和特性 10
1.10.3 安全性和演變的系統(tǒng) 11
1.11 更多閱讀材料 11
1.12 專業(yè)偏執(zhí)狂練習 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 數(shù)字簽名 17
2.5 PKI 18
2.6 攻擊 18
2.6.1 唯密文攻擊模型 19
2.6.2 已知明文攻擊模型 19
2.6.3 選擇明文攻擊模型 19
2.6.4 選擇密文攻擊模型 19
2.6.5 區(qū)分攻擊的目的 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.1 DES 30
3.5.2 AES 32
3.5.3 Serpent 34
3.5.4 Twofish 34
3.5.5 其他的AES候選算法 36
3.5.6 如何選擇分組密碼 36
3.5.7 如何選擇密鑰長度 36
3.6 習題 37
第4章 分組密碼工作模式 39
4.1 填充 39
4.2 ECB 40
4.3 CBC 40
4.3.1 固定IV 40
4.3.2 計數(shù)器IV 41
4.3.3 隨機IV 41
4.3.4 瞬時IV 41
4.4 OFB 42
4.5 CTR 43
4.6 加密與認證 44
4.7 如何選擇工作模式 44
4.8 信息泄露 44
4.8.1 碰撞的可能性 45
4.8.2 如何處理信息泄露 46
4.8.3 關(guān)于數(shù)學證明 46
4.9 習題 47
第5章 散列函數(shù) 48
5.1 散列函數(shù)的安全性 48
5.2 實際的散列函數(shù) 49
5.2.1 一種簡單但不安全的散列函數(shù) 50
5.2.2 MD5 50
5.2.3 SHA-1 51
5.2.4 SHA-224、SHA-256、SHA-384和SHA-512 51
5.3 散列函數(shù)的缺陷 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.1 MAC的作用 56
6.2 理想MAC與MAC的安全性 56
6.3 CBC-MAC和CMAC 57
6.4 HMAC 58
6.5 GMAC 59
6.6 如何選擇MAC 60
6.7 MAC的使用 60
6.8 習題 61
第7章 安全信道 63
7.1 安全信道的性質(zhì) 63
7.1.1 角色 63
7.1.2 密鑰 63
7.1.3 消息或字節(jié)流 64
7.1.4 安全性質(zhì) 64
7.2 認證與加密的順序 65
7.3 安全信道設(shè)計概述 66
7.3.1 消息編號 66
7.3.2 認證 67
7.3.3 加密 67
7.3.4 組織格式 68
7.4 詳細設(shè)計 68
7.4.1 初始化 68
7.4.2 發(fā)送消息 69
7.4.3 接收消息 70
7.4.4 消息的順序 71
7.5 備選方案 71
7.6 習題 72
第8章 實現(xiàn)上的問題I 74
8.1 創(chuàng)建正確的程序 75
8.1.1 規(guī)范 75
8.1.2 測試和修復 75
8.1.3 不嚴謹?shù)膽B(tài)度 76
8.1.4 如何著手 76
8.2 制作安全的軟件 77
8.3 保守秘密 77
8.3.1 清除狀態(tài) 77
8.3.2 交換文件 79
8.3.3 高速緩沖存儲器 79
8.3.4 內(nèi)存保留數(shù)據(jù) 80
8.3.5 其他程序的訪問 82
8.3.6 數(shù)據(jù)完整性 82
8.3.7 需要做的工作 83
8.4 代碼質(zhì)量 83
8.4.1 簡潔性 83
8.4.2 模塊化 83
8.4.3 斷言 84
8.4.4 緩沖區(qū)溢出 84
8.4.5 測試 85
8.5 側(cè)信道攻擊 85
8.6 一些其他的話 86
8.7 習題 86
第三部分 密鑰協(xié)商
第9章 生成隨機性 88
9.1 真實隨機 88
9.1.1 使用真實隨機數(shù)的問題 89
9.1.2 偽隨機數(shù) 89
9.1.3 真實隨機數(shù)和偽隨機數(shù)生成器 90
9.2 偽隨機數(shù)生成器的攻擊模型 90
9.3 Fortuna 91
9.4 生成器 91
9.4.1 初始化 93
9.4.2 更新種子 93
9.4.3 生成塊 94
9.4.4 生成隨機數(shù) 94
9.4.5 生成器速度 95
9.5 累加器 95
9.5.1 熵源 95
9.5.2 熵池 96
9.5.3 ?實現(xiàn)注意事項 97
9.5.4?初始化 98
9.5.5 獲取隨機數(shù)據(jù) 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 文件系統(tǒng)更新的原子性 103
9.6.6 初次啟動 103
9.7 選擇隨機元素 103
9.8 習題 104
第10章 素數(shù) 106
10.1 整除性與素數(shù) 106
10.2 產(chǎn)生小素數(shù) 107
10.3 素數(shù)的模運算 109
10.3.1 加法和減法 109
10.3.2 乘法 110
10.3