一、环游密码世界

1 本章概要

从整体上了解密码世界的模样。

2 密码

2.1 Alice 与 Bob

要讲解密码,需要给参与信息交互的人和计算机起几个名字,如下表:

名称 说明
Alice 一般角色
Bob 一般角色
Eve 窃听者,可窃听通信内容
Mallory 主动攻击者,可妨碍正常通信、伪造消息等
Trent 可信的第三方
Victor 验证者

2.2 发送者、接受者和窃听者

Alice 向 Bob 发送消息,Alice 作为 Sender,Bob 作为 Receiver,消息作为 Message。在互联网中,消息会经过许多台计算机和通信设备做中转,
在这个过程中,就存在被恶意窃听者(eavesdropper)偷看的可能。作为监听者,我们给它起名为Eve,它可能是人类也有可能是某些程序软件。

2.3 加密与解密

Alice 不想让别人看到她传递消息的内容,因为它决定将消息加密(encrypt) 后再发送出去,加密之前的是明文(plaintext),加密之后的消息称为
密文(ciphertext)。

Bob 收到了 Alice 的加密消息后,他需要进行解密(decrypt)之后再查阅,即将密文恢复成明文的过程。这样,窃听者在网络上得到的只是密文。

2.4 破译

Eve 得到了密文,试图将密文还原为明文,被称为密码破译(cryptanalysis),简称破译,或者密码分析。

3 对称密码与公钥密码

3.1 密码算法

用于解决复杂问题的步骤,通常称为算法(algorithm),明文生成密文的步骤,被称为“加密算法”;而解密的步骤被称为“解密算法”,它们两统称为密码算法。

3.2 密钥

密码算法中需要密钥(key)。如下:

无论是在加密还是解密时,都需要知道密钥。

3.3 对称密钥与公钥密码

根据密钥的使用方法,可以将密码分为对称密码和公钥密码两种。

  1. 对称密码(symmetric cryptography)是指在加密和解密时使用同一密钥的方式。
  2. 公钥密码(public-key cryptography)则是在加密和解密时使用不同密钥的方式,也称非对称密码(asymmetric cryptography)。

3.4 混合密码系统

将对称密码和公钥密码结合起来的密码方式。

4 其它密码技术

4.1 单向散列函数

为了防止下载的软件被篡改,有安全意思的软件发布者会步的散列值。散列值就是用单向散列函数(one-way hash function)计算出来的数值。

单向散列函数所保证的并不是机密性,而是完整性(integrity),即“数据是正牌的而不是伪造的”。第七章,详细讲解。

4.2 消息认证码

为了确认消息是否来自所期望的通信对象,可以使用消息认证码(message authentication code)技术,不仅能保证完整性还能提供认证(authentication)机制。

4.3 数字签名

验证消息是否被篡改,能够确保完整性、提供认证并防止否认的密码机制。将第九章详解。

4.4 伪随机数生成器

伪随机数生成器(Pseudo Random Number Generator,PRNG)是一种能够模拟产生随机数列的算法。随机数和密码技术有关,这么说可能会感到意外,
但实际上随机数确实承担着密钥生成的重要职责。例如在 Web 中进行 SSL/TLS 通信时,会生成一个仅用于当前通信的临时密钥(会话密钥),这个密钥
就是基于伪随机数生成的。将在第十二章详解。

5 密码学家的工具箱

在以上内容中,已经出现了很多种类的密码技术,其中以下六种发挥尤其重要的作用:

  1. 对称密码
  2. 公钥密码(非对称密码)
  3. 单向散列函数
  4. 消息认证码
  5. 数字签名
  6. 伪随机数生成器

在本书中,将上述六种技术统称为密码学家的工具箱。

6 隐写术与数字水印

上面讲过,密码是一种能够让消息内容变得无法解读的技术,即 cryptography。除此之外,还有另外一种技术,它不是让消息内容变得无法解读,而是能够
隐藏消息本身,这种技术称为隐写术(steganography)。例如:
们先准备一段话,
容易看懂的就可以,
闻乐见的当然更好,
迎你尝试将另一句话嵌在这段话中,
会发现这其实就是一种隐写术。

这样,就发现这段话还隐藏着另一句话“我很喜欢你”。
隐写术在计算机中,用于数字水印技术,它是一种将著作权拥有者及购买者的信息嵌入文本中的技术。但是仅凭数字水印技术时无法对信息进行加密的,因此需要
和其它技术配合使用。

例如,将密码技术和隐写术相结合的方法就很常见。首先,我们将要嵌入的文章进行加密并生成密文,然后再通过隐写术将密文隐藏到图片中。这样一来,
即便有人发现了密文的存在,也无法读取出所嵌入的文章的内容。
密码隐藏的是内容,隐写术隐藏的是消息本身。

7 密码与信息安全常识

7.1 不要使用保密的密码算法

我们不应该制作或使用任何保密的密码算法,而是应该使用那些已经公开的、被公认为强度较高的密码算法,原因如下:

  1. 密码算法的秘密早晚会公诸于世。
  2. 开发高强度的密码算法是非常困难的。而试图通过对密码算法本身进行保密来确保安全性的行为,一般称为隐蔽式安全性(security by obscurity),这是危险且愚蠢的行为。

7.2 使用低强度的密码比不进行任何加密更危险

对于用户来说,安全感与密码的强度无关,而只是由“信息已经被加密了”这一事实产生的,这通常会导致用户在处理一些机密信息的时候麻痹大意。

7.3 任何密码总会有一天都会被破解

无论使用任何密码算法锁生成的密文,只要将所有可能的密钥全部尝试一遍,就总有一天可以破译出来。因此,破译密文所需要花费的时间,与要保密的明文的
价值之间的权衡就显得非常重要。严格来说,绝对不会被破解的密码其实是存在的,这种算法称为一次性密码本(one-time pad),将在3.4节详解。
此外,还有另一种技术被认为有可能早就完美的密码技术,那就是量子密码,将在15.3.1节详解。

7.4 密码只是信息安全的一部分

社会工程学(social engineering)。最脆弱的环节并不是密码,而是人类自己。

8 本章小结

主要浏览了密码世界中的一些主要技术。

9 小测验

下面说法是否正确?

  1. 将明文转换为密文的过程称为加密。
  2. 明文是供人类读取的数据,而密文则是供计算机读取的数据。
  3. 只要检查邮件发送者(From:)一栏的内容,就能够正确判断邮件是谁发出的。
  4. 在对称密码中,加密用的密钥和解密用的密钥是相同的。
  5. 公开的密码算法容易遭到坏人的攻击,因此使用自己公司开发的保密的密码算法更加安全。