六、混合密码系统

1 混合动力汽车

在介绍混合密码系统之前,我们先来说说混合动力汽车。混合动力汽车同时装备了电动机和发动机两种动力系统。
电动机由电池驱动,发动机由汽油驱动。当速度较慢时,汽车由电动机驱动,能够安静地行驶。当速度加快时,动力切换到发动机,以便输出更强的动力。
当踩下刹车时,损失的能量中的一部分能够被回收并用来对电池进行充电。

混合动力汽车将电动机和发动机两种不同的动力融合在一起,从而发挥了两种动力各自的优势。

2 本章概要

本章将学习由对称密码和公钥密码相结合的混合密码系统。

混合密码系统由对称密码来加密明文,用公钥密码来加密对称密码中所使用的密码。通过使用混合密码系统,就能够在通信中将对称密码和公钥密码的优势结合起来。

3 混合密码系统

3.1 对称密码和公钥密码

对称密码存在秘钥配送问题,而公钥密码虽然解决了秘钥配送问题,但是还有两个很大的问题:

  1. 公钥密码的处理速度远远低于对称密码
  2. 公钥密码难以抵御中间人攻击

本章介绍的混合密码系统就是解决问题 1 。而解决问题 2 则需要对公钥进行认证,将在第十章进行介绍

3.2 混合密码系统

  1. 用对称密码加密信息
  2. 通过伪随机数生成器生成对称密码的会话秘钥
  3. 通过公钥密码加密会话秘钥
  4. 从混合密码系统外部赋予公钥密码加密时使用的秘钥

混合密码系统运行了伪随机数生成器、对称密码和公钥密码这三种密码技术。正是通过这三种密码技术的结合,才创造出了一种兼具对称密码和公钥密码优点的密码方式。
即利用了对称密码的解密速度,公钥密码的机密性。

3.3 加密

流程图如下:

1. 明文、秘钥、密文

首先看中间虚线围成的大方框,这里就是混合密码系统的加密部分。
上面标有“消息”的方框就是混合密码系统中的明文,左边标有“接收者的公钥”的方框就是混合密码系统中的秘钥,而下面标有“用公钥密码加密加密的会话秘钥”和
“用对称密码加密的消息”所组成的方框,就是混合密码系统中的密文。

2. 加密消息

中间的大虚线方框分成左右两部分。
右半部分是“加密消息”的部分(对称密码),左半部分是“加密会话秘钥”的部分(公钥密码)。
消息的加密方法和对称密码的一般加密方法相同,当消息很长时,则需要使用第四章介绍的分组密码 的模式。即便是非常长的消息,也可以通过对称密码快速完成加密。
这就是右半部分所进行的处理。

3. 加密会话秘钥

左半部分进行的是会话秘钥的生成和加密操作。
会话秘钥(session key)是指为本次通信而生成的临时秘钥,它一般是通过伪随机数生成器产生的。伪随机数生成器所产生的会话秘钥同时也会被传递给右半部分,
作为对称密码的秘钥使用。
接下来,通过公钥密码对会话秘钥进行加密,公钥密码加密所使用的秘钥是接收者的公钥。

会话秘钥是对称密码的秘钥,同时也是公钥密码的明文。请大家一定要理解会话秘钥的双重性!

4. 组合

如何上面的内容都理解了,剩下的就简单多了。
我们从右半部分可以得到“用对称密码加密的消息”,从左半部分可以得到“用公钥密码加密的会话秘钥”,然后我们将两者组合起来。所谓组合,就是把它们按顺序拼在一起。
组合之后的数据就是混合密码系统整体的密文。

3.4 解密

流程图如下:

1. 分离

只要发送者和接收者事先先约定好密文的结构,将“用公钥密码加密的会话秘钥”和“用对称密码加密的消息”分离的操作就很容易完成。

2. 解密会话秘钥

会话秘钥可以用公钥密码进行解密,为此我们就需要解密秘钥,也就是接收者的私钥。除了持有私钥的人以外,其他人都不能够解密会话秘钥。
解密后的会话秘钥将被用作解密消息的秘钥。

