目录
6.1 混合动力汽车
在介绍混合密码系统之前,我们先来说说混合动力汽车。混合动力汽车同时装备了电动机和发动机两种动力系统。
电动机由电池驱动,发动机由汽油驱动。当速度较慢时,汽车由电动机驱动,能够安静地行驶。当速度加快时,动力切换到发动机,以便输出更强大的动力。当踩下刹车时,损失的能量中的一部分能够被回收并用来对电池进行充电。
混合动力汽车将电动机和发动机两种不同的动力融合在一起,从而发挥了两种动力各自的优势。
6.2 本章学习的内容
我们在第 3 章和第4 章中学习了对称密码,在第 5 章中学习了公钥密码,而本章中我们则将学习由两者相结合而成的混合密码系统。
混合密码系统用对称密码来加密明文,用公钥密码来加密对称密码中所使用的密钥。通过使用混合密码系统,就能够在通信中将对称密码和公钥密码的优势结合起来。
6.3 混合密码系统
6.3.1 对称密码与公钥密码
通过使用对称密码,我们就能够在通信中确保机密性。然而要在实际中运用对称密码,就必须解决密钥配送问题。
而通过使用第5章中介绍的公钥密码,就可以避免解密密钥的配送,从而也就解决了对称密码所具有的密钥配送问题。但是,公钥密码还有两个很大的问题。
(1)公钥密码的处理速度远远低于对称密码。
(2)公钥密码难以抵御中间人攻击。
本章中介绍的混合密码系统就是解决上述问题(1)的方法。而要解决问题(2),则需要对公钥进行认证。关于认证的方法,我们将在第10章进行介绍。
6.3.2 混合密码系统
混合密码系统(hybrid cryptosystem)是将对称密码和公钥密码的优势相结合的方法。一般情况下,将两种不同的方式相结合的做法就称为混合(hybrid)。用混合动力汽车来类比的话,就相当于是一种将发动机(对称密码)和电动机(公钥密码)相结合的系统。
混合密码系统中会先用快速的对称密码来对消息进行加密,这样消息就被转换为了密文,从而也就保证了消息的机密性。然后我们只要保证对称密码的密钥的机密性就可以了。这里就轮到公钥密码出场了,我们可以用公钥密码对加密消息时使用的对称密码的密钥进行加密。由于对称密码的密钥一般比消息本身要短,因此公钥密码速度慢的问题就可以忽略了。
将消息通过对称密码来加密,将加密消息时使用的密钥通过公钥密码来加密,这样的两步密码机制就是混合密码系统的本质。
下面我们来罗列一下混合密码系统的组成机制。
⚪用对称密码加密消息
⚪通过伪随机数生成器生成对称密码加密中使用的会话密钥
⚪用公钥密码加密会话密钥
⚪从混合密码系统外部赋予公钥密码加密时使用的密钥混合密码系统运用了伪随机数生成器、对称密码和公钥密码这三种密码技术。正是通过这三种密码技术的结合,才创造出了一种兼具对称密码和公钥密码优点的密码方式。
用混合密码系统可以进行加密和解密两种操作(图6-1)。
以下各节中,我们将按顺序讲解混合密码系统的加密和解密过程。
6.3.3加密
混合密码系统的加密过程如图 6-2 所示。
这张图乍看起来很复杂,我们来仔细解释一下。
明文、密钥、密文
首先看中间虚线围成的大方框,这里就是混合密码系统的加密部分。
上面标有“消息”的方框就是混合密码系统中的明文,左边标有“接收者的公钥”的方框就是混合密码系统中的密钥,而下面标有“用公钥密码加密的会话密钥”和“用对称密码加密的消息”所组成的方框,就是混合密码系统中的密文。
加密消息
中间的大虚线方框分成左右两部分。
右半部分是“加密消息”的部分(对称密码),左半部分是“加密会话密钥”的部分(公钥密码)。
加密会话密钥
左半部分进行的是会话密钥的生成和加密操作。
会话密钥(session key)是指为本次通信而生成的临时密钥,它一般是通过伪随机数生成器产生的。伪随机数生成器所产生的会话密钥同时也会被传递给右半部分,作为对称密码的密钥使用。
接下来,通过公钥密码对会话密钥进行加密,公钥密码加密所使用的密钥是接收者的密公钥。
会话密钥一般比消息本身要短。以一封邮件的加密为例,消息就是邮件的正文,长度一般为几千个字节,而会话密钥则是对称密码的密钥,最多也就是十几个字节。因此即使公钥加密速度很慢,要加密一个会话密钥也花不了多少时间。
好,我们已经讲解了图6-2中的几个重点部分。会话密钥的处理方法是混合密码系统的核心,一言以蔽之:
会话密钥是对称密码的密钥,同时也是公钥密码的明文
请大家一定要理解会话密钥的双重性,因为将对称密码和公钥密码两种密码方式相互联系起来的正是会话密钥。
组合
如果上面的内容都理解了,剩下的就简单多了。
我们从右半部分可以得到“用对称密码加密的消息”,从左半部分可以得到“用公钥密码加密的会话密钥”,然后我们将两者组合起来。所谓组合,就是把它们按顺序拼在一起。组合之后的数据就是混合密码系统整体的密文。
6.3.4解密
理解了加密之后,解密也就不难理解了。混合密码系统的解密过程如图 6-3 所示。
分离
混合密码系统的密文是由“用公钥密码加密的会话密钥”和“用对称密码加密的消息”组合而成的,因此我们首先需要将两者分离。只要发送者和接收者事先约定好密文的结构,将两者分离的操作就很容易完成。
解密会话
密钥会话密钥可以用公钥密码进行解密,为此我们就需要解密密钥,也就是接收者的私钥。除了持有私钥的人以外,其他人都不能够解密会话密钥。
解密后的会话密钥将被用作解密消息的密钥。
解密消息
消息可以使用对称密码进行解密,解密的密钥就是刚刚用公钥密码解密的会话密钥。
上述流程正好是“混合密码系统的加密”的逆操作,请大家自己确认一下。
6.3.5 混合密码系统的具体例子
混合密码系统解决了公钥密码速度慢的问题,并通过公钥密码解决了对称密码的密钥配送问题。
著名的密码软件PGP、以及网络上的密码通信所使用的SSL/TLS都运用了混合密码系统。
PGP 的处理除了这里介绍的混合密码系统之外,还包括数字签名、数字签名认证以及私钥在管理等处理。PGP处理的流程图比混合密码系统要复杂很多,但却非常有意思,具体内容我们第 13 章进行探讨。
6.4怎样才是高强度的混合密码系统
怎样才算是高强度的混合密码系统呢?混合密码系统运用了伪随机数生成器、对称密码和公钥密码,因此其中每一种技术要素的强度都必须很高。然而实际上还不仅如此,这些技术要素之间的强度平衡也非常重要。
6.4.1 伪随机数生成器
混合密码系统中,伪随机数生成器被用于产生会话密钥。如果伪随机数生成器的算法很差,生成的会话密钥就有可能被攻击者推测出来。会话密钥中哪怕只有部分比特被推测出来也是很危险的,因为会话密钥的密钥空间不大,很容易通过暴力破解来发动攻击。关于针对伪随机数生成器的攻击方法,我们将在第12章详细讨论。
6.4.2 对称密码
混合密码系统中,对称密码被用于加密消息。当然,我们需要使用高强度的对称密码算法,并确保密钥具有足够的长度。此外,我们还需要选择使用合适的分组密码模式。
6.4.3 公钥密码
混合密码系统中,公钥密码被用于加密会话密钥。我们需要使用高强度的公钥密码算法,并确保密钥具有足够的长度。
6.4.4 密钥长度的平衡
混合密码系统中运用了对称密码和公钥密码两种密码方式,无论其中任何一方的密钥过短,都可能遭到集中攻击,因此对称密码和公钥密码的密钥长度必须具备同等的强度。
然而,考虑到长期运用的情况,公钥密码的强度应该要高于对称密码,因为对称密码的会话密钥被破译只会影响本次通信的内容,而公钥密码一旦被破译,从过去到未来的(用相同公钥加密的)所有通信内容就都能够被破译了。
6.5 密码技术的组合
本章中介绍的混合密码系统是将对称密码和公钥密码相结合,从而构建出一种同时发挥两者优势的系统。密码技术的组合经常被用于构建一些实用的系统。
例如,第4章中介绍的分组密码模式,就是将只能加密固定长度的数据的分组密码进行组合,从而使其能够对更长的明文进行加密的方法。通过采用不同的分组密码组合方式,我们就可以构建出各种具有不同特点的分组密码模式。
三重DES是将3个DES组合在一起,从而形成的一种密钥比DES更长的对称密码。通过加密-解密-加密这样的连接方式,不但可以维持和DES的兼容性,同时还能够选择性地使用DES-EDE2这种密钥长度较短的密码。
对称密码的内部也存在一些有趣的结构。例如第 3 章中介绍的 Feistel网络,不管轮函数的性质如何,它都能够保证密码被解密。
在本书剩下的章节中,还会出现一些由多种技术组合而成的技术,我们来做个简单的介绍。
数字签名,是由单向散列函数和公钥密码组合而成的。
证书,是由公钥和数字签名组合而成的。
消息认证码,是由单向散列函数和密钥组合而成的,也可以通过对称密码来生成。
伪随机数生成器,可以使用对称密码、单向散列函数或者公钥密码来构建。
还有一些很神奇的系统,例如电子投票、能够在不知道内容的情况下签名的盲签名(blindsignature)、在不将信息发送给对方的前提下证明自己拥有该信息的零知识证明(zero-knowledgeproof)等,它们都是以密码技术为基础进行组合而成的。作为其中的一个例子,我们将在第 15章介绍虚拟货币比特币的相关内容。
6.6 本章小结
本章中我们学习了将对称密码和公钥密码的优势相结合而成的混合密码系统。到此为止,我们已经了解了密码这一保证机密性的技术,然而,密码技术所保护的不仅仅是机密性。从下一章开始,我们将学习确认消息完整性、进行认证以及防止否认的技术。我们首先要介绍的是被用于确认消息完整性的单向散列函数。
--------------------------------------------------------
感谢您阅读本文!如果您对文章内容有任何疑问或者想要提出任何问题,欢迎在评论区留言。我会尽力回答您的疑问,并与您交流。期待与您互动!