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