1.2 对称密码:对称加密概述
对称加密(Symmetric Encryption)是密码学的重要概念之一。对称密码在密码学中有着举足轻重的地位,本书中的大多数密码算法或协议都用到对称密码。现在,我们借助将要介绍的第一个协议引入对称加密这个新概念。想象这样一个情景:Alice需要给住在城堡外的Bob寄送一封信件。如图1.1所示,Alice要求她忠实的信使(Messenger)骑上他的骏马,穿越前方危险的土地,向Bob传递重要消息。然而,Alice对信使很是怀疑;尽管这位忠实的信使为她效劳多年,但她仍希望此次传递的消息对包括信使在内的所有被动观察者均保密。试想一下,这封信可能包含一些关于王国的流言蜚语。
图1.1 Alice通过信使向Bob发送重要消息
Alice需要的是一个协议,它能模拟Alice亲自将消息传递给Bob的过程。这是一个在现实中不可能解决的问题,除非我们采用密码学(或隐形传输)技术。这就要用到密码学家多年前发明的一种新型加密算法,常称为对称加密算法(Symmetric Encryption Algorithm)。
注意:
顺便说一下,密码学算法通常也被称为密码学原语。我们可以将密码学原语视为密码学中一种最小的算法构造,它通常与其他原语一起用于构造新的协议。“密码学原语”一词经常出现在相关文献中,了解它有利于阅读文献,但它本身确实没有特别的意义,仅仅是一个新的术语而已。
接下来,让我们看看如何使用这个对称加密算法向信使隐藏Alice的真实消息。现在,假设这个密码学原语是一个提供了以下两个函数的黑盒子(我们无法看到它的内部构造)。
● ENCRYPT;
● DECRYPT。
第一个函数ENCRYPT以密钥(Secret Key)和消息(Message)为输入,它输出一系列看起来像是随机选择的数字,如果我们愿意的话,它也可以输出像噪声一样的数据。我们把这个函数的输出称为加密消息。函数ENCRYPT的原理如图1.2所示。
图1.2 函数ENCRYPT以密钥和消息为输入,输出一个加密后的消息(看起来像噪声一样的随机数字序列)
第二个函数DECRYPT是第一个函数ENCRYPT的逆函数,它以ENCRYPT输入的密钥和输出的加密消息为输入,输出原始消息。函数DECRYPT的原理如图1.3所示。
图1.3 函数DECRYPT以密钥和加密消息为输入,输出原始消息
为了使用这个新的密码学原语,Alice和Bob不得不在现实世界中先会面一次,商定他们将要使用的密钥。之后,Alice可以使用商定的密钥和函数ENCRYPT去保护她的消息。接着,她将加密的消息交给信使,并由信使转交给Bob。Bob收到加密的消息后,使用与Alice相同的密钥和函数DECRYPT恢复出原始消息。具体过程如图1.4所示。
图1.4 (1)Alice使用函数ENCRYPT和密钥将消息转变成像噪声一样的随机数字序列;(2)她将加密的消息交给信使,信使无法获知真实消息;(3)Bob一旦收到加密的消息,他就可以使用和Alice一样的密钥和DECRYPT函数恢复出原始内容
在该消息传递过程中,信使拥有的都是看起来随机的消息,这不会对他获得隐藏的消息提供任何有意义的帮助。借助密码学技术,我们有效地将不安全的协议转变为安全协议。新协议使得Alice可以在没有任何人(除Bob外)知道消息内容的情况下向Bob传递一封机密信件。
在密码学中,使一个协议变得安全的常见做法就是:使用密钥将消息转变成噪声,使经过变换后的消息与随机数字序列无法区分开来。在接下来的章节中,我们将通过学习更多的密码算法来了解这个过程。
顺便说一句,对称加密是对称密码(Symmetric Cryptography)或密钥密码(Secret Key Cryptography)的一部分。此类密码学原语的不同函数往往使用相同的密钥。在后面的章节中,我们还会看到密钥有时不止一个。