密码工程:原理与应用
作者 : [美]尼尔斯·弗格森(Niels Ferguson) 布鲁斯·施奈尔(Bruce Schneier) 大仓河野(Tadayoshi Kohno)著
译者 : 赵一鸣 沙朝锋 李景涛 译
丛书名 : 计算机科学丛书
出版日期 : 2017-11-30
ISBN : 978-7-111-57435-4
定价 : 79.00元
教辅资源下载
扩展信息
语种 : 简体中文
页数 : 254
开本 : 16
原书名 : Cryptography Engineering: Design Principles and Practical Applications
原出版社: John Wiley & Sons(USA)
属性分类: 教材
包含CD : 无CD
绝版 :
图书简介

本书首先简要介绍密码学的概念及其在当今的应用,然后详细讲解了分组密码、散列函数、随机数、素数、RSA、PKI、密钥管理等内容,并结合丰富的实例帮助读者理解不同方向的密码学知识。

图书前言

大多数图书涵盖了“密码学是什么?”——现在的密码是如何设计的,以及现有的密码协议(如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并下载当前的更正列表。
如果你在书中发现错误,请检查其是否已在列表中。如果它不在列表中,请发邮件到cryptographyengineering@schneier.com。我们将把错误添加到在线列表中。
希望你有一个学习密码学的美好旅程。密码学是一个奇妙和迷人的主题,希望你从本书中学到很多东西,并且像我们一样享受密码工程。
致谢
非常感谢密码学和安全社区,如果没有他们在推进这一领域研究上所做的努力,本书是不可能出现的。本书还反映了我们作为密码学家的知识和经验,非常感谢我们的同行和导师帮助我们形成对密码学的理解。
感谢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,他们对本书的早期版本给出了非常有价值的反馈意见。
本书的部分内容是在华盛顿大学的本科生计算机安全课程教学中得到发展和完善的,感谢所有学生和助教。特别感谢Joshua Barr、Jonathan Beall、Iva Dermendjieva、Lisa Glendenning、Steven Myhre、Erik Turnquist和Heather Underwood,他们对本书提出了具体意见和建议。
感谢Melody Kadenko和Julie Svendsen在整个编写过程中的所有行政支持。感谢Beth Friedman对手稿所做的文字编辑。最后,感谢Carol Long、Tom Dinse和整个Wiley团队,他们鼓励我们准备本书,并一直给予我们帮助。
我们也感谢生活中所有其他人在幕后默默无闻地工作,使我们写成了本书。

2009年10月 

上架指导

计算机\安全

封底文字

知道相机的工作原理并不能使你成为伟大的摄影师,同样,知道什么是密码设计和现有密码协议的工作原理也不标志着你能熟练应用密码,你必须学会像密码学家一样思考。
这正是本书将要教给你的——深入明确具体的密码协议并学习为什么做这样的决策,认识其中的挑战并学习如何克服这些挑战。通过这本既适合课堂教学又适合自学的教材,你将学会在真实系统中有效地使用密码。
本书主要内容
 理解如何设计密码协议。
 理解密码和周围的系统之间的接口,周围的系统包括人、经济学、硬件、软件、伦理学、政策和现实世界的其他方面。
 超越安全协议去看周围的系统中存在的弱点。
 通过理解对手如何思考来阻挡对手的行为。
 学习如何将密码构建进新产品中。

作者简介

[美]尼尔斯·弗格森(Niels Ferguson) 布鲁斯·施奈尔(Bruce Schneier) 大仓河野(Tadayoshi Kohno)著:尼尔斯·弗格森(Niels Ferguson) 微软公司密码工程师,参与设计和实现BitLocker磁盘加密系统。目前在Windows密码小组工作,负责Windows和其他Microsoft产品中的加密实现。
布鲁斯·施奈尔(Bruce Schneier) 信息安全界巨擘,国际知名安全技术专家,现为IBM Resilient CTO、哈佛法学院伯克曼互联网与社会中心研究员、电子前线基金会(EFF)董事。被《经济学人》杂志评为“安全教父”,《个人电脑世界》杂志评为“全球50位最重要互联网人物之一”,《连线》杂志评为“世界最著名的安全专家之一”。他是14本书的作者,其中包括著名的《应用密码学》,他的博客和网络月刊在全球范围内拥有超过25万的读者。
大仓河野(Tadayoshi Kohno) 华盛顿大学计算机科学与工程系教授。他的研究兴趣是提高当前和未来技术的安全性和隐私性,开发密码学和计算机安全教育的创新方法。他获得了国家科学基金会CAREER奖和Alfred P. Sloan研究奖学金,并入选《麻省理工学院科技评论》2007年全球青年科技创新人才榜(TR-35)。

译者序

随着信息科学技术的高速发展和广泛应用,人类社会进入信息时代。信息技术改变着人们的生活和工作方式,同时也使得信息存在着严重的不安全性、危险性及脆弱性,更容易被窃听、篡改和破坏,信息安全问题越来越成为全社会关注的焦点,并成为制约信息技术应用发展的主要瓶颈之一。密码学作为实现信息安全的核心技术,在保障信息安全的应用中具有基础性的意义,已成为信息安全应用领域人员必须了解的基础知识。近年来国内外出版了大量适合学习和了解密码学的系列书籍,从各个层面为人们展示了密码学的基本概念、基本理论和实用技术。但多数密码学书籍通常侧重于密码算法的设计以及密码协议的工作过程,而对“如何在构建信息安全系统时正确实现密码协议”介绍较少。事实上,如果在实际使用中出现问题,对信息系统的安全造成的损害可能会更大。
由Niels Ferguson、Bruce Schneier和Tadayoshi Kohno编写的这本书,让读者像密码工程师一样思考,体会将加密技术构建到产品中的技术,并领悟应用过程中的技术变化。本书涵盖了密码学的所有主要领域,对明确具体的协议的实现问题进行了深入的分析,并且每章的应用实例和动手练习利于读者更好地理解密码学知识。本书明确描述了密码学的现实约束,侧重探讨如何设计并实现一个安全的密码系统。
本书三位作者在设计和构建密码系统方面都有丰富的实践经验,Niels Ferguson参与设计了著名密码算法Twofish,Bruce Schneier已在安全领域出版了14部著作,包括著名的《应用密码学》,Tadayoshi Kohno是华盛顿大学的教授,他们三位还是Skein散列函数设计团队的成员。他们对密码算法设计到使其成功工作所需的基础设施实现上的各个环节都十分清楚,因此本书对用密码算法构建安全信息系统具有极强的指导价值,是有关密码协议设计与实现的不可多得的参考书,也适合相关课程作为教材使用。鉴于本书的特点,在出版社邀请我翻译本书时,我欣然答应。我拿到书后认真阅读并做了摘记,深有启发,深深认同书中的观点:密码学研究中,通常关注密码算法的安全性问题,而很少关注算法实现过程中的问题,较少考虑密码算法用来构建安全的信息系统过程中可能存在的安全隐患(这种隐患不是算法本身所造成的,而是在实现过程中可能出现的问题)。
感谢我的学生丁圣龙、朱晗、刘雨阳、冯超逸在我所做摘记基础上做了部分扩充工作,使得翻译工作得以延续,之后李景涛老师、沙朝锋老师和我对全书进行了完整翻译,最后我对全书进行了审定和修改。由于译者的知识和翻译水平有限,对于本书中出现的错误,恳请广大读者批评指正。
本书翻译过程中,得到了出版社负责本书编辑出版工作的相关人员的支持和鼓励,他们工作认真,一丝不苟,为出版付出了大量辛勤劳动,在此表示衷心的感谢!

赵一鸣  
2017年10月

图书目录

出版者的话
译者序
前言
《实用密码学》前言
关于作者
第一部分 概述
第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.3 群和有限域 110
10.3.4 GCD算法 111
10.3.5 扩展欧几里得算法 111
10.3.6 模2运算 112
10.4 大素数 113
10.4.1 素性测试 115
10.4.2 计算模指数 117
10.5 习题 118
第11章 Diffie-Hellman协议 119
11.1 群 119
11.2 基本的DH 120
11.3 中间人攻击 121
11.4 一些可能的问题 122
11.5 安全的素数 122
11.6 使用较小的子群 123
11.7 p的长度 124
11.8 实践准则 125
11.9 可能出错的地方 126
11.10 习题 127
第12章 RSA 128
12.1 引言 128
12.2 中国剩余定理 128
12.2.1 Garner公式 129
12.2.2 推广 129
12.2.3 应用 130
12.2.4 结论 130
12.3 模n乘法 130
12.4 RSA 131
12.4.1 RSA数字签名 131
12.4.2 公开指数 132
12.4.3 私钥 132
12.4.4 n的长度 133
12.4.5 生成RSA密钥 133
12.5 使用RSA的缺陷 135
12.6 加密 136
12.7 签名 138
12.8 习题 139
第13章 密码协议导论 141
13.1 角色 141
13.2 信任 141
13.3 动机 143
13.4 密码协议中的信任 144
13.5 消息和步骤 144
13.5.1 传输层 145
13.5.2 协议标识符和消息标识符 145
13.5.3 消息编码和解析 146
13.5.4 协议执行状态 146
13.5.5 错误 147
13.5.6 重放和重试 147
13.6 习题 149
第14章 密钥协商 150
14.1 初始设置 150
14.2 初次尝试 150
14.3 协议会一直存在下去 151
14.4 一个认证的惯例 152
14.5 第二次尝试 152
14.6 第三次尝试 153
14.7 最终的协议 154
14.8 关于协议的一些不同观点 155
14.8.1 Alice的观点 155
14.8.2 Bob的观点 155
14.8.3 攻击者的观点 156
14.8.4 密钥泄露 157
14.9 协议的计算复杂性 157
14.10 协议复杂性 158
14.11 一个小警告 159
14.12 基于口令的密钥协商 159
14.13 习题 159
第15章 实现上的问题Ⅱ 160
15.1 大整数的运算 160
15.1.1 woop技术 161
15.1.2 检查DH计算 163
15.1.3 检查RSA加密 163
15.1.4 检查RSA签名 164
15.1.5 结论 164
15.2 更快的乘法 164
15.3 侧信道攻击 165
15.4 协议 166
15.4.1 安全信道上的协议 166
15.4.2 接收一条消息 167
15.4.3 超时设定 168
15.5 习题 168
第四部分 密钥管理
第16章 时钟 170
16.1 时钟的使用 170
16.1.1 有效期 170
16.1.2 唯一值 170
16.1.3 单调性 170
16.1.4 实时交易 171
16.2 使用实时时钟芯片 171
16.3 安全性威胁 171
16.3.1 时钟后置 171
16.3.2 时钟停止 172
16.3.3 时钟前置 172
16.4 建立可靠的时钟 173
16.5 相同状态问题 173
16.6 时间 174
16.7 结论 175
16.8 习题 175
第17章 密钥服务器 176
17.1 基本概念 176
17.2 Kerberos协议 176
17.3 更简单的方案 177
17.3.1 安全连接 177
17.3.2 建立密钥 178
17.3.3 重新生成密钥 178
17.3.4 其他性质 178
17.4 如何选择 178
17.5 习题 179
第18章 PKI之梦 180
18.1 PKI的简短回顾 180
18.2 PKI的例子 180
18.2.1 全局PKI 180
18.2.2 VPN访问 181
18.2.3 电子银行 181
18.2.4 炼油厂传感器 181
18.2.5 信用卡组织 181
18.3 其他细节 181
18.3.1 多级证书 181
18.3.2 有效期 182
18.3.3 独立的注册机构 182
18.4 结论 183
18.5 习题 183
第19章 PKI的现实 184
19.1 名字 184
19.2 授权机构 185
19.3 信任 186
19.4 间接授权 186
19.5 直接授权 187
19.6 凭证系统 187
19.7 修正的梦想 188
19.8 撤销 189
19.8.1 撤销列表 189
19.8.2 短有效期 190
19.8.3 在线证书验证 190
19.8.4 撤销是必需的 190
19.9 PKI有什么好处 191
19.10 如何选择 192
19.11 习题 192
第20章 PKI的实用性 193
20.1 证书格式 193
20.1.1 许可语言 193
20.1.2 根密钥 193
20.2 密钥的生命周期 194
20.3 密钥作废的原因 195
20.4 深入探讨 196
20.5 习题 196
第21章 存储秘密 197
21.1 磁盘 197
21.2 人脑记忆 197
21.3 便携式存储 200
21.4 安全令牌 200
21.5 安全UI 201
21.6 生物识别技术 201
21.7 单点登录 202
21.8 丢失的风险 202
21.9 秘密共享 203
21.10 清除秘密 203
21.10.1 纸 203
21.10.2 磁存储介质 204
21.10.3 固态存储 204
21.11 习题 205
第五部分 其他问题
第22章 标准和专利 208
22.1 标准 208
22.1.1 标准过程 208
22.1.2 SSL 210
22.1.3 AES:竞争带来的标准化 210
22.2 专利 211
第23章 关于专家 212
参考文献 215
索引 225

教学资源推荐
作者: [美]罗德·斯蒂芬斯(Rod Stephens) 著
作者: (美)Ramon A.Mata-Tloedo,Pauline K.Cushman
作者: [美]大卫·P. 威廉姆森(David P. Williamson) 著
作者: (美)June Jamrich Parsons;Dan Oja 著
参考读物推荐
作者: [美]戴维·埃文斯(David Evans),弗拉基米尔·科列斯尼科夫( Vladimir Kolesnikov),迈克·罗苏莱克(Mike Rosulek)著
作者: 章小莉等
作者: (美)Vic (J.R.) Winkler 著