图解密码学技术

译者序里译者说本书的中文版引进得有点晚了, 里面的内容还是 2008 年的 特别感谢译者在原作者对书做了修订发行了第 3 版后, 把中文版又修订了一遍 呜呜呜真是太好了, 一定要给译者点赞呀!!!

第 1 部分 密码

1.2.2 发送者, 接收者, 窃听者

发送者 (sender) 发送消息 (message) 给接收者 (receiver) 可能会被窃听者 (eavesdropper) 窃听.

1.2.3 加密与解密

明文 (plaintext) 加密 (encrypt) 之后称为密文 (ciphertext). 解密 (decrypt) 就是将密文恢复成明文的过程.

1.2.4 密码保证了消息的机密性

例子通过运用密码 (cryptography) 技术, 保证了邮件的机密性 (confidentiality).

1.2.5 破译

破译者 (cryptanalyst) 试图将密文还原为明文, 则称为密码破译 (cryptanalysis), 简称为破译, 有时也称为密码分析. 密码学研究者为了研究密码强度, 也经常需要对密码进行破译.

1.3 对称密码与公钥密码

1.3.1 密码算法

用于解决复杂问题的步骤, 通常称为算法 (algorithm). 加密, 解密的算法合在一起统称为密码算法.

1.3.2 密钥

密码算法中的密钥 (key), 则是像 4723951939863623748375084382 这样的一串非常大的数字. (第 3 章详细讲解)

1.3.3 对称密码与公钥密码

  • 对称密码 (symmetric cryptography) 是指在加密和解密时使用同一密钥的方式. (多种别名, 如公共密钥密码 (common-key cryptography), 传统密码 (conventional cryptography), 私钥密码 (secret-key cryptography), 共享密钥密码 (shared-key cryptography)) (第 3, 4 章详细讲解)
  • 公钥密码 (public-key cryptography) 则是指在加密和解密时使用不同密钥的方式. 又称为非对称密码 (asymmetric cryptography). (第 5 章详细讲解)

1.3.4 混合密码系统

将对称密码和公钥密码结合起来的密码方式称为混合密码系统 (hybrid cryptosystem), 这种系统结合了对称密码和公钥密码两者的优势. (第 6 章详细讲解)

1.4 其他密码技术

密码技术提供的不仅是基于密码的机密性, 还用于检测消息是否被篡改的完整性, 以及用于确认对方是否是本人的认证等.

1.4.1 单向散列函数

为了防止软件被篡改, 有些软件在发布的同时还发布该软件的散列值 (hash, 又称哈希值, 密码校验和 (cryptographic checksum), 指纹 (fingerprint), 消息摘要 (message digest)). 散列值就是用单向散列函数 (one-way hash function) 计算出来的数值. 它所保证的是完整性 (integrity). 可以检测数据是否被篡改过. (第 7 章详细讲解)

1.4.2 消息认证码

消息认证码 (message authentication code) 不仅能够保证完整性, 还能提供消息是否来自所期待的通信对象的认证 (authentication) 机制. (第 8 章详细讲解)

1.4.3 数字签名

数字签名 (digital signature) 是一种能够确保完整性, 提供认证并防止否认 (repudiation) 的密码技术. (第 9 章详细讲解)

1.4.4 伪随机数生成器

伪随机数生成器 (Pseudo Random Number Generator, PRNG) 是一种能够模拟产生随机数列的算法. (第 12 章详细讲解)

1.5 密码学家的工具箱

信息安全所面临的威胁与应对这些威胁的密码技术:

20220928.jpg

1.6 隐写术与数字水印

隐写术 (steganography) 不是让消息内容变得无法解读, 而是能够隐藏消息本身. 数字水印技术就运用了这种方法.
密码隐藏的是内容, 隐写术隐藏的是消息本身. 通过将密码与隐写术相结合, 就可以同时产生两者所各自具备的效果.

1.7 密码与信息安全常识

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

  • 密码算法的秘密早晚会公诸于世
  • 开发高强度的密码算法是非常困难的

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

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

严格来说, 绝对不会被破解的密码算法其实是存在的, 这种算法称为一次性密码本 (one-time pad), 但它并不是一种现实可用的算法. (3.4 节详细探讨)

量子密码被认为有可能造就完美的密码技术.

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