3. 解密消息

消息可以使用对称密码进行解密,解密的秘钥就是刚刚用公钥解密的会话秘钥。
上述流程正好是“混合密码系统的加密”的逆操作。

3.5 混合密码系统的具体例子

混合密码系统解决了公钥密码速度慢的问题,并通过公钥密码解决了对称密码的秘钥配送问题。
著名的密码软件 PGP、 以及网络上的密码通信所使用的 SSL/TLS 都运用了混合密码系统,具体在第十三章探讨。

4 怎样才是高强度的混合密码系统

4.1 伪随机数生成器

混合密码系统中,随机数生成器被用于产生会话秘钥。如果伪随机数生成器的算法很差,生成的会话秘钥就有可能被攻击者推测出来。
会话秘钥中哪怕只有部分比特被推测出来也是很危险的,因为会话秘钥的秘钥空间不大。很容易通过暴力破解来发动攻击。关于针对伪随机数生成器的
攻击方法,将在第十二章详解。

4.2 对称密码

混合密码系统中,对称密码被用于加密消息。当然,我们还需要使用高强度的对称密码算法,并确保秘钥具有足够的长度。此外,我们还需要选择合适的分组密码模式。

4.3 公钥密码

混合密码系统中,公钥密码被用于加密会话秘钥。我们需要使用高强度的公钥密码算法,并确保秘钥具有足够的长度。

4.4 秘钥长度的平衡

对称密码和公钥密码的秘钥长度必须具备同等的强度。
然而,考虑到长期运用的情况,公钥密码的强度应该要高于对称密码,因为对称密码的会话秘钥被破译只会影响本次通信的内容,而公钥密码一旦被破译,从过去到未来的(用相同公钥加密的)所有通信内容就能够被破译了。

5 密码技术的组合

本章介绍的混合密码系统是将对称密码和公钥密码的结合,从而构建出一种同时发挥两者优势的系统。密码技术的组合经常被用于构建一些实用的系统。
例如,第四章中介绍的分组密码模式,就是将只能加密固定长度的数据的 分组密码进行组合,从而使其能够对更长的明文进行加密的方法。通过采用不同的分组密码组合方式,我们就可以构建出各种具有不同特点的分组密码模式。

三重 DES是将 3 个 DES 组合在一起,从而形成一种秘钥比 DES 更长的对称密码。通过加密-解密-加密这样的连接方式,不但可以维持和 DES 的兼容性,同时还能够选择性地使用 DES-DES2 这种秘钥长度较短的密码。

对称密码的内部也存在一些有趣的节后。例如第三章中介绍的 Feistel 网络,不管轮函数的性质如何,它都能够保证密码被解密。
在本书剩下的章节中,还会出现一些由多种技术组合而成的技术,我们来做一个简单的介绍。

数字签名,是由单向散列函数和公钥密码组合而成的。
证书,是由公钥和数字签名组合而成的。
消息认证码,是由单向散列函数和秘钥组合而成的,也可以通过对称密码来生成。
伪随机数生成器,可以使用对称密码、单向散列函数或者公钥密码来构建。
还有一些很神奇的系统,例如电子投票、电子货币、能够在不知道内容的情况下签名的盲签名(zero-knowledge proof)等。

6 本章小结

本章中我们学习了将对称密码和公钥密码的优势相结合而成的混合密码系统。
到此为止,我们已经了解了密码这一保证机密性的技术,然而,密码技术所保护的不仅仅是机密性。
从下一章开始,我们将学习确认消息完整性、进行认证以及防止否认的技术。

7 小测验

  1. 混合密码系统是用对称密码对消息进行加密的。
  2. 混合密码系统是用公钥密码的私钥对对称密码的秘钥进行加密的。
  3. 由于会话秘钥已经通过公钥密码进行了加密,因此会话秘钥的长度较短也没有问题。
  4. 混合密码系统的解密过程是按照“公钥密码解密”->“对称密码解密”的顺序来进行处理的。