密碼工程:原理與應用

尼爾斯·弗格森

買這商品的人也買了...

商品描述

知道相機的工作原理並不能使你成為偉大的攝影師,同樣,知道什麼是密碼設計和現有密碼協議的工作原理也不標誌著你能熟練應用密碼,你必須學會像密碼學家一樣思考。
這正是本書將要教給你的——深入明確具體的密碼協議並學習為什麼做這樣的決策,認識其中的挑戰並學習如何克服這些挑戰。通過這本既適合課堂教學又適合自學的教材,你將學會在真實係統中有效地使用密碼。
本書主要內容
理解如何設計密碼協議。
理解密碼和周圍的系統之間的接口,周圍的系統包括人、經濟學、硬件、軟件、倫理學、政策和現實世界的其他方面。
超越安全協議去看周圍的系統中存在的弱點。
通過理解對手如何思考來阻擋對手的行為。
學習如何將密碼構建進新產品中

目錄大綱

出版者的話
譯者序
前言
《實用密碼學》前言
關於作者
第一部分 概述
第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.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 區分攻擊的目的 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 計數器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 關於數學證明 46
4.9 習題 47
第5章 散列函數 48
5.1 散列函數的安全性 48
5.2 實際的散列函數 49
5.2.1 一種簡單但不安全的散列函數 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 散列函數的缺陷 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 安全信道的性質 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章 實現上的問題I 74
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.3 Fortuna 91
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
10.3.3 群和有限域 110
10.3.4 GCD算法 111
10.3.5 擴展歐幾里得算法 111
10.3.6 模2運算 112
10.4 大素數 113
10.4.1 素性測試 115
10.4.2 計算模指數 117
10.5 習題 118
第11章 Diffie-Hellman協議 119
11.1 群 119
11.2 基本的DH 120
11.3 中間人攻擊 121
11.4 一些可能的問題 122
11.5 安全的素數 122
11.6 使用較小的子群 123
11.7 p的長度 124
11.8 實踐準則 125
11.9 可能出錯的地方 126
11.10 習題 127
第12章 RSA 128
12.1 引言 128
12.2 中國剩餘定理 128
12.2.1 Garner公式 129
12.2.2?推廣 129
12.2.3 應用 130
12.2.4 結論 130
12.3 模n乘法 130
12.4 RSA 131
12.4.1 RSA數字簽名 131
12.4.2 公開指數 132
12.4.3 私鑰 132
12.4.4 n的長度 133
12.4.5 生成RSA密鑰 133
12.5 使用RSA的缺陷 135
12.6 加密 136
12.7 簽名 138
12.8 習題 139
第13章 密碼協議導論 141
13.1 角色 141
13.2 信任 141
13.3 動機 143
13.4 密碼協議中的信任 144
13.5 消息和步驟 144
13.5.1 傳輸層 145
13.5.2 協議標識符和消息標識符 145
13.5.3 消息編碼和解析 146
13.5.4 協議執行狀態 146
13.5.5 錯誤 147
13.5.6 重放和重試 147
13.6 習題 149
第14章 密鑰協商 150
14.1 初始設置 150
14.2 初次嘗試 150
14.3 協議會一直存在下去 151
14.4 一個認證的慣例 152
14.5 第二次嘗試 152
14.6 第三次嘗試 153
14.7 最終的協議 154
14.8 關於協議的一些不同觀點 155
14.8.1 Alice的觀點 155
14.8.2 Bob的觀點 155
14.8.3 攻擊者的觀點 156
14.8.4 密鑰洩露 157
14.9 協議的計算複雜性 157
14.10 協議複雜性 158
14.11 一個小警告 159
14.12 基於口令的密鑰協商 159
14.13 習題 159
第15章 實現上的問題Ⅱ 160
15.1 大整數的運算 160
15.1.1 woop技術 161
15.1.2 檢查DH計算 163
15.1.3 檢查RSA加密 163
15.1.4 檢查RSA簽名 164
15.1.5 結論 164
15.2 更快的乘法 164
15.3 側信道攻擊 165
15.4 協議 166
15.4.1 安全信道上的協議 166
15.4.2 接收一條消息 167
15.4.3 超時設定 168
15.5 習題 168
第四部分 密鑰管理
第16章 時鐘 170
16.1 時鐘的使用 170
16.1.1 有效期 170
16.1.2 唯一值 170
16.1.3 單調性 170
16.1.4 實時交易 171
16.2 使用實時時鐘芯片 171
16.3 安全性威脅 171
16.3.1 時鐘後置 171
16.3.2 時鐘停止 172
16.3.3 時鐘前置 172
16.4 建立可靠的時鐘 173
16.5 相同狀態問題 173
16.6 時間 174
16.7 結論 175
16.8 習題 175
第17章 密鑰服務器 176
17.1 基本概念 176
17.2 Kerberos協議 176
17.3 更簡單的方案 177
17.3.1 安全連接 177
17.3.2 建立密鑰 178
17.3.3 重新生成密鑰 178
17.3.4 其他性質 178
17.4 如何選擇 178
17.5 習題 179
第18章 PKI之夢 180
18.1 PKI的簡短回顧 180
18.2 PKI的例子 180
18.2.1 全局PKI 180
18.2.2 VPN訪問 181
18.2.3 電子銀行 181
18.2.4 煉油廠傳感器 181
18.2.5 信用卡組織 181
18.3 其他細節 181
18.3.1 多級證書 181
18.3.2 有效期 182
18.3.3 獨立的註冊機構 182
18.4 結論 183
18.5 習題 183
第19章 PKI的現實 184
19.1 名字 184
19.2 授權機構 185
19.3 信任 186
19.4 間接授權 186
19.5 直接授權 187
19.6 憑證系統 187
19.7 修正的夢想 188
19.8 撤銷 189
19.8.1 撤銷列表 189
19.8.2 短有效期 190
19.8.3 在線證書驗證 190
19.8.4 撤銷是必需的 190
19.9 PKI有什麼好處 191
19.10 如何選擇 192
19.11 習題 192
第20章 PKI的實用性 193
20.1 證書格式 193
20.1.1 許可語言 193
20.1.2 根密鑰 193
20.2 密鑰的生命週期 194
20.3 密鑰作廢的原因 195
20.4 深入探討 196
20.5 習題 196
第21章 存儲秘密 197
21.1 磁盤 197
21.2 人腦記憶 197
21.3 便攜式存儲 200
21.4 安全令牌 200
21.5 安全UI 201
21.6 生物識別技術 201
21.7 單點登錄 202
21.8 丟失