社会工程学 (social engineering) 与密码强度毫无关系.
复杂的系统就像一根由无数个环节相连组成的链条, 如果用力拉, 链条就会从其中最脆弱的环节处断开. 因此, 系统的强度取决于其中最脆弱的环节的强度. 最脆弱的环节并不是密码, 而是人类自己. 关于这个话题, 作者会在最后一章进行深入的思考.

2 历史上的密码

2.2.1 什么是凯撒密码

恺撒密码 (Caesar cipher) 是通过将明文中所使用的字母表按照一定的字数 “平移” 来进行加密的.

2.2.4 用暴力破解来破译密码

将所有可能的密钥全部尝试一遍, 这种方法称为暴力破解 (brute-force attack). 这种方法的本质是从所有的密钥中找出正确的密钥, 因此又称为穷举搜索 (exhaustive search).

2.3 简单替换密码

将明文中所使用的字母表替换为另一套字母表的密码称为简单替换密码 (simple substitution cipher). 恺撒密码也可以说是简单替换密码的一种.

2.3.4 简单替换密码的密钥空间

恺撒密码可以通过暴力破解来破译, 但简单替换密码很难通过暴力破解来破译.

一种密码能够使用的 “所有密钥的集合” 称为密钥空间 (keyspace), 所有可用密钥的总数就是密钥空间的大小. 密钥空间越大, 暴力破解就越困难.

2.3.5 用频率分析来破译密码

虽然用暴力破解很难破译简单替换密码, 但使用被称为频率分析的密码破译方法, 就能够破译简单替换密码. (作者举了一个例子来让我们体会到破译密码的感觉)

通过例子的破解过程, 可以总结出下列结论:

  • 除了高频字母以外, 低频字母也能够成为线索
  • 搞清开头和结尾能够成为线索, 搞清单词之间的分隔也能够成为线索
  • 密文越长越容易破译
  • 同一个字母连续出现能够成为线索 (这是因为在简单替换密码中, 某个字母在替换表中所对应的另一个字母是固定的)
  • 破译的速度会越来越快

2.4 Enigma

Enigma 是由德国人于 20 世纪初发明的一种能够进行加密解密操作的机器. Enigma 在德语里是 “谜” 的意思.

2.4.5 每日密码与通信密码

用来加密密钥的密钥, 一般称为密钥加密密钥 (Key Encrypting Key, KEK). 之所以要采用两重加密, 即用通信密码来加密消息, 用每日密码来加密通信密码, 是因为用同一个密钥所加密的密文越多, 破译的线索也会越多, 被破译的危险性也会相应增加.

2.4.6 避免通信错误

在使用 Enigma 的时代, 无线电的质量很差, 可能会发生通信错误. 而通过连续输入两次通信密码, 接收者就可以对通信密码进行校验.

2.4.8 Enigma 的弱点

  • 将通信密码连续输入两次并加密
  • 通信密码是认为选定的. 应该使用无法预测的随机数来生成. (12章详细探讨)
  • 必须派发国防军密码本. 没有就无法使用 Enigma 通信. (第5章详细探讨)

2.4.9 Enigma 的破译

即便知道了 Enigma 的构造, 也还是无法破解 Enigma 的密码, 这是因为 Enigma 的设计并不依赖于 “隐蔽式安全性” (security by obscurity). 即使密码破译者得到了 Enigma 密码机 (相当于密码算法), 只要不知道 Enigma 的设置 (相当于密钥), 就无法破译密码.

2.5 思考

为什么要将密码算法和密钥分开呢?

将密码算法和密钥分开考虑, 就解决了希望重复使用, 但重复使用会增加风险这个难题. 虽然一些历史上的密码技术现在都已经不再使用了, 但是希望重复使用, 但重复使用会增加风险这个难题却依然存在.

每个人都可以拥有相同品牌的锁, 但每个人都有不同的钥匙. 锁的设计是公开的 (锁匠都有带有详细图的书), 而且绝大多数好的设计方案都在公开专利中进行了描述 (但是密钥是秘密的). (布鲁斯 施奈尔: <网络信息安全的真相>)

3 对称密码 (共享密钥密码) (用相同的密钥进行加密和解密)

密码算法有时候会涉及开发者的专利和授权等问题, 因此在使用本书中介绍的密码算法时, 一定要先调查一下该算法的专利和授权信息.

3.3 从文字密码到比特序列密码

3.3.1 编码

