理解密码学的使用场合、误用方式和原因
了解什么是安全哈希,以及安全哈希的基本属性了解块密码(如AES)的算法和模式,以及不当配置的密码为什么容易遭到破解
使用消息完整性和/或数字签名来保护消息使用现代对称密码,如AES-GCM和ChaCha了解公钥加密的基础知识,包括ECDSA签名了解如何破解填充不当的RSA加密
使用TLS连接进行安全通信
了解证书的工作原理,熟悉证书锁定和CT日志等新功能
前 言
当今这个相互联系的世界彻底改变了一切,包括银行业、娱乐业,甚至治国之道。尽管用户、用途和安全配置文件各不相同,但这些数字应用程序至少有一个共同点:它们都需要正确应用密码学才能正常工作。
通俗地说,密码学是密码的数学。需要密码来让未经授权的人无法阅读信息,让信息无法更改,并知道是谁发送了信息。实用密码学是在实际系统中设计和使用这些代码。
《Python密码学编程》主要面向缺少或几乎没有密码学背景的计算机程序员。虽然数学在书中只作了简短介绍,但总的方法是通过示例来讲授密码学的入门概念。
《Python密码学编程》首先介绍一些基本组件,包括哈希算法、对称加密和非对称加密。接下来将超越加密,进入数字证书、签名和消息验证码领域。最后几章展示了这些不同元素如何以有趣和有用的方式(如Kerberos和TLS)组合在一起。
讲解密码术的另一个重要部分是列出糟糕的密码术!《Python密码学编程》故意破解一些密码,以帮助读者理解是什么催生了公认的最佳实践。练习和示例包括真实漏洞。列举糟糕的示例能帮助读者更好地理解密码学中出错的地方和原因。
可扫描《Python密码学编程》封底二维码下载源代码。
在阅读正文时,有时会看到[*]之类的文字,这表示需要查询《Python密码学编程》末尾“参考文献”中相应编号的资源。
Seth James Nielson是Crimson Vista公司的创始人和首席科学家,该公司是一家计算机安全研究和咨询公司。Seth也是Johns Hopkins大学的兼职教授,讲授网络安全,并担任信息安全研究所的高级研究项目主任;作为大学工作的-部分,他通过Cisco的慷慨资助,与他人共同创建了一个知识库。
Christopher K. Monson拥有机器学习博士学位,在谷歌工作了十多年,从事各种工程、机器学习和领导工作。他拥有丰富的编写和讲授多种编程课程的经验,曾从事文档密码恢复、恶意软件检测和大规模安全计算方面的工作。Christopher目前在Data Machines公司担任首席技术官,并在Johns Hopkins大学信息安全学院讲授云计算安全课程。
目 录
第1章 密码学:不仅仅是保密 1
1.1 设置Python环境 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 想要的:自发的独立 58
3.5.1 不是区块链 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 给发件箱填料 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细节和细微差别 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中创建密钥、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