公开密钥系统
我们迄今仅考虑了对称算法,其中发送者与接收者共享一个密钥。这当然表明两个参与者之间相互信任。在20世纪70年代后期之前,对称算法是仅有的可以应用的算法。
公开密钥的密码系统的基本思想是,每个实体有一个公开密钥(简称公钥)和一个与之相对应的私人密钥(简称私钥)。选取这些密钥是为了使攻击者无法从公钥推断出私钥。任何人想使用这个系统发送一条机密信息给某人,都要先得到后者的公钥,并使用它来加密信息。当然,他们需要确定自己使用的正是收信人的公钥;要是用错了,那么与发信者所使用的公钥相对应的私钥的所有者,就能读懂所发出的加密信息了,而预定的收信人却无法读懂。所以尽管我们无须秘密地配送这些公钥,但所有公钥都需要加以保护,以确保其真实性。还要注意,当使用公钥系统来提供保密性时,由于加密用的公钥是广为人知的,谁都可以使用它,所以密文并不能提供任何有关发信人真实身份的信息。
对于公钥系统而言,算法和加密密钥都是公开的。于是,攻击者面临的任务是从密文推断出信息,而密文是用该攻击者完全了解的方法得出的。显然,发信人需要十分小心地选择加密的操作过程,以增加攻击者破译的难度。但是一定不要忘记,发信人还应确保真正的收信人能够容易地进行解密。因此,加密过程的选取应使知道解密密钥的人能够方便地从密文中得出信息。
这是一个难以理解又不直观的概念。人们常常会问:“如果每个人都知道我是如何加密的,为什么他们不能推导出我的信息呢?”下面这个不涉及数学的例子将对提问者很有帮助。
假定你在一间封闭的屋子里,没有电话,只有一本纸质的伦敦电话号码簿。如果有人告诉你一个名字和地址,问你此人的电话号码,那你很容易找到答案。但是假设给你一个随机选取的电话号码,而问你其拥有者的名字和地址,这就是一项艰巨的任务了。并不是因为你不知道该怎么做。理论上,你可以从第一页开始查所有的号码,直到找到所需的那一个。困难在于极其巨大的工作量。如果我们将“名字和地址”看作信息,“电话号码”看作密文,“找号码”看作加密过程,那么就伦敦电话号码簿而言,我们达到了保密的目的。在这里必须注意的是,如果同样的过程用于较薄的电话簿,攻击者就能逆向查出信息。我们也不可能精确地认定到底人数需要达到多少才能有把握地宣称达到了保密目的。伦敦电话簿中有超过750,000个人名,我们可以很高兴地断言750,000在本文设定的场景中是个大数目。对于一个仅有100部电话分机的办公单位,逆向查电话簿大概还是容易的,但如果数目增加到5,000又如何呢?
自然,有一些组织——比如急救中心——能够查出任何一个电话号码的拥有者。他们有按数字顺序编排的电话簿。这里又要注意,我们无法阻止别人依据数字的次序编造他们自己的电话号码簿。巨大的工作量才是确保在我们定义的条件下不让攻击者取得成功的法宝。当然了,不管是谁,如果拥有电子版的电话簿,其工作将会变得更为简单。
最实用的公钥算法是分组密码,它将信息看成是大整数的一个序列,其安全性依赖于解出某个特定的数学问题的难度。其中最著名的一个是1978年由罗恩·里弗斯特(Ron Rivest)、阿迪·沙米尔(Adi Shamir)和莱恩·阿德尔曼(Len Adleman)发明的,现称RSA。在RSA中,相关的数学问题是因子分解。此时有一个公开的数N,它是两个素数的乘积,但这两个素数的值是保密的。这些素数极为重要,因为任何人只要知道了它们的值就可以从公钥计算出相应的私钥。因此,确定信息区组大小的数N必须足够大,以使得攻击者无法推演出这些素数,即攻击者不能完成对N的因子分解。显然,如果N不大,任何人都可确定这两个素数。来看一个极简单的小例子,取N=15,此时的两个素数是3和5。但是,人们相信,对于足够大的N,想要确定这些素数是无法办到的。我们将在第七章讨论多位数的因子分解的困难。现在,我们只须注意数N同时决定了区组和密钥的大校
这意味着此时的密钥和区组的大小比对称密码的要大很多。在对称密码中,典型的区组大小是64或128比特,而在RSA中,它们的大小很可能至少是640比特,而1,024和2,048比特的区组也不鲜见。另一个后果是加密和解密过程包含大量涉及多位数的计算,这意味着它们比大多数对称算法要慢一些。所以,它们的主要用途不是对大量数据进行加密,更多的是用于数字签名,或是为对称算法的密钥的安全配送和贮存而对其进行加密。
另一种广泛使用的公钥密码算法是知名的贾迈勒算法,它是美国数字签名标准(DSS)的基矗对贾迈勒算法而言,其密钥的大小与RSA大致相当,但它的安全性依赖于另一数学问题的难度,该数学问题即为离散对数问题。然而贾迈勒算法具有的某些性质使它不太适合用于加密。
公钥密码术的基本原则和标准技巧,是在20世纪70年代早期由在英国政府的通信电子安全组(CESG)中工作的詹姆斯·埃利斯(James Ellis)、克利福德·科克斯(Clifford Cocks)和马尔科姆·威廉森(Malcolm Williamson)所开发的。但是它在长达20多年的时间里一直被列为机密资料,在最初的公钥密码术论文出现多年以后才得以公开,在那段时间里,非对称密码技术得到了长足的发展。