描述
开 本: 16开纸 张: 胶版纸包 装: 平装-胶订是否套装: 否国际标准书号ISBN: 9787111574354
内容简介
本书深入地探讨特定的、具体的协议,讲述如何设计密码协议,分析做出设计决策的原因,并指出其中可能存在的陷阱,从而帮助读者像密码学家一样思考。本书分为五部分,第 一部分对密码学进行概述,第二到四部分分别讲述消息安全、密钥协商、密钥管理方面的内容,第五部分介绍标准和专利等其他问题。本书可作为高等院校计算机安全和密码学相关专业的教材或教学参考书,也可作为应用密码工程的自学指南。
目 录
目 录
Cryptography Engineering: Design Principles and Practical Applications
出版者的话
译者序
前言
《实用密码学》前言
关于作者
部分 概述
第1章 密码学研究范围 2
1.1 密码学的作用 2
1.2 木桶原理 3
1.3 对手设定 4
1.4 专业偏执狂 5
1.4.1 更广泛的好处 5
1.4.2 攻击 5
1.5 威胁模型 6
1.6 密码学不是解决方案 7
1.7 密码学是非常难的 8
1.8 密码学是简单的部分 8
1.9 通用攻击 9
1.10 安全性和其他设计准则 9
1.10.1 安全性和性能 9
1.10.2 安全性和特性 10
1.10.3 安全性和演变的系统 11
1.11 更多阅读材料 11
1.12 专业偏执狂练习 12
1.12.1 时事练习 12
1.12.2 安全审查练习 12
1.13 习题 13
第2章 密码学简介 14
2.1 加密 14
2.2 认证 15
2.3 公钥加密 16
2.4 数字签名 17
2.5 PKI 18
2.6 攻击 18
2.6.1 唯密文攻击模型 19
2.6.2 已知明文攻击模型 19
2.6.3 选择明文攻击模型 19
2.6.4 选择密文攻击模型 19
2.6.5 区分攻击的目的 20
2.6.6 其他类型的攻击 20
2.7 深入探讨 20
2.7.1 生日攻击 20
2.7.2 中间相遇攻击 21
2.8 安全等级 22
2.9 性能 22
2.10 复杂性 23
2.11 习题 24
第二部分 消息安全
第3章 分组密码 26
3.1 什么是分组密码 26
3.2 攻击类型 27
3.3 理想分组密码 27
3.4 分组密码安全的定义 28
3.5 实际分组密码 30
3.5.1 DES 30
3.5.2 AES 32
3.5.3 Serpent 34
3.5.4 Twofish 34
3.5.5 其他的AES候选算法 36
3.5.6 如何选择分组密码 36
3.5.7 如何选择密钥长度 36
3.6 习题 37
第4章 分组密码工作模式 39
4.1 填充 39
4.2 ECB 40
4.3 CBC 40
4.3.1 固定IV 40
4.3.2 计数器IV 41
4.3.3 随机IV 41
4.3.4 瞬时IV 41
4.4 OFB 42
4.5 CTR 43
4.6 加密与认证 44
4.7 如何选择工作模式 44
4.8 信息泄露 44
4.8.1 碰撞的可能性 45
4.8.2 如何处理信息泄露 46
4.8.3 关于数学证明 46
4.9 习题 47
第5章 散列函数 48
5.1 散列函数的安全性 48
5.2 实际的散列函数 49
5.2.1 一种简单但不安全的散列函数 50
5.2.2 MD5 50
5.2.3 SHA-1 51
5.2.4 SHA-224、SHA-256、SHA-384和SHA-512 51
5.3 散列函数的缺陷 52
5.3.1 长度扩充 52
5.3.2 部分消息碰撞 52
5.4 修复缺陷 53
5.4.1 一个临时的修复方法 53
5.4.2 一个更有效的修复方法 53
5.4.3 其他修复方法 54
5.5 散列算法的选择 55
5.6 习题 55
第6章 消息认证码 56
6.1 MAC的作用 56
6.2 理想MAC与MAC的安全性 56
6.3 CBC-MAC和CMAC 57
6.4 HMAC 58
6.5 GMAC 59
6.6 如何选择MAC 60
6.7 MAC的使用 60
6.8 习题 61
第7章 安全信道 63
7.1 安全信道的性质 63
7.1.1 角色 63
7.1.2 密钥 63
7.1.3 消息或字节流 64
7.1.4 安全性质 64
7.2 认证与加密的顺序 65
7.3 安全信道设计概述 66
7.3.1 消息编号 66
7.3.2 认证 67
7.3.3 加密 67
7.3.4 组织格式 68
7.4 详细设计 68
7.4.1 初始化 68
7.4.2 发送消息 69
7.4.3 接收消息 70
7.4.4 消息的顺序 71
7.5 备选方案 71
7.6 习题 72
第8章 实现上的问题I 74
8.1 创建正确的程序 75
8.1.1 规范 75
8.1.2 测试和修复 75
8.1.3 不严谨的态度 76
8.1.4 如何着手 76
8.2 制作安全的软件 77
8.3 保守秘密 77
8.3.1 清除状态 77
8.3.2 交换文件 79
8.3.3 高速缓冲存储器 79
8.3.4 内存保留数据 80
8.3.5 其他程序的访问 82
8.3.6 数据完整性 82
8.3.7 需要做的工作 83
8.4 代码质量 83
8.4.1 简洁性 83
8.4.2 模块化 83
8.4.3 断言 84
8.4.4 缓冲区溢出 84
8.4.5 测试 85
8.5 侧信道攻击 85
8.6 一些其他的话 86
8.7 习题 86
第三部分 密钥协商
第9章 生成随机性 88
9.1 真实随机 88
9.1.1 使用真实随机数的问题 89
9.1.2 伪随机数 89
9.1.3 真实随机数和伪随机数生成器 90
9.2 伪随机数生成器的攻击模型 90
9.3 Fortuna 91
9.4 生成器 91
9.4.1 初始化 93
9.4.2 更新种子 93
9.4.3 生成块 94
9.4.4 生成随机数 94
9.4.5 生成器速度 95
9.5 累加器 95
9.5.1 熵源 95
9.5.2 熵池 96
9.5.3 ?实现注意事项 97
9.5.4?初始化 98
9.5.5 获取随机数据 99
9.5.6 添加事件 100
9.6 种子文件管理 101
9.6.1 写种子文件 101
9.6.2 更新种子文件 101
9.6.3 读写种子文件的时间 102
9.6.4 备份和虚拟机 102
9.6.5 文件系统更新的原子性 103
9.6.6 初次启动 103
9.7 选择随机元素 103
9.8 习题 104
第10章 素数 106
10.1 整除性与素数 106
10.2 产生小素数 107
10.3 素数的模运算 109
10.3.1 加法和减法 109
10.3.2 乘法 110
10.3
Cryptography Engineering: Design Principles and Practical Applications
出版者的话
译者序
前言
《实用密码学》前言
关于作者
部分 概述
第1章 密码学研究范围 2
1.1 密码学的作用 2
1.2 木桶原理 3
1.3 对手设定 4
1.4 专业偏执狂 5
1.4.1 更广泛的好处 5
1.4.2 攻击 5
1.5 威胁模型 6
1.6 密码学不是解决方案 7
1.7 密码学是非常难的 8
1.8 密码学是简单的部分 8
1.9 通用攻击 9
1.10 安全性和其他设计准则 9
1.10.1 安全性和性能 9
1.10.2 安全性和特性 10
1.10.3 安全性和演变的系统 11
1.11 更多阅读材料 11
1.12 专业偏执狂练习 12
1.12.1 时事练习 12
1.12.2 安全审查练习 12
1.13 习题 13
第2章 密码学简介 14
2.1 加密 14
2.2 认证 15
2.3 公钥加密 16
2.4 数字签名 17
2.5 PKI 18
2.6 攻击 18
2.6.1 唯密文攻击模型 19
2.6.2 已知明文攻击模型 19
2.6.3 选择明文攻击模型 19
2.6.4 选择密文攻击模型 19
2.6.5 区分攻击的目的 20
2.6.6 其他类型的攻击 20
2.7 深入探讨 20
2.7.1 生日攻击 20
2.7.2 中间相遇攻击 21
2.8 安全等级 22
2.9 性能 22
2.10 复杂性 23
2.11 习题 24
第二部分 消息安全
第3章 分组密码 26
3.1 什么是分组密码 26
3.2 攻击类型 27
3.3 理想分组密码 27
3.4 分组密码安全的定义 28
3.5 实际分组密码 30
3.5.1 DES 30
3.5.2 AES 32
3.5.3 Serpent 34
3.5.4 Twofish 34
3.5.5 其他的AES候选算法 36
3.5.6 如何选择分组密码 36
3.5.7 如何选择密钥长度 36
3.6 习题 37
第4章 分组密码工作模式 39
4.1 填充 39
4.2 ECB 40
4.3 CBC 40
4.3.1 固定IV 40
4.3.2 计数器IV 41
4.3.3 随机IV 41
4.3.4 瞬时IV 41
4.4 OFB 42
4.5 CTR 43
4.6 加密与认证 44
4.7 如何选择工作模式 44
4.8 信息泄露 44
4.8.1 碰撞的可能性 45
4.8.2 如何处理信息泄露 46
4.8.3 关于数学证明 46
4.9 习题 47
第5章 散列函数 48
5.1 散列函数的安全性 48
5.2 实际的散列函数 49
5.2.1 一种简单但不安全的散列函数 50
5.2.2 MD5 50
5.2.3 SHA-1 51
5.2.4 SHA-224、SHA-256、SHA-384和SHA-512 51
5.3 散列函数的缺陷 52
5.3.1 长度扩充 52
5.3.2 部分消息碰撞 52
5.4 修复缺陷 53
5.4.1 一个临时的修复方法 53
5.4.2 一个更有效的修复方法 53
5.4.3 其他修复方法 54
5.5 散列算法的选择 55
5.6 习题 55
第6章 消息认证码 56
6.1 MAC的作用 56
6.2 理想MAC与MAC的安全性 56
6.3 CBC-MAC和CMAC 57
6.4 HMAC 58
6.5 GMAC 59
6.6 如何选择MAC 60
6.7 MAC的使用 60
6.8 习题 61
第7章 安全信道 63
7.1 安全信道的性质 63
7.1.1 角色 63
7.1.2 密钥 63
7.1.3 消息或字节流 64
7.1.4 安全性质 64
7.2 认证与加密的顺序 65
7.3 安全信道设计概述 66
7.3.1 消息编号 66
7.3.2 认证 67
7.3.3 加密 67
7.3.4 组织格式 68
7.4 详细设计 68
7.4.1 初始化 68
7.4.2 发送消息 69
7.4.3 接收消息 70
7.4.4 消息的顺序 71
7.5 备选方案 71
7.6 习题 72
第8章 实现上的问题I 74
8.1 创建正确的程序 75
8.1.1 规范 75
8.1.2 测试和修复 75
8.1.3 不严谨的态度 76
8.1.4 如何着手 76
8.2 制作安全的软件 77
8.3 保守秘密 77
8.3.1 清除状态 77
8.3.2 交换文件 79
8.3.3 高速缓冲存储器 79
8.3.4 内存保留数据 80
8.3.5 其他程序的访问 82
8.3.6 数据完整性 82
8.3.7 需要做的工作 83
8.4 代码质量 83
8.4.1 简洁性 83
8.4.2 模块化 83
8.4.3 断言 84
8.4.4 缓冲区溢出 84
8.4.5 测试 85
8.5 侧信道攻击 85
8.6 一些其他的话 86
8.7 习题 86
第三部分 密钥协商
第9章 生成随机性 88
9.1 真实随机 88
9.1.1 使用真实随机数的问题 89
9.1.2 伪随机数 89
9.1.3 真实随机数和伪随机数生成器 90
9.2 伪随机数生成器的攻击模型 90
9.3 Fortuna 91
9.4 生成器 91
9.4.1 初始化 93
9.4.2 更新种子 93
9.4.3 生成块 94
9.4.4 生成随机数 94
9.4.5 生成器速度 95
9.5 累加器 95
9.5.1 熵源 95
9.5.2 熵池 96
9.5.3 ?实现注意事项 97
9.5.4?初始化 98
9.5.5 获取随机数据 99
9.5.6 添加事件 100
9.6 种子文件管理 101
9.6.1 写种子文件 101
9.6.2 更新种子文件 101
9.6.3 读写种子文件的时间 102
9.6.4 备份和虚拟机 102
9.6.5 文件系统更新的原子性 103
9.6.6 初次启动 103
9.7 选择随机元素 103
9.8 习题 104
第10章 素数 106
10.1 整除性与素数 106
10.2 产生小素数 107
10.3 素数的模运算 109
10.3.1 加法和减法 109
10.3.2 乘法 110
10.3
前 言
前 言Cryptography Engineering: Design Principles and Practical Applications大多数图书涵盖了“密码学是什么?”——现在的密码是如何设计的,以及现有的密码协议(如SSL / TLS)是如何工作的。 Bruce Schneier的早期著作《应用密码学》(Applied Cryptography)就是这样。这样的书对于任何密码领域的人都是非常有价值的参考书,但与现实中密码工程师和安全工程师的需求有差距。密码工程师和安全工程师不仅需要知道当前的密码协议如何工作,还需要知道如何正确地使用密码。
要知道如何使用密码,人们必须学会像密码学家一样思考。本书旨在帮助你实现这一目标。我们通过深入的讨论做到这一点——对明确具体的协议进行深入的设计和分析,而不是对密码学中的所有协议进行泛泛的探讨。我们手把手地教你设计密码协议,分享我们做出某些设计决策的原因,并指出其中可能存在的陷阱。
通过学习如何像密码学家一样思考,你还将学习如何成为更聪明的密码使用者。你将能够查看现有的加密工具包,理解其核心功能,并了解如何使用它们。你还将更好地理解加密技术所涉及的挑战,以及如何克服这些挑战。
本书也是学习计算机安全的一本指导书。在许多方面,计算机安全是密码学的超集。计算机安全和密码学都是关于设计和评价以某些方式表现的对象(系统或算法)的,甚至在有对手的情况下。在本书中,你将学习如何在加密技术的背景下思考对手的行为。一旦知道如何像对手一样思考,你就可以将这种思维方式扩展到一般的计算机系统安全上。
历史这本书基于Niels Ferguson和Bruce Schneier编著的《实用密码学》(Practical Cryptography),并由Tadayoshi Kohno(Yoshi)增补内容修改而成。Yoshi是华盛顿大学计算机科学与工程系教授,也是Niels和Bruce之前的同事。Yoshi以《实用密码学》作为基础,将其修改为适合课堂使用和自学,同时保持了Niels和Bruce的原书主旨。
教学大纲本书可以用作应用密码工程的自学指南,也可以用作教材。可以在关于计算机安全的一季度或一学期的课程中使用本书,例如作为6周或10周的密码学课程的基础教材,如果时间允许,还可以增加高级材料。为了方便课堂使用,我们提供以下几种可能的教学大纲。
下面的教学大纲适合于6周的课程。对于这一课程,假设第1章的内容在一般的计算机安全的更广泛背景下单独讨论,此处不考虑。
第1周:第2~4章;第2周:第5~7章;第3周:第8~10章;第4周:第11~13章;第5周:第14~17章;第6周:第18~21章。
以下大纲是针对10周的密码学课程。
第1周:第1和2章;第2周:第3和4章;第3周:第5和6章;第4周:第7和8章;第5周:第9和10章;第6周:第11和12章;第7周:第13和14章;第8周:第15~17章;第9周:第18~20章;第10周:第21章。
以下大纲适用于12周的课程,可以增加密码学或计算机安全的高级材料。
第1周:第1和2章;第2周:第3和4章;第3周:第5和6章;第4周:第7章;第5周:第8和9章;第6周:第9(续)和10章;第7周:第11和12章;第8周:第13和14章;第9周:第15和16章;第10周:第17和18章;第11周:第19和20章;第12周:第21章。
本书有几种类型的练习,建议你尽可能多地完成这些练习。其中包括传统的练习,旨在测试你对加密技术的理解。但是,由于我们的目标是帮助你学习如何在真实系统中考虑加密,所以还引入了一组非传统练习(参见1.12节)。密码学不是孤立存在的,而是由其他硬件和软件系统、人、经济、伦理、文化差异、政治、法律等组成的更大生态系统的一部分。非传统练习是明确设计的,以促使你在真实系统和周边生态系统的上下文中考虑加密。这些练习提供了将本书的内容直接应用到真实系统中的机会。此外,通过这些练习,随着学习的推进,你将看到自己的知识不断增加。
其他信息虽然我们努力使本书没有错误,但是无疑错误不可避免。我们为本书维护了在线勘误表,使用此勘误表的方法如下。
阅读本书之前,请访问http://www.schneier.com/ce.html并下载当前的更正列表。
如果你在书中发现错误,请检查其是否已在列表中。如果它不在列表中,请发邮件到[email protected]。我们将把错误添加到在线列表中。
希望你有一个学习密码学的美好旅程。密码学是一个奇妙和迷人的主题,希望你从本书中学到很多东西,并且像我们一样享受密码工程。
致谢非常感谢密码学和安全社区,如果没有他们在推进这一领域研究上所做的努力,本书是不可能出现的。本书还反映了我们作为密码学家的知识和经验,非常感谢我们的同行和导师帮助我们形成对密码学的理解。
感谢Jon Callas、Ben Greenstein、Gordon Goetz、Alex Halderman、John Kelsey、Karl Koscher、Jack Lloyd、Gabriel Maganis、Theresa Portzer、Jesse Walker、Doug Whiting、Zooko Wilcox-O’Hearn和Hussein Yapit,他们对本书的早期版本给出了非常有价值的反馈意见。
本书的部分内容是在华盛顿大学的本科生计算机安全课程教学中得到发展和完善的,感谢所有学生和助教。特别感谢Josh
要知道如何使用密码,人们必须学会像密码学家一样思考。本书旨在帮助你实现这一目标。我们通过深入的讨论做到这一点——对明确具体的协议进行深入的设计和分析,而不是对密码学中的所有协议进行泛泛的探讨。我们手把手地教你设计密码协议,分享我们做出某些设计决策的原因,并指出其中可能存在的陷阱。
通过学习如何像密码学家一样思考,你还将学习如何成为更聪明的密码使用者。你将能够查看现有的加密工具包,理解其核心功能,并了解如何使用它们。你还将更好地理解加密技术所涉及的挑战,以及如何克服这些挑战。
本书也是学习计算机安全的一本指导书。在许多方面,计算机安全是密码学的超集。计算机安全和密码学都是关于设计和评价以某些方式表现的对象(系统或算法)的,甚至在有对手的情况下。在本书中,你将学习如何在加密技术的背景下思考对手的行为。一旦知道如何像对手一样思考,你就可以将这种思维方式扩展到一般的计算机系统安全上。
历史这本书基于Niels Ferguson和Bruce Schneier编著的《实用密码学》(Practical Cryptography),并由Tadayoshi Kohno(Yoshi)增补内容修改而成。Yoshi是华盛顿大学计算机科学与工程系教授,也是Niels和Bruce之前的同事。Yoshi以《实用密码学》作为基础,将其修改为适合课堂使用和自学,同时保持了Niels和Bruce的原书主旨。
教学大纲本书可以用作应用密码工程的自学指南,也可以用作教材。可以在关于计算机安全的一季度或一学期的课程中使用本书,例如作为6周或10周的密码学课程的基础教材,如果时间允许,还可以增加高级材料。为了方便课堂使用,我们提供以下几种可能的教学大纲。
下面的教学大纲适合于6周的课程。对于这一课程,假设第1章的内容在一般的计算机安全的更广泛背景下单独讨论,此处不考虑。
第1周:第2~4章;第2周:第5~7章;第3周:第8~10章;第4周:第11~13章;第5周:第14~17章;第6周:第18~21章。
以下大纲是针对10周的密码学课程。
第1周:第1和2章;第2周:第3和4章;第3周:第5和6章;第4周:第7和8章;第5周:第9和10章;第6周:第11和12章;第7周:第13和14章;第8周:第15~17章;第9周:第18~20章;第10周:第21章。
以下大纲适用于12周的课程,可以增加密码学或计算机安全的高级材料。
第1周:第1和2章;第2周:第3和4章;第3周:第5和6章;第4周:第7章;第5周:第8和9章;第6周:第9(续)和10章;第7周:第11和12章;第8周:第13和14章;第9周:第15和16章;第10周:第17和18章;第11周:第19和20章;第12周:第21章。
本书有几种类型的练习,建议你尽可能多地完成这些练习。其中包括传统的练习,旨在测试你对加密技术的理解。但是,由于我们的目标是帮助你学习如何在真实系统中考虑加密,所以还引入了一组非传统练习(参见1.12节)。密码学不是孤立存在的,而是由其他硬件和软件系统、人、经济、伦理、文化差异、政治、法律等组成的更大生态系统的一部分。非传统练习是明确设计的,以促使你在真实系统和周边生态系统的上下文中考虑加密。这些练习提供了将本书的内容直接应用到真实系统中的机会。此外,通过这些练习,随着学习的推进,你将看到自己的知识不断增加。
其他信息虽然我们努力使本书没有错误,但是无疑错误不可避免。我们为本书维护了在线勘误表,使用此勘误表的方法如下。
阅读本书之前,请访问http://www.schneier.com/ce.html并下载当前的更正列表。
如果你在书中发现错误,请检查其是否已在列表中。如果它不在列表中,请发邮件到[email protected]。我们将把错误添加到在线列表中。
希望你有一个学习密码学的美好旅程。密码学是一个奇妙和迷人的主题,希望你从本书中学到很多东西,并且像我们一样享受密码工程。
致谢非常感谢密码学和安全社区,如果没有他们在推进这一领域研究上所做的努力,本书是不可能出现的。本书还反映了我们作为密码学家的知识和经验,非常感谢我们的同行和导师帮助我们形成对密码学的理解。
感谢Jon Callas、Ben Greenstein、Gordon Goetz、Alex Halderman、John Kelsey、Karl Koscher、Jack Lloyd、Gabriel Maganis、Theresa Portzer、Jesse Walker、Doug Whiting、Zooko Wilcox-O’Hearn和Hussein Yapit,他们对本书的早期版本给出了非常有价值的反馈意见。
本书的部分内容是在华盛顿大学的本科生计算机安全课程教学中得到发展和完善的,感谢所有学生和助教。特别感谢Josh
评论
还没有评论。