在家赚钱的十种方法 图灵程序设计丛书:图解密码技术,内容简介 《图解密码技术》以图配文的形式,详细讲解了6种最重要的密码技术:对称密码、公钥密码、单向散列函数、消息认证码、数字签名和伪随机数生成器。
第一部分讲述了密码技术的历史沿革、对称密码、分组密码模式(包括ECB、CBC、CFB、OFB、CTR)、公钥、混合密码系统。第二部分重点介绍了认证方面的内容,涉及单向散列函数、消息认证码、数字签名、证书等。第三部分讲述了密钥、随机数、PGP、SSL/TLS以及密码技术在现实生活中的应用。
目录第1部分 密码
第1章 环游密码世界
1.1 本章学习的内容
1.2 密码
1.3 对称密码与公钥密码
1.4 其他密码技术
1.5 密码学家的工具箱
1.6 隐写术与数字水印
1.7 密码与信息安全常识
1.8 本章小结
1.9 小测验的答案
第2章 历史上的密码——写一篇别人看不懂的文章
2.1 本章学习的内容
2.2 恺撒密码
2.3 简单替换密码
2.4 Enigma
2.5 思考
2.6 本章小结
2.7 小测验的答案
第3章 对称密码(共享密钥密码)——用相同的密钥进行加密和解密
3.1 炒鸡蛋与对称密码
3.2 本章学习的内容
3.3 从文字密码到比特序列密码
3.4 一次性密码本——绝对不会被破译的密码
3.5 DES
3.6 三重DES
3.7 AES的选定过程
3.8 Rijndael
3.9 本章小结
3.10 小测验的答案
第4章 分组密码的模式——分组密码是如何迭代的
4.1 本章学习的内容
4.2 分组密码的模式
4.3 ECB模式
4.4 CBC模式
4.5 CFB模式
4.6 OFB模式
4.7 CTR模式
4.8 应该使用哪种模式呢
4.9 本章小结
4.10 小测验的答案
第5章 公钥密码——用公钥加密,用私钥解密
5.1 投币寄物柜的使用方法
5.2 本章学习的内容
5.3 密钥配送问题
5.4 公钥密码
5.5 时钟运算
5.6 RSA
5.7 对RSA的攻击
5.8 其他公钥密码
5.9 关于公钥密码的问答
5.10 本章小结
5.11 小测验的答案
第6章 混合密码系统——用对称密码提高速度,用公钥密码保护会话密钥
6.1 混合动力汽车
6.2 本章学习的内容
6.3 混合密码系统
6.4 怎样才是高强度的混合密码系统
6.5 密码技术的组合
6.6 本章小结
6.7 小测验的答案
阅读
第2部分 认证
第7章 单向散列函数——获取消息的“指纹”
7.1 本章学习的内容
7.2 什么是单向散列函数
7.3 单向散列函数的实际应用
7.4 单向散列函数的具体例子
7.5 单向散列函数SHA-1
7.6 对单向散列函数的攻击
7.7 单向散列函数无法解决的问题
7.8 本章小结
7.9 小测验的答案
第8章 消息认证码——消息被正确传送了吗
8.1 本章学习的内容
8.2 消息认证码
8.3 消息认证码的应用实例
8.4 消息认证码的实现方法
8.5 HMAC的详细介绍
8.6 对消息认证码的攻击
8.7 消息认证码无法解决的问题
8.8 本章小结
8.9 小测验的答案
第9章 数字签名——消息到底是谁写的
9.1 羊妈妈的认证
9.2 本章学习的内容
9.3 数字签名
9.4 数字签名的方法
9.5 对数字签名的疑问
9.6 数字签名的应用实例
9.7 通过RSA实现数字签名
9.8 其他的数字签名
9.9 对数字签名的攻击
9.10 各种密码技术的对比
9.11 数字签名无法解决的问题
9.12 本章小结
9.13 小测验的答案
第10章 证书——为公钥加上数字签名
10.1 本章学习的内容
10.2 证书
10.3 实际生成一张证书
10.4 公钥基础设施(PKI)
10.5 对证书的攻击
10.6 关于证书的Q&A
10.7 本章小结
10.8 小测验的答案
第3部分 密钥、随机数与应用技术
第11章 密钥——秘密的精华
11.1 本章学习的内容
11.2 什么是密钥
11.3 各种不同的密钥
11.4 密钥的管理
11.5 Diffie-Hellman密钥交换
11.6 基于口令的密码(PBE)
11.7 如何生成安全的口令
11.8 本章小结
11.9 小测验的答案
第12章 随机数——不可预测性的源泉
12.1 骡子的锁匠铺
12.2 本章学习的内容
12.3 使用随机数的密码技术
12.4 随机数的性质
12.5 伪随机数生成器
12.6 具体的伪随机数生成器
12.7 对伪随机数生成器的攻击
12.8 本章小结
12.9 小测验的答案
第13章 PGP ——密码技术的完美组合
13.1 本章学习的内容
13.2 PGP简介
13.3 生成密钥对
13.4 加密与解密
13.5 生成和验证数字签名
13.6 生成数字签名并加密以及解密并验证数字签名
13.7 信任网
13.8 本章小结
13.9 小测验的答案
第14章 SSL/TLS ——为了更安全的通信
14.1 本章学习的内容
14.2 什么是SSL/TLS
14.3 使用SSL/TLS进行通信
14.4 对SSL/TLS的攻击
14.5 SSL/TLS用户的注意事项
14.6 本章小结
14.7 小测验的答案
第15章 密码技术与现实社会——我们生活在不完美的安全中
15.1 本章学习的内容
15.2 密码技术小结
15.3 追寻完美的密码技术
15.4 只有完美的密码,没有完美的人
15.5 本章小结
附录 密码技术综合测验
参考文献
精彩书摘 在继续下面的内容之前,我们先来介绍一些关于密码的常识。刚刚开始学习密码的人常常会对以下这几条感到不可思议,因为它们有悖于我们的一般性常识。
·不要使用保密的密码算法
·使用低强度的密码比不进行任何加密更危险
·任何密码总有一天都会被破解
·密码只是信息安全的一部分
1.7.1不要使用保密的密码算法
很多企业都有下面这样的想法:
“由公司自己开发一种密码算法,并将这种算法保密,这样就能保证安全。”
然而,这样的想法却是大错特错,使用保密的密码算法是无法获得高安全性的。
我们不应该制作或使用任何保密的密码算法,而是应该使用那些已经公开的、被公认为强度较高的密码算法。
这样做的原因主要有以下两点:
密码算法的秘密早晚会公诸于世
从历史上看,密码算法的秘密最终无一例外地都会被暴露出来。拿最近的事例来说,DVD的密码算法也没能幸免被扒皮的命运。RSA公司开发的Rc4密码算法曾经也是保密的,但最终还是有一位匿名人士开发并公开了与其等效的程序。
一旦密码算法的详细信息被暴露,依靠对密码算法本身进行保密来确保机密性的密码系统也就土崩瓦解了。反之,那些公开的算法从一开始就没有设想过要保密,因此算法的暴露丝毫不会削弱它们的强度。
开发高强度的密码算法是非常困难的
要比较密码算法的强弱是极其困难的,因为密码算法的强度并不像数学那样可以进行严密的证明。密码算法的强度只能通过事实来证明,如果专业密码破译者经过数年的尝试仍然没有破解某个密码算法,则说明这种算法的强度较高。
稍微聪明一点的程序员很容易就能够编写出“自己的密码系统”。这样的密码在外行看来貌似牢不可破,但在专业密码破译者的眼里,要破解这样的密码几乎是手到擒来。
现在世界上公开的被认为强度较高的密码算法,几乎都是经过密码破译者长期尝试破解未果而存活下来的。因此,如果认为“公司自己开发的密码系统比那些公开的密码系统更强”,那只能说是过于高估自己公司的能力了。
试图通过对密码算法本身进行保密来确保安全性的行为,一般称为隐蔽式安全性(securitvbyobscury),这种行为是危险且愚蠢的。
反过来说,将密码算法的详细信息以及程序源代码全部交给专业密码破译者,并且为其提供大量的明文和密文样本,如果在这样的情况下破译一段新的密文依然需要花上相当长的时间,就说明这是高强度的密码。
1.7.2使用低强度的密码比不进行任何加密更危险
一般人们会认为:就算密码的强度再低,也比完全不加密要强吧?其实这样的想法是非常危险的。
正确的想法应该是:与其使用低强度的密码,还不如从一开始就不使用任何密码。
这主要是由于用户容易通过“密码”这个词获得一种“错误的安全感”。对于用户来说,安全感与密码的强度无关,而只是由“信息已经被加密了”这一事实产生的,而这通常会导致用户在处理一些机密信息的时候麻痹大意。
早在16世纪,当时的苏格兰女王玛丽就曾认为没有人能够破译自己使用的密码。正是由于对密码的盲信,她将刺杀伊丽莎白女王的计划明明白白地写在了密信中,结果密码遭到破译,玛丽也因此被送上了断头台。
1.7.3任何密码总有一天都会被破解
如果某种密码产品宣称“本产品使用了绝对不会被破解的密码算法”,那么你就要对这个产品的安全性打个问号了,这是因为绝对不会被破解的密码是不存在的。
无论使用任何密码算法所生成的密文,只要将所有可能的密钥全部尝试一遍,就总有一天可以破译出来。因此,破译密文所需要花费的时间,与要保密的明文的价值之间的权衡就显得非常重要。
……
前言/序言 我们每个人都有自己的秘密,所谓秘密就是不希望被别人知道的信息。例如,你肯定不想让别人知道你的银行卡口令。还有信用卡号、贷款金额、异性关系、犯罪履历、病历、电子邮箱口令等,这些敏感信息恐怕谁都不希望泄漏给他人。别说这些敏感信息了,有些人就连年龄、身高和体重都想保密,某些情况下甚至不希望对方知道自己的姓名。
在现代社会中,很多信息都存储在计算机里,这让信息的使用变得非常方便:不但可以快速复制,还可以很容易地修改其中的错误;你可以发邮件给位于世界上任何地方的人,也可以将信息制作成网页让世界上所有的人都能够看到。
不过,也正是因为如此,在现代社会中要保护好自己的秘密信息已经变得非常困难。
即便别人复制了你的秘密信息,你也不会有所察觉,因为你手上的信息并没有丢失;正是因为信息可以很容易地被修改,所以你的重要文件也存在被他人篡改的风险;此外,如果有人将你的秘密信息通过邮件发送给第三者或者是发布在网页上,也会给你带来大麻烦。
为了解决这些问题,人们开发出形形色色的?密码技术。例如,“密码”可以让窃听者无法解读窃取的消息,“单向散列函数”可以检测出消息是否被篡改过,“数字签名”可以确认消息是否来自合法的发送者。本书中介绍的各种密码技术,其存在的意义正是帮助在生活和工作中经常使用计算机的我们保守秘密,并确认信息的正确性。
然而,无论多么高级的密码技术,都存在一个巨大的弱点,那就是“人”。如果用户无法正确运用密码技术,就无法真正确保信息安全。就算用再强大的加密手段对文件进行保护,如果用户设置的口令非常弱,也会让加密形同虚设。要正确运用密码技术,就需要理解这些密码技术的特点,特别是必须理解“我现在正在做什么”以及“这个技术到底有什么意义”。
本书是一本以通俗易懂的方式介绍密码技术的入门书,希望在尽量减少繁冗的数学公式的前提下,能够让各位读者理解各种密码技术的功能和意义。
密码已经不再仅仅属于专家和研究人员,而是我们每一个生活在现代社会的人都必须要掌握的一门技术。希望各位读者能够通过本书,学习到密码技术以及信息安全方面的基础知识。
在本书中,“密码”一词指的是安全传送消息的方法(即英文的cryptography),通常包括密码算法和密钥等部分,并不是我们俗称的,在网站和ATM中输入的那种“密码”(即英文的password、passphrase或者pin)。为了以示区别,本书中将后者统一翻译为“口令”。——译者注
本书的特点
本书的特点如下。
通俗易懂地讲解密码技术
密码技术分为很多种类,无论哪一种都是非常复杂而难以理解的。本书中精选了其中特别重要的几种,并通过大量的图示对它们进行通俗易懂的讲解。
讲解密码技术的相互关系
每一种密码技术都不是单独存在的,而是通过相互关联、相互补充,形成了一个巨大的框架,就如同一块巨大的拼图一样。本书中将为大家讲解组成这一巨大拼图的各种密码技术之间的相互关系。
讲解“密码的常识”
一般常识与密码界中的常识之间存在一定的差异。例如,一般人往往会认为“保密的密码算法比较安全”,然而,密码界中的常识却是“不要使用保密的密码算法”。本书中会关注一般常识与密码界中的常识存在差异的地方,以便引起读者的注意,不要做出错误的判断。
目标读者
本书的目标读者主要包括以下人群:
对密码相关知识感兴趣的人
希望理解公钥密码、数字签名等密码技术原理的人
对信息安全感兴趣的人
数学不好的人也能看懂
数学是密码技术得以成立的基础,因此难免会碰到复杂的数学公式。为了让数学不好的读者也能够理解,本书中尽力避免使用大量的数学公式,而是更多地采用示意图来进行讲解。
通过小测验确认理解的程度
本书正文中会提供一些帮助确认理解程度的小测验,其中的题目在阅读本书的过程中大多都能够很快回答出来。在每一章的最后可以找到本章小测验的答案,读者可以在阅读本书的过程中,随时确认自己的理解程度。此外,在本书的最后还有一篇“密码技术总体测验”,读者可以通过这些题目来确认自己对本书内容的整体理解程度。


