理解密碼學的使用場合、誤用方式和原因
了解什么是安全哈希,以及安全哈希的基本屬性了解塊密碼(如AES)的算法和模式,以及不當配置的密碼為什么容易遭到破解
使用消息完整性和/或數字簽名來保護消息使用現代對稱密碼,如AES-GCM和ChaCha了解公鑰加密的基礎知識,包括ECDSA簽名了解如何破解填充不當的RSA加密
使用TLS連接進行安全通信
了解證書的工作原理,熟悉證書鎖定和CT日志等新功能
前 言
當今這個相互聯系的世界徹底改變了一切,包括銀行業(yè)、娛樂業(yè),甚至治國之道。盡管用戶、用途和安全配置文件各不相同,但這些數字應用程序至少有一個共同點:它們都需要正確應用密碼學才能正常工作。
通俗地說,密碼學是密碼的數學。需要密碼來讓未經授權的人無法閱讀信息,讓信息無法更改,并知道是誰發(fā)送了信息。實用密碼學是在實際系統(tǒng)中設計和使用這些代碼。
《Python密碼學編程》主要面向缺少或幾乎沒有密碼學背景的計算機程序員。雖然數學在書中只作了簡短介紹,但總的方法是通過示例來講授密碼學的入門概念。
《Python密碼學編程》首先介紹一些基本組件,包括哈希算法、對稱加密和非對稱加密。接下來將超越加密,進入數字證書、簽名和消息驗證碼領域。最后幾章展示了這些不同元素如何以有趣和有用的方式(如Kerberos和TLS)組合在一起。
講解密碼術的另一個重要部分是列出糟糕的密碼術!《Python密碼學編程》故意破解一些密碼,以幫助讀者理解是什么催生了公認的最佳實踐。練習和示例包括真實漏洞。列舉糟糕的示例能幫助讀者更好地理解密碼學中出錯的地方和原因。
可掃描《Python密碼學編程》封底二維碼下載源代碼。
在閱讀正文時,有時會看到[*]之類的文字,這表示需要查詢《Python密碼學編程》末尾“參考文獻”中相應編號的資源。
Seth James Nielson是Crimson Vista公司的創(chuàng)始人和首席科學家,該公司是一家計算機安全研究和咨詢公司。Seth也是Johns Hopkins大學的兼職教授,講授網絡安全,并擔任信息安全研究所的高級研究項目主任;作為大學工作的-部分,他通過Cisco的慷慨資助,與他人共同創(chuàng)建了一個知識庫。
Christopher K. Monson擁有機器學習博士學位,在谷歌工作了十多年,從事各種工程、機器學習和領導工作。他擁有豐富的編寫和講授多種編程課程的經驗,曾從事文檔密碼恢復、惡意軟件檢測和大規(guī)模安全計算方面的工作。Christopher目前在Data Machines公司擔任首席技術官,并在Johns Hopkins大學信息安全學院講授云計算安全課程。
目 錄
第1章 密碼學:不僅僅是保密 1
1.1 設置Python環(huán)境 1
1.2 愷撒的移位密碼 2
1.3 密碼學介紹 10
1.4 密碼學的用途 11
1.5 會出現什么問題呢? 12
1.6 你不是密碼學家 12
1.7 “跳下懸崖”——互聯網 13
1.8 cryptodoneright.org項目 14
1.9 小結 14
第2章 哈希 17
2.1 使用hashlib自由哈希 17
2.2 進行一次哈希教育 20
2.2.1 原像抗性 21
2.2.2 第二原像抗性和抗碰撞性 26
2.3 哈希摘要算法 28
2.4 哈希密碼 31
2.5 破解弱密碼 36
2.6 工作量證明 38
2.7 小結 41
第3章 對稱加密:兩端使用同一個密鑰 43
3.1 加密示例 43
3.2 什么是加密? 46
3.3 AES:對稱塊密碼 47
3.4 ECB不適合我 48
3.5 想要的:自發(fā)的獨立 58
3.5.1 不是區(qū)塊鏈 58
3.5.2 流密碼 71
3.6 密鑰和IV管理 75
3.7 利用可伸縮性 79
3.8 弱密鑰,糟糕的管理 87
3.9 其他加密算法 89
3.10 finalize () 89
第4章 非對稱加密:公鑰/私鑰 91
4.1 兩個密鑰的故事 91
4.2 越來越緊張 92
4.3 RSA出錯 94
4.4 給發(fā)件箱填料 100
4.5 是什么讓非對稱加密與眾不同? 104
4.6 傳遞填充 106
4.6.1 確定的輸出 106
4.6.2 選擇性密文攻擊 108
4.6.3 共模攻擊 111
4.7 證據就在填充物里 114
4.8 利用PKCS #1 v1.5填充的RSA加密 117
4.8.1 步驟1:盲操作 122
4.8.2 步驟2:搜索符合PKCS的消息 124
4.8.3 步驟3:縮小解的集合 128
4.8.4 步驟4:求解 131
4.9 關于RSA的補充說明 133
4.9.1 密鑰管理 133
4.9.2 算法參數 134
4.9.3 量子密碼 134
4.10 小結 135
第5章 消息完整性、簽名和證書 137
5.1 過于簡單的消息驗證碼 137
5.2 MAC、HMAC和CBC-
MAC 139
5.2.1 HMAC 140
5.2.2 CBC-MAC 144
5.2.3 加密和MAC 150
5.3 數字簽名:身份驗證和完整性 151
5.4 證書:證明公鑰的所有權 160
5.5 證書和信任 172
5.6 撤銷和私鑰保護 173
5.7 重放攻擊 174
5.8 小結 175
第6章 結合非對稱和對稱算法 177
6.1 用RSA交換AES密鑰 177
6.2 不對稱和對稱:像巧克力和花生醬 180
6.3 測量RSA的相對性能 181
6.4 Diffie-Hellman和密鑰協議 190
6.5 Diffie-Hellman和前向保密 195
6.6 質詢-響應協議 201
6.7 常見問題 203
6.8 一個非對稱和對稱密鑰的遺憾示例 204
6.9 小結 207
第7章 更對稱的加密:身份驗證加密和Kerberos 209
7.1 AES-GCM 209
7.2 AES-GCM細節(jié)和細微差別 213
7.3 其他AEAD算法 216
7.4 工作網絡 218
7.5 Kerberos簡介 225
7.6 小結 246
第8章 TLS通信 247
8.1 攔截流量 247
8.2 數字身份:X.509證書 252
8.2.1 X.509字段 252
8.2.2 證書簽名請求 254
8.2.3 在Python中創(chuàng)建密鑰、CSR和證書 266
8.3 TLS 1.2和1.3概述 270
8.3.1 介紹“hello” 272
8.3.2 客戶端身份驗證 274
8.3.3 推導會話密鑰 275
8.3.4 切換到新密碼 278
8.3.5 派生密鑰和批量數據傳輸 279
8.3.6 TLS 1.3 283
8.4 證書驗證和建立信任 285
8.5 對TLS的已知攻擊 289
8.5.1 POODLE 289
8.5.2 FREAK和Logjam 289
8.5.3 Sweet32 290
8.5.4 ROBOT 290
8.5.5 CRIME、TIME和BREACH 291
8.5.6 Heartbleed 291
8.6 將OpenSSL與Python一起用于TLS 292
8.7 小結 301
參考文獻 303