深入淺出密碼學 Real-World Cryptography

戴維·王(David Wong)

  • 深入淺出密碼學-preview-1
  • 深入淺出密碼學-preview-2
深入淺出密碼學-preview-1

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

商品描述

密碼學是信息安全的基礎,本書教讀者應用加密技術來解決現實世界中的一系列難題,並暢談了密碼學的未來,涉及“加密貨幣”、密碼驗證、密鑰交換和後量子密碼學等話題。

全書分為兩個部分,第一部分介紹密碼原語,涉及密碼學基礎概念、哈希函數、消息認證碼、認證加密、密鑰交換、非對稱加密和混合加密、數字簽名與零知識證明、隨機性和秘密性等內容;第二部分涉及安全傳輸、端到端加密、用戶認證、“加密貨幣”、硬件密碼學、後量子密碼、新一代密碼技術等內容。

本書形式新穎、深入淺出,非常適合密碼學領域的師生及信息安全從業人員閱讀,也適合對密碼學及其應用感興趣的讀者閱讀。

作者簡介

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