计算机的操作对象并不是文字, 而是由 0 和 1 排列而成的比特序列. 执行加密操作的程序, 就是将表示明文的比特序列转换为表示密文的比特序列.

将现实世界中的东西映射为比特序列的操作称为编码 (encoding).

3.3.2 XOR

XOR的全程是 exclusive or, 在中文里叫异或.

由于 XOR 和加法运算很相似, 因此一般用 + 和 ○ 组合而成的符号 🜨 来表示 XOR.

将比特序 A 和比特序 B 进行两次异或运算, 它跟加密, 解密的步骤非常相似.

  • 将明文 A 用密钥 B 进行加密, 得到密文 A 🜨 B
  • 将密文 A 🜨 B 用密钥 B 进行解密, 得到明文 A

实际上, 只要选择一个合适的 B, 仅仅使用 XOR 就可以实现一个高强度的密码.

3.4 一次性密码本 (绝对不会被破译的密码)

3.4.1 什么是一次性密码本

即便用暴力破解法遍历整个密钥空间, 一次性密码本 (one-time pad) 也绝对无法被破译.

3.4.2 一次性密码本的加解密

它的原理是 “将明文与一串随机的比特序列进行 XOR 运算”. 解密就是加密的反向运算.

3.4.4 一次性密码本是无法破译的

假设对一次性密码本的密文尝试进行暴力破解, 那么总有一天会尝试到和加密时相同的密钥. 但是我们无法判断它是否是正确的明文.

一次性密码本是由维纳 (G.S.Vernam) 于 1917 年提出的, 并获得了专利, 因此又称为维纳密码 (Vernam cipher) (该专利已过有效期). 一次性密码本无法破译这一特性是由香农 (C.E.Shannon) 于 1949 年通过数学方法加以证明的. 一次性密码本是无条件安全的 (unconditionally secure), 在理论上是无法破译的 (theoretically unbreakable).

3.4.5 一次性密码本为什么没有被使用

  • 密钥的配送: 如果能够有一种方法将密钥安全地发送出去, 那么岂不是也可以用同样的方法来安全地发送明文了吗?
  • 密钥的保存: 我们只是将 “保护明文” 这一命题替换成了 “保护和明文一样长的密钥” 而已.
  • 密钥的重用: 如果重用, 过去所有的机密通信内容将全部被破解.
  • 密钥的同步: 在通信过程中, 发送者和接收者的密钥比特序列不允许有任何错位, 否则错位的比特后的所有信息都将无法解密.
  • 密钥的生成: 一次性密码本中需要生成大量的无重现性的真正随机数 (而不是伪随机数).

综上, 一次性密码本是一种几乎没有实用性的密码. 但其思路孕育出了流密码 (stream cipher). (第 4 章节详细探讨)

3.5 DES

3.5.1 什么是 DES

DES (Data Encryption Standard) 是 1977 年美国联邦信息处理标准 (FIPS) 中所采用的一种对称密码 (FIPS 46-3). DES 一直以来被美国以及其他国家的政府和银行等广泛使用.

随着计算机的进步, 现在 DES 已经能够被短时间内暴力破解, 强度大不如前了, 因此除了用它来解密以前的密文以外, 现在我们不应该再使用 DES 了.

3.5.2 加密和解密

DES 是一种将 64 比特的明文加密成 64 比特的密文的对称密码算法 (这 64 比特的单位称为分组, 以分组为单位进行处理的密码算法称为分组密码 (block cipher)), 但由于每隔 7 比特会设置一个用于错误检查的比特, 因此实质上其密钥长度是 56 比特.

DES 每次只能加密 64 比特的数据, 如果要加密的明文比较长, 就需要对 DES 加密进行迭代 (反复), 而迭代的具体方式就称为模式 (mode). (第 4 章详细探讨)

3.5.3 DES 的结构 (Feistel 网络)

DES 的基本结构是由 Horst Feistel 设计的, 因此也称为 Feistel 网络 (Feistel network), Feistel 结构 (Feistel structure) 或者 Feistel 密码 (Feistel cipher). 其它很多密码算法中也有应用.

// 书中介绍了 Feistel 网络的加密步骤 具体还是看书

Feistel 网络的一些步骤信息:

  • 加密的各个步骤称为 (round), 整个加密过程就是进行若干次轮的循环. DES 是一种 16 轮循环的 Feistel 网络.
  • 子密钥 (subkey) 是其中一轮加密中使用的密钥, 是一个局部密钥.
  • 轮函数的作用是根据 “右侧” 和子密钥生成对 “左侧” 进行加密的比特序列, 是密码系统的核心.

