内容简介
本书深入地探讨特定的、具体的协议,讲述如何设计密码协议,分析做出设计决策的原因,并指出其中可能存在的陷阱,从而帮助读者像密码学家一样思考。本书分为五部分,第 一部分对密码学进行概述,第二到四部分分别讲述消息安全、密钥协商、密钥管理方面的内容,第五部分介绍标准和专利等其他问题。本书可作为高等院校计算机安全和密码学相关专业的教材或教学参考书,也可作为应用密码工程的自学指南。
作者简介
关于作者CryptographyEngineering:DesignPrinciplesandPracticalApplicationsNielsFeiguso的整个职业生涯都是密码工程师。在Eindhoven大学学习数学后,他在DigiCash分析、设计和实现用来保护用户隐私的高级电子支付系统。后来,他担任Counterpane公司和MacFergus公司的密码顾问,分析了数百个系统并参与了几十个系统的设计。他参与了Twofish分组密码设计,对AES做了一些好的初步分析,并参与了现在WiFi所使用的加密系统的研发。自2004年以来,他在微软工作,帮助设计和实现BitLocker磁盘加密系统。他目前在Windows密码小组工作,负责Windows和其他微软产品中的加密实现。
BruceSchneier是国际知名的安全技术专家,被《经济学人》杂志称为“安全教父”。他是14本书的作者,其中包括畅销书《超过恐惧:在一个不确定的世界中明智地思考安全》《秘密和谎言》和《应用密码学》,并发表了数百篇文章和学术论文。他的很有影响力的通讯“Crypto-Gram”和博客“SchneieronSecurity”有超过25万读者。他是电视和广播电台的常客,并且他关于安全和隐私问题的言论经常被报纸引用。他曾多次在国会作证,并且曾在多个政府技术委员会任职。他是BT(原英国电信)的首席安全技术官。
TadayoshiKohno(Yoshi)是华盛顿大学计算机科学与工程系教授。他的研究兴趣是提高当前和未来技术的安全性和隐私性。他在2003年对DieboldAccuVote-TS电子投票机的源代码进行了初步安全分析,并从此将研究领域转向了从无线植入式起搏器和除颤器到云计算的新兴安全技术。他获得了国家科学基金会CAREER奖和AlfredP.Sloan研究奖学金。2007年,鉴于他对应用密码学的贡献,入选《麻省理工学院科技评论》全球青年科技创新人才榜(TR35),是35岁以下的世界创新者之一。他在加州大学圣迭戈分校获得计算机科学博士学位。
Niels、Bruce和Yoshi是Skein散列函数设计团队的成员,该团队是NIST的SHA-3竞赛的参与者之一。
目录
目录
CryptographyEngineering:DesignPrinciplesandPracticalApplications
出版者的话
译者序
前言
《实用密码学》前言
关于作者
第一部分概述
第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.5PKI18
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.1DES30
3.5.2AES32
3.5.3Serpent34
3.5.4Twofish34
3.5.5其他的AES候选算法36
3.5.6如何选择分组密码36
3.5.7如何选择密钥长度36
3.6习题37
第4章分组密码工作模式39
4.1填充39
4.2ECB40
4.3CBC40
4.3.1固定IV40
4.3.2计数器IV41
4.3.3随机IV41
4.3.4瞬时IV41
4.4OFB42
4.5CTR43
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.2MD550
5.2.3SHA-151
5.2.4SHA-224、SHA-256、SHA-384和SHA-51251
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.1MAC的作用56
6.2理想MAC与MAC的安全性56
6.3CBC-MAC和CMAC57
6.4HMAC58
6.5GMAC59
6.6如何选择MAC60
6.7MAC的使用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章实现上的问题I74
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.3Fortuna91
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
......
精彩书摘
关于种子文件的另外一个重要问题就是文件系统更新的原子性。在大多数操作系统中,对种子文件的写操作仅仅是对一些内存缓冲区进行更新,很久之后才会将数据真正写到磁盘上。虽然一些文件系统提供了“flush”命令,声称能够将缓存上的所有数据都写到磁盘上,但是这个操作执行得非常缓慢,而且有时候硬件上并不会真正执行“flush”命令。
无论何时使用种子文件来更新种子,都要在用户请求随机数据之前更新种子文件,而且必须要保证磁盘上的数据也进行了更新。在一些文件系统中,对文件数据和文件管理信息的操作是分开进行的,所以更新种子文件时文件管理信息和实际的文件信息不符,如果此时机器断电了,种子文件就会损坏甚至丢失,这样的文件系统对安全系统来说是不适用的。
一些文件系统使用日志来解决部分问题。日志技术最初是在大型数据库系统中提出来的,而日志就是对文件系统的所有更新操作的列表。如果恰当地使用日志,能够保证在进行更新操作时,文件管理信息和文件信息也是一致的。从可靠性的角度看,使用了日志的文件系统更适用,遗憾的是常见的文件系统只是将日志用于文件管理信息,并不能完全达到我们的要求。
如果硬件和操作系统不能保证文件更新的原子性和永久性,就不能安全地使用种子文件。在实际应用中,可以根据具体的工作平台来尽量可靠地更新种子文件。
……
前言/序言
前言CryptographyEngineering:DesignPrinciplesandPracticalApplications大多数图书涵盖了“密码学是什么?”——现在的密码是如何设计的,以及现有的密码协议(如SSL/TLS)是如何工作的。BruceSchneier的早期著作《应用密码学》(AppliedCryptography)就是这样。这样的书对于任何密码领域的人都是非常有价值的参考书,但与现实中密码工程师和安全工程师的需求有差距。密码工程师和安全工程师不仅需要知道当前的密码协议如何工作,还需要知道如何正确地使用密码。
要知道如何使用密码,人们必须学会像密码学家一样思考。本书旨在帮助你实现这一目标。我们通过深入的讨论做到这一点——对明确具体的协议进行深入的设计和分析,而不是对密码学中的所有协议进行泛泛的探讨。我们手把手地教你设计密码协议,分享我们做出某些设计决策的原因,并指出其中可能存在的陷阱。
通过学习如何像密码学家一样思考,你还将学习如何成为更聪明的密码使用者。你将能够查看现有的加密工具包,理解其核心功能,并了解如何使用它们。你还将更好地理解加密技术所涉及的挑战,以及如何克服这些挑战。
本书也是学习计算机安全的一本指导书。在许多方面,计算机安全是密码学的超集。计算机安全和密码学都是关于设计和评价以某些方式表现的对象(系统或算法)的,甚至在有对手的情况下。在本书中,你将学习如何在加密技术的背景下思考对手的行为。一旦知道如何像对手一样思考,你就可以将这种思维方式扩展到一般的计算机系统安全上。
历史这本书基于NielsFerguson和BruceSchneier编著的《实用密码学》(PracticalCryptography),并由TadayoshiKohno(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。我们将把错误添加到在线列表中。
希望你有一个学习密码学的美好旅程。密码学是一个奇妙和迷人的主题,希望你从本书中学到很多东西,并且像我们一样享受密码工程。
致谢非常感谢密码学和安全社区,如果没有他们在推进这一领域研究上所做的努力,本书是不可能出现的。本书还反映了我们作为密码学家的知识和经验,非常感谢我们的同行和导师帮助我们形成对密码学的理解。
感谢JonCallas、BenGreenstein、GordonGoetz、AlexHalderman、JohnKelsey、KarlKoscher、JackLloyd、GabrielMaganis、TheresaPortzer、JesseWalker、DougWhiting、ZookoWilcox-O’Hearn和HusseinYapit,他们对本书的早期版本给出了非常有价值的反馈意见。
本书的部分内容是在华盛顿大学的本科生计算机安全课程教学中得到发展和完善的,感谢所有学生和助教。特别感谢Josh
密码工程:原理与应用 电子书 下载 mobi epub pdf txt