內容簡介
密碼學是信息安全的基礎,本書教讀者套用加密技術來解決現實世界中的一系列難題,並暢談了密碼學的未來,涉及“加密貨幣”、密碼驗證、密鑰交換和後量子密碼學等話題。
全書分為兩個部分,第一部分介紹密碼原語,涉及密碼學基礎概念、哈希函式、訊息認證碼、認證加密、密鑰交換、非對稱加密和混合加密、數字簽名與零知識證明、隨機性和秘密性等內容;第二部分涉及安全傳輸、端到端加密、用戶認證、“加密貨幣”、硬體密碼學、後量子密碼、新一代密碼技術等內容。
本書形式新穎、深入淺出,非常適合密碼學領域的師生及信息安全從業人員閱讀,也適合對密碼學及其套用感興趣的讀者閱讀。
作者簡介
David Wong是O(1)實驗室的一位高級密碼工程師,他致力於Mina“加密貨幣”的研發。在此之前,他曾在Facebook Novi工作,擔任Diem(正式名稱為Libra)“加密貨幣”研發團隊的安全顧問。在Facebook工作前,他還在NCC集團的加密服務機構做過安全顧問。
David在他的職業生涯中多次參與開源審計工作,比如審計OpenSSL庫和Let's Encrypt項目。他曾在多個會議(如“Black Hat”和“DEF CON”)上做過報告,並在“Black Hat”會議上講授密碼學課程。他為TLS 1.3協定和Noise協定框架的發展做出了貢獻。此外,他還發現了許多庫存在的漏洞,例如?Go?語言標準庫中的CVE-2016-3959漏洞,TLS庫中的CVE-2018-12404、CVE-2018-19608、CVE-2018-16868、CVE-2018-16869和CVE-2018-16870漏洞。
David還是Disco協定和基於智慧型契約的去中心化應用程式安全項目的開發者之一。他的研究內容包括對RSA的快取攻擊、基於QUIC的協定、對ECDSA的時序攻擊或針對DH算法的後門攻擊等領域的安全技術。
圖書目錄
第一部分 密碼原語:密碼學的重要組成部分
第1章 引言 3
1.1 密碼學使協定安全 3
1.2 對稱密碼:對稱加密概述 4
1.3 Kerckhoff原則:只有密鑰保密 6
1.4 非對稱加密:兩個密鑰優於一個密鑰 8
1.4.1 密鑰交換 9
1.4.2 非對稱加密 11
1.4.3 數字簽名:與手寫簽名作用一樣 13
1.5 密碼算法分類和抽象化 15
1.6 理論密碼學vs.實用密碼學 16
1.7 從理論到實踐:選擇獨特冒險 17
1.8 警示之言 21
1.9 本章小結 21
第2章 哈希函式 22
2.1 什麼是哈希函式 22
2.2 哈希函式的安全屬性 24
2.3 哈希函式的安全性考量 26
2.4 哈希函式的實際套用 28
2.4.1 承諾 28
2.4.2 子資源完整性 28
2.4.3 比特流 29
2.4.4 洋蔥路由 29
2.5 標準化的哈希函式 29
2.5.1 SHA-2哈希函式 30
2.5.2 SHA-3哈希函式 33
2.5.3 SHAKE和cSHAKE:兩個可擴展輸出的函式 37
2.5.4 使用元組哈希避免模糊哈希 38
2.6 口令哈希 39
2.7 本章小結 41
第3章 訊息認證碼 42
3.1 無狀態cookie—— 一個引入MAC的範例 42
3.2 一個代碼示例 45
3.3 MAC的安全屬性 46
3.3.1 偽造認證標籤 46
3.3.2 認證標籤的長度 47
3.3.3 重放攻擊 48
3.3.4 在固定時間內驗證認證標籤 49
3.4 現實世界中的MAC 49
3.4.1 訊息認證碼 49
3.4.2 密鑰派生 50
3.4.3 cookie的完整性 51
3.4.4 哈希表 51
3.5 實際套用中的訊息認證碼 51
3.5.1 HMAC—— 一個基於哈希函式的訊息認證碼算法 52
3.5.2 KMAC—— 基於cSHAKE的訊息認證碼算法 53
3.6 SHA-2和長度擴展攻擊 53
3.7 本章小結 56
第4章 認證加密 57
4.1 密碼的定義 57
4.2 高級加密標準 59
4.2.1 AES算法的安全級別 59
4.2.2 AES算法的接口 60
4.2.3 AES內部構造 61
4.3 加密企鵝圖片和CBC操作模式 62
4.4 選用具有認證機制的AES-CBC-HMAC算法 65
4.5 認證加密算法的一體式構造 66
4.5.1 有附加數據的認證加密 67
4.5.2 AEAD型算法AES-GCM 68
4.5.3 ChaCha20-Poly1305算法 72
4.6 其他類型的對稱加密 76
4.6.1 密鑰包裝 76
4.6.2 抗Nonce誤用的認證加密算法 77
4.6.3 磁碟加密 77
4.6.4 資料庫加密 77
4.7 本章小結 78
第5章 密鑰交換 79
5.1 密鑰交換的定義 79
5.2 Diffie-Hellman(DH)密鑰交換 82
5.2.1 群論 82
5.2.2 離散對數問題:DH算法的基礎 86
5.2.3 DH密鑰交換標準 87
5.3 基於橢圓曲線的DH密鑰交換算法 88
5.3.1 橢圓曲線的定義 88
5.3.2 ECDH密鑰交換算法的實現 91
5.3.3 ECDH算法的標準 93
5.4 小子群攻擊以及其他安全注意事項 94
5.5 本章小結 96
第6章 非對稱加密和混合加密 97
6.1 非對稱加密簡介 97
6.2 實踐中的非對稱加密和混合加密 99
6.2.1 密鑰交換和密鑰封裝 99
6.2.2 混合加密 101
6.3 RSA非對稱加密的優缺點 104
6.3.1 教科書式RSA算法 104
6.3.2 切勿使用PKCS#1 v1.5標準中的RSA算法 108
6.3.3 非對稱加密RSA-OAEP 109
6.4 混合加密ECIES 112
6.5 本章小結 114
第7章 數字簽名與零知識證明 115
7.1 數字簽名的定義 115
7.1.1 現實套用中計算和驗證簽名的方法 117
7.1.2 數字簽名套用案例:認證密鑰交換 117
7.1.3 數字簽名的實際用法:公鑰基礎設施 118
7.2 零知識證明:數字簽名的起源 119
7.2.1 Schnorr身份識別協定:一種互動式零知識證明 120
7.2.2 數字簽名作為非互動式零知識證明 123
7.3 簽名算法的標準 123
7.3.1 RSA PKCS#1 v1.5:一個有漏洞的標準 124
7.3.2 RSA-PSS:更優的標準 127
7.3.3 橢圓曲線數字簽名算法 128
7.3.4 Edwards曲線數字簽名算法 130
7.4 簽名方案特殊性質 133
7.4.1 對簽名的替換攻擊 133
7.4.2 簽名的可延展性 134
7.5 本章小結 134
第8章 隨機性和秘密性 136
8.1 隨機性的定義 136
8.2 偽隨機數發生器 138
8.3 獲取隨機性的方法 141
8.4 生成隨機數和安全性考慮 143
8.5 公開的隨機性 145
8.6 用HKDF算法派生密鑰 146
8.7 管理密鑰和秘密信息 150
8.8 分散式門限密碼技術 151
8.9 本章小結 154
第二部分 協定:密碼學的核心作用
第9章 安全傳輸 157
9.1 SSL和TLS協定 157
9.1.1 從SSL到TLS的轉化 158
9.1.2 TLS的實際套用 158
9.2 TLS協定的工作原理 160
9.2.1 TLS協定的握手階段 161
9.2.2 TLS 1.3中加密應用程式數據的方法 172
9.3 Web加密技術發展現狀 172
9.4 其他安全傳輸協定 174
9.5 Noise協定框架:TLS新的替代方案 175
9.5.1 Noise協定框架中不同的握手模式 175
9.5.2 Noise協定的握手過程 176
9.6 本章小結 177
第10章 端到端加密 178
10.1 為什麼使用端到端加密 178
10.2 信任源缺失 180
10.3 郵件加密的失敗案例 181
10.3.1 PGP或GPG協定的工作原理 181
10.3.2 將Web系統信任機制擴展到用戶之間 184
10.3.3 尋找PGP公鑰是個難題 184
10.3.4 PGP的替代品 185
10.4 安全訊息傳遞:現代端到端加密協定Signal 187
10.4.1 比Web信任機制更友好:信任可驗證 188
10.4.2 X3DH:Signal協定的握手過程 190
10.4.3 雙棘輪協定:Signal握手結束之後的協定 193
10.5 端到端加密最新進展 197
10.6 本章小結 198
第11章 用戶認證 200
11.1 認證性的定義 200
11.2 用戶身份認證 202
11.2.1 用一個口令來控制所有口令:單點登錄以及口令管理器 204
11.2.2 避免口令的明文傳輸:使用非對稱的口令認證密鑰交換協定 205
11.2.3 一次性口令並不是真正的口令:使用對稱密鑰進行無口令操作 208
11.2.4 用非對稱密鑰替換口令 211
11.3 用戶輔助身份認證:人工輔助設備配對 213
11.3.1 預共享密鑰 215
11.3.2 CPace對稱口令認證密鑰交換 216
11.3.3 用短認證字元串避免密鑰交換遭受MIMT攻擊 217
11.4 本章小結 219
第12章 “加密貨幣” 221
12.1 拜占庭共識算法介紹 222
12.1.1 數據恢復問題:分散式數據可恢復協定 222
12.1.2 信任問題:利用去中心化解決信任問題 223
12.1.3 規模問題:無許可和不受審查的網路 224
12.2 Bitcoin的工作原理 225
12.2.1 Bitcoin處理用戶餘額和交易的方式 226
12.2.2 挖掘數字黃金BTC 227
12.2.3 解決挖礦中的衝突 230
12.2.4 使用Merkle樹減小區塊的大小 233
12.3 “加密貨幣”之旅 234
12.3.1 波動性 235
12.3.2 延遲性 235
12.3.3 區塊鏈規模 235
12.3.4 機密性 236
12.3.5 電能消耗 236
12.4 DiemBFT:一種拜占庭容錯共識協定 236
12.4.1 安全性和活躍性:BFT共識協定的兩大屬性 236
12.4.2 一輪DiemBFT協定 237
12.4.3 協定對不誠實行為的容忍度 238
12.4.4 DiemBFT協定的投票規則 238
12.4.5 交易最終得到確認 240
12.4.6 DiemBFT協定安全性的直觀解釋 240
12.5 本章小結 242
第13章 硬體密碼學 244
13.1 現代密碼學中常見的攻擊模型 244
13.2 不可信環境:讓硬體提供幫助 245
13.2.1 白盒密碼學不可取 246
13.2.2 智慧卡和安全元件 247
13.2.3 硬體安全模組—— 銀行業的寵兒 248
13.2.4 可信平台模組:安全元件的有效標準化 250
13.2.5 在可信執行環境中進行保密計算 252
13.3 何為最優解決方案 253
13.4 防泄露密碼 255
13.4.1 恆定時間編程 256
13.4.2 隱藏與盲化 258
13.4.3 故障攻擊 258
13.5 本章小結 259
第14章 後量子密碼 261
14.1 震動密碼學界的量子計算機 261
14.1.1 研究小物體的量子力學 262
14.1.2 量子計算機從誕生到實現量子霸權 264
14.1.3 Shor和Grover算法對密碼學的影響 265
14.1.4 可抵抗量子算法的後量子密碼 266
14.2 基於哈希函式的一次性簽名 266
14.2.1 Lamport一次性簽名 267
14.2.2 具有較小密鑰長度的Winternitz一次性簽名方案 268
14.2.3 XMSS和SPHINCS+多次簽名 270
14.3 基於格密碼的短密鑰和簽名方案 272
14.3.1 格的定義 273
14.3.2 格密碼的基礎:LWE問題 274
14.3.3 基於格的密鑰交換算法Kyber 275
14.3.4 基於格的數字簽名算法Dilithium 277
14.4 有必要恐慌嗎 278
14.5 本章小結 280
第15章 新一代密碼技術 281
15.1 安全多方計算 282
15.1.1 隱私集合求交 282
15.1.2 通用MPC協定 284
15.1.3 MPC發展現狀 285
15.2 全同態加密及其在雲技術中的套用 286
15.2.1 基於RSA加密方案的同態加密方案示例 286
15.2.2 不同類型的同態加密 287
15.2.3 Bootstrapping:全同態加密的關鍵 287
15.2.4 一種基於LWE問題的FHE方案 289
15.2.5 FHE的用武之地 290
15.3 通用零知識證明 291
15.3.1 zk-SNARK的工作原理 293
15.3.2 同態承諾隱藏部分證據 294
15.3.3 利用雙線性對改進同態承諾方案 294
15.3.4 簡潔性的來源 294
15.3.5 程式轉換為多項式 295
15.3.6 程式轉換為算術電路 296
15.3.7 R1CS運算電路 296
15.3.8 將R1CS轉換為多項式 297
15.3.9 隱藏在指數中的多項式 297
15.4 本章小結 299
第16章 密碼技術並非萬能 300
16.1 尋找到正確的密碼原語或協定 301
16.2 如何使用加密原語或協定——文雅標準與形式驗證 302
16.3 哪裡能找到出色的密碼庫 304
16.4 濫用密碼技術:開發者是密碼學家的敵手 305
16.5 可用安全性 306
16.6 密碼學並非一座孤島 308
16.7 不要輕易親自實現密碼算法 309
16.8 本章小結 310
附錄 習題答案 312