Feistel 网络的一些性质:

  • 轮数可以任意增加, 都不会发生无法解密的情况.
  • 加密时无论使用任何函数作为轮函数都可以正确解密 (无法逆向计算出输入值的函数也可以).
  • 加密解密可以用完全相同的结构来实现.

正是由于 Feistel 网络具备如此方便的特性, 它才能够被许多分组密码算法使用. 在后面即将介绍的 AES 最终候选算法的 5 个算法之中, 有 3 个算法 (MARS, RC6, Twofish) 都是使用了 Feistel 网络. 然而, AES 最终选择的 Rijndael 算法却没有使用 Feistel 网络. Rijndael 所使用的结构称为 SPN 结构. (3.8.2 节详细介绍)

3.5.4 差分分析与线性分析

差分分析是一种针对分组密码的分析方法, 思路是 “改变一部分明文并分析密文如何随之改变”. 理论上即便明文只改变一个比特, 密文的比特排序也应该发生彻底的改变. 通过分析密文改变中所产生的偏差, 可以获得破译密码的线索.

线性分析的思路是 “将明文和密文的一些对应比特进行 XOR 并计算其结果为零的概率”. 如果密文具备足够的随机性, 则任选一些明文和密文的对应比特进行 XOR 结果为零的概率应该为 1/2. 如果能够找到大幅偏离 1/2 的部分, 则可以借此获得一些与密钥有关的信息.

差分分析和线性分析都有一个前提, 那就是假设密码破译者可以选择任意明文并得到其加密的结果, 这种攻击方式称为选择明文攻击 (Chosen Plaintext Attack, CPA).

以 AES 为代表的现代分组密码算法, 在设计上已经考虑了针对差分分析和线性分析的安全性.

3.6 三重 DES

DES 已经可以在现实的时间内被暴力破解, 三重 DES 就是出于替代 DES 的分组密码被开发出来的.

三重 DES (triple-DES) 是为了增加 DES 的强度, 将 DES 重复 3 次所得到的一种密码算法. 也称为 TDEA (Triple Data Encryption Algorithm), 通常缩写为 3DES.

明文经过三次 DES 处理才变成密文, 因此三重 DES 的密钥长度是 56 x 3 = 168 比特.

三重 DES 并不是进行三次 DES 加密 (加密 -> 加密 -> 加密), 而是加密 -> 解密 -> 加密的过程. 这个方法是 IBM 公司设计出来的, 目的是为了让三重 DES 能够兼容普通的 DES. (当三重 DES 中所有的密钥都相同时, 三重 DES 就等同于普通的 DES)

  • 如果所有密钥都使用相同的比特序列, 则其结果与普通的 DES 是等价的.
  • 如果密钥 1 和密钥 3 使用相同的密钥, 而密钥 2 使用不同的密钥, 这种三重 DES 就称为 DES-EDE2.
  • 密钥 1, 密钥 2, 密钥 3全部使用不同的比特序列的三重 DES 称为 DES-EDE3.

三重 DES 的解密过程和加密正好相反.

3.6.4 三重 DES 的现状

尽管三重 DES 目前还被银行等机构使用, 但其处理速度不高, 除了特别重视向下兼容的情况下, 很少被用于新的用途.

3.7 AES 的选定过程

对称密码的新标准 (AES)

3.7.1 什么是 AES

AES (Advanced Encryption Standard) 是取代其前任标准 (DES) 而成为新标准的一种对称密码算法. 全世界的企业和密码学家提交了多个对称密码算法作为 AES 的候选, 最终在 2000 年从这些候选算法中选出了一种名为 Rijndael 的对称密码算法, 并将其确定为了 AES.

3.7.2 AES 的选拔过程

// 介绍选拔过程

参加 AES 竞选是有条件的, 这个条件就是: 被评选为 AES 的密码算法必须无条件地免费供全世界使用.

3.8 Rijndael

Rijndael 是由比利时密码学家 Joan Daemen 和 Vincent Rijmen 设计的分组密码算法.

在 AES 的规格中, 分组长度固定为 128比特, 密钥长度只有 128, 192 和 256 比特三种.

3.8.2 Rijndael 的加密和解密

// 介绍过程

3.8.3 Rijndael 的破译

// 介绍破译可能. 不过还是假设, 目前还没出现针对 Rijndael 的有效攻击

3.8.4 应该使用哪种对称密码呢

  • DES 不应再用于任何新的用途. 但在某些情况下需要保持与旧版本软件的兼容性.
  • 没有理由将三重 DES 用于任何新的用途, 尽管在一些重视兼容性的环境中还会继续使用, 但它会逐渐被 AES 所取代.
  • AES 最终候选算法应该可以作为 AES 的备份. 但 NIST 最终选择的标准只有 Rijndael, 并没有官方认可将其他最终候选算法作为备份来使用.

一般来说, 我们不应该使用任何自制的密码算法, 而是应该使用 AES. 因为 AES 在其选定过程中, 经过了全世界学家所进行的高品质的验证工作, 而对于自制的密码算法则很难进行这样的验证.

3.9 本章小结

巨大的密钥空间能够抵御暴力破解, 算法上没有弱点可以抵御其他类型的攻击, 这类对称密码就可以通过密文来确保明文的机密性.

为了解决密钥配送问题, 我们需要公钥密码技术. (第 5 章讲解)
尽管使用对称密码可以确保机密性, 但当接收到的密文无法正确解密时, 如果仅仅向发送者返回一个 “出错了” 的消息, 在某些情况下是非常危险的. 因为发送者有可能发送伪造的密文, 并利用解密时返回的错误来盗取信息. (8.5 节详解)

4 分组密码的模式 (分组密码是如何迭代的)

4.2 分组密码的模式

4.2.1 分组密码与流密码

  • 分组密码 (block cipher) 是每次只能处理特定长度的一块数据的一类密码算法, 这里的 “一块” 就称为分组 (block). 一个分组的比特数就称为分组长度 (block length).
  • 流密码 (stream cipher) 是对数据流进行连续处理的一类密码算法. 流密码中一般以 1 比特, 8 比特或 32 比特等为单位进行加密和解密.

分组密码处理完一个分组就结束了, 不需要通过内部状态来记录加密的进度; 流密码是对一串数据流进行连续处理, 因此需要保持内部状态.

4.2.2 什么是模式

分组密码只能加密固定长度的明文. 如果需要加密任意长度的明文, 就需要对分组密码进行迭代, 而迭代方法就称为分组密码的模式 (mode).

分组密码的主要模式有以下 5 种:

  • ECB 模式: Electronic CodeBook mode (电子密码本模式)
  • CBC 模式: Cipher Block Chaining mode (密码分组链接模式)
  • CFB 模式: Cipher FeedBack mode (密文反馈模式)
  • OFB 模式: Output FeedBack mode (输出反馈模式)
  • CTR 模式: CounTeR mode (计数器模式)

如果模式选择的不恰当, 明文中的一些规律就可以通过密文被识别出来.

4.2.3 明文分组与密文分组

  • 明文分组是指分组密码算法中作为加密对象的明文. 明文分组的长度与分组密码算法的分组长度是相等的.
  • 密文分组是指使用分组密码算法将明文分组加密之后所生成的密文.

(明文分组 + 密钥) 用分组密码算法加密 => 密文分组
(密文分组 + 密钥) 用分组密码算法解密 => 明文分组

为了避免 “用分组密码算法加密” 复杂, 本章简写为 “加密”, 省略对密钥的描述.

4.2.4 主动攻击者 Mallory

本章中会出现一个新概念 (主动攻击者 Mallory). 窃听者 Eve 只能被动地进行窃听, 而主动攻击者则可以主动介入发送者和接收者之间的通信过程, 进行阻碍通信或者是篡改密文等活动. 这个名字可能是来自 “恶意的” (malicious) 一词.

4.3 ECB 模式

将明文分组直接加密的方式就是 ECB 模式, 这种模式非常简单, 但由于存在弱点因此通常不会被使用.

4.3.1 什么是 ECB 模式

ECB 模式的全称是 Electronic CodeBook 模式. 在 ECB 模式中, 将明文分组加密之后的结果将直接成为密文分组.

该模式下相同的明文分组会被转换为相同的密文分组, 可以理解为是一个巨大的 “明文分组 -> 密文分组” 的对应表, 因此 ECB 模式也称为电子密码本模式.

当最后一个明文分组的内容西小于分组长度时, 需要用一些特定的数据进行填充 (padding).

4.3.2 ECB 模式的特点

ECB 模式中, 明文分组与密文分组是一一对应的关系, 如果明文中存在多个相同的明文分组, 则这些明文分组最终都将被转换为相同的密文分组. 因此观察一下密文, 就可以知道明文中存在怎样的重复组合, 并可以以此为线索来破译密码, 因此 ECB 模式是存在一定风险的.

4.3.3 对 ECB 模式的攻击

假设存在主动攻击者, 他能够改变密文分组的顺序. 当接收者对密文进行解密时, 由于分组密码的顺序被改变了, 因此相应的明文分组的顺序也会被改边. 就是说, 攻击者无需破译密码就能够操纵明文. 这个场景中, 攻击者不需要破译密码, 也不需要知道分组的密码算法, 他只要知道哪个分组记录了什么样的数据 (电文的格式) 就可以了.

// 介绍了对调首付款人密文分组的攻击

在 ECB 模式中, 只要对任意密文分组进行替换 (删除/复制), 相应的明文分组也会被替换 (删除/复制).

4.4 CBC 模式

CBC 模式是将前一个密文分组与当前明文分组的内容混合起来进行加密的, 这样就可以避免 ECB 模式的弱点.

4.4.1 什么是 CBC 模式

CBC 模式 的全称是 Cipher Block Chaining 模式 (密文分组链接模式), 因为密文分组是像链条一样相互连接在一起的.

在 CBC 模式中, 首先将明文分组与前一个密文分组进行 XOR 运算, 然后再进行加密.

4.4.2 初始化向量

当加密第一个明文分组时, 由于不存在 “前一个密文分组”, 因此需要事先准备一个长度为一个分组的比特序列来代替 “前一个密文分组”, 这个比特序列称为初始化向量 (Initialization Vector), 通常缩写为 IV. 一般来说每次加密时都会随机产生一个不同的比特序列来作为初始化向量.

4.4.3 CBC 模式的特点

明文分组在加密之前一定会与 “前一个密文分组” 进行 XOR 运算, 因此即便明文分组 1 和 2 的值是相等的, 密文分组 1 和 2 的值也不一定是相等的. 这样 ECB 模式的缺陷在 CBC 模式中就不存在了.

CBC 模式中无法单独对一个中间的明文分组进行加密. 如果要生成密文分组 3, 则至少需要凑齐明文分组 1, 2, 3 才行.

解密时, 假设 CBC 模式加密的密文分组中有一个分组损坏了 (例如由于硬盘故障导致密文分组的值发生了改变等). 只要密文分组的长度没有发生变化, 则解密时最多只会有 2 个分组受到数据损坏的影响.

假设 CBC 模式的密文分组中有一些比特缺失了 (例如由于通信错误导致没有收到某些比特等), 那么此时即便只缺失了 1 比特, 也会导致密文分组的长度发生变化, 此后的分组发生错位, 这样缺失比特的位置之后的密文分组也就全部无法解密了.

4.4.4 对 CBC 模式的攻击

对初始化向量任意比特反转, 第一个明文分组中相应的比特也会被反转.

其中一个密文分组中存在缺失, 之后的所有明文分组都会受到影响.

攻击者可以对初始化向量进行攻击, 但是想要对密文分组也进行同样的攻击 (就是只让明文分组中所期望的比特发生变化) 就非常困难了. 例如对密文分组 1 中的某个比特进行了反转, 则明文分组 1 和明文分组 2 都会受到影响.

通过使用第 8 章中介绍的消息认证码, 还能够判断出数据有没有被篡改.

4.4.5 填充提示攻击

5 公钥密码 (用公钥加密, 用私钥解密)

6 混合密码系统 (用对称密钥提高速度, 用公钥密码保护会话密钥)

第 2 部分 认证

7 单向散列函数 (获取消息的 “指纹”)

8 消息认证码 (消息被正确传送了吗)

9 数字签名 (消息到底是谁写的)

10 证书 (为公钥加上数字签名)

第 3 部分 密钥, 随机数与应用技术

11 密钥 (秘密的精华)

12 随机数 (不可预测性的源泉)

13 PGP (密码技术的完美组合)

14 SSL/TLS (为了更安全的通信)

15 密码技术与现实社会 (我们生活在不完美的安全中)

附录 A 椭圆曲线密码

附录 B 密码技术综合测验