2.5 密钥管理技术
网络加密是保护网络中信息安全的重要手段,所有加密技术都依赖于密钥,网络环境下的密钥管理是一种复杂而重要的技术。
最早的密码体制没有密钥的概念,那时对密码算法和密钥还没有明显的区分。随着信息加密需求量的迅速增加,不断开发大量的新的密码算法需要耗费大量的人力、物力,于是人们逐渐转而采用将密码中的一部分加密算法或加密参数固定不变(这是保密的基本因素),而另一部分可经常更换的加密形式。这种可经常变化的部分就是通常意义下的密钥。所以,从本质讲,密钥和密码算法可以看作一回事:密钥可理解为可以经常更换的那部分算法,算法也可理解为不便于经常变化的那部分密钥。
密钥同密码算法的分离大大促进了密码技术的发展,使数据加密的保密性和安全性大大提高。这不仅使大量本来必须按照密级进行管理的加密设备可以取消密级,而且使加密设备里的核心部分———密钥,可以经常更换,从而使密码算法完全公开成为可能。如果一个密码系统的算法经不起公开,那么按照现在的标准看,这种密码系统的安全性是很弱的,其理由有:
(1)对于没有独立设计密码能力的用户,只能使用商品密码,而一个商用密码机的软硬件原理是无法加以保密的,特别是对于国家级的破译能力来说,解剖一个加密设备的代价与破译一种密码的代价相比是可以忽略不计的。密码算法不可能一泄密就更换,必须准备依靠密钥的变化来保密。
(2)保密问题不仅是一个理论问题,而且与密码的使用有密切关系。如果必须把算法和加密装置当作绝密件管理,往往难以保证使用中的安全。
(3)在数据加密等技术中,往往要求密码设计者本人在不掌握密钥的情况下也无法读到保密信息,所以算法必须经受公开的分析。
如果考虑到在研制过程中所花费的巨大经济代价,对密码算法还是应该进行保护的,但这种保护的意义应只相当于对软件产品的技术保护,也就是说,信息的保密不能建立在这种保护的基础上。
密钥管理历来是一个很棘手的问题,是一项复杂细致的长期工作。一个计算机系统的密钥管理方案必须注意每一个细小环节,否则就会带来意想不到的损失。每个具体系统的密钥设计必须与具体的使用环境和保密要求相结合,万能的密钥管理体制是不存在的。
从密码技术的发展看,现在已经可以设计出高强度的密码算法,使之能够承受国家级的破译力量的攻击,在这个意义上讲,密码算法问题已经解决,密码系统的安全性只取决于密钥的安全性。因此,在考虑计算机系统的密码设计时,需要解决的核心问题是密钥管理问题,而不是密码算法问题。当然,这并不是说密码算法问题无足轻重,而是说一个密码算法的抗破译能力可以通过一定的客观检验方法进行分析和论证,因而完全可以做到对所使用的算法强度有充分的把握。对算法的选择必须很慎重,但这个问题再困难,也仅仅与密码算法本身的纯技术性能有关,而且已经出现了一大批成熟的密码算法可供选择和借鉴,即使没有这方面的设计能力,抄一个现成的算法或请有关部门编一个新的算法也不困难。而密钥管理的问题则要复杂得多,不仅与技术有关,还与人的因素有关。技术上做得再完善,通过人员这个口子仍然可以把核心机密泄露出去。特别是当密钥管理存在一些漏洞时,从密钥管理的途径窃取秘密要比单纯从破译的途径窃取秘密的代价小得多。
一个好的密钥管理系统应当尽量不依赖于人的因素,这不仅是为了提高密钥管理的自动化水平,根本目的还是为了提高系统的安全程度。为此有以下具体要求:
1)密钥难以被非法窃取。
2)在一定条件下窃取了密钥也没有用。
3)密钥的分配和更换过程在用户看来是透明的,用户不一定要亲自掌握密钥。
在下面的介绍中,通常把达到上述要求的程度作为评价一个密钥管理系统的性能好坏的标准。
2.5.1 密钥管理
密钥管理是处理密钥自产生到销毁整个过程中的有关问题:系统的初始化、密钥的产生、存储、备份/恢复、装入、分配、保护、更新、控制、丢失、吊销和销毁等。设计安全的密码算法和协议并不容易,而密钥管理则更加困难,密钥是保密系统中更为脆弱的环节,其中分配和存储可能是最棘手的。密钥管理不仅影响系统的安全性,而且涉及系统的可靠性、有效性和经济性。密钥管理要从物理、人事、规程和技术四个方面考虑。密钥管理技术要使用加密、认证、签字、协议、公证等几方面。电子商务的密钥管理系统中必须依靠可信赖的第三方公证机构。公证系统是电子商务中保证安全的一个必需的、重要的工具,它不仅可以协助密钥的分配和证实,而且可以作为证书机构、时戳代理、密钥托管代理和公证代理等;不仅可以断定文件签署时间,而且还可以对本系统提供的信息进行仲裁。公证机构还可采用审计追踪技术,对密钥的注册、证书的制作、密钥更新、吊销进行记录审计。本节主要介绍密钥的管理内容、密钥的分配技术、对称密钥管理、公开密钥管理和密钥第三方托管技术等。
1.密钥的管理内容
(1)密钥设置协议
目前流行的密钥管理方案中一般采用分层次的密钥设置,目的在于减少单个密钥的使用周期,增加系统的安全性。总体上密钥分两大类:数据加密密钥(DK)和密钥加密密钥(KK)。前者直接对数据进行操作,后者用于保护密钥,使之通过加密而安全传递。
(2)密钥生成
算法的安全性依赖于密钥,密钥的产生首先必须考虑具体密码系统的公认的限制,如果用一个弱的密钥生成方法,那么整个体制是弱的。因为能破译密钥生成算法,所以就不需要破译加密算法了。减少的密钥空间,易受到穷举攻击。如果采用姓名等的弱密钥选择也易受到穷举的字典攻击。因此,好的密钥应该是随机密钥,但为了便于记忆,密钥不能选得过长,不能选完全随机的数串,要选自己易记而别人难以猜中的密钥,要做到这些可采用密钥揉搓或碾碎技术。可见密钥的生成是困难的,特别对公钥密码体制来说,生成密钥更加困难,因为密钥必须满足某些数学特征(必须是素数的,是二次剩余的,等等)。
(3)密钥的分配
要研究密码系统中密钥的发送、验证等传送中的问题,在以后的内容中进一步介绍。
(4)密钥的保护
密钥从产生到终结的整个生存期中,都需要加强安全保护。密钥决不能以明文的形式出现,所有密钥的完整性也需要保护,因为一个攻击者可能修改或替代密钥,从而危及机密服务。另外,除了公钥密码系统中的公钥外,所有的密钥需要保密。在实际中,存储密钥的最安全的方法是将其放在物理上安全的地方。当一个密钥无法用物理的办法进行安全保护时,密钥必须用其他的方法来保护,可通过机密性(例如,用另一个密钥加密)或完整性服务来保护。在网络安全中,用最后一种方法可导致密钥的层次分级保护。
(5)密钥的存储
密钥存储时必须保证密钥的机密性、认证性、完整性、防止泄露和修改。
最简单的密钥存储问题是单用户的密钥存储,用户加密文件以备以后使用。因为只涉及他一个人,且只有他一人对密钥负责。一些系统采用简单方法:密钥存放在用户的脑子中,而决不放在系统中,用户只需要记住密钥,并在需要对文件加密或解密时输入。在某些系统中用户可直接输入64 bit密钥,或输入一个更长的字符串,系统自动通过密钥碾碎技术从这个字符串生成64 bit密钥。
还可以将密钥储存在磁卡、ROM密钥卡或智能卡中,用户先将物理标记插入加密箱上或连在计算机终端上的特殊读入装置中,然后把密钥输入到系统中。当用户使用这个密钥时,他并不知道它,也不能泄露它。把密钥平分成两部分,一半存入终端,一半存入ROM密钥使得这项技术更加安全。美国政府的STU-Ⅲ保密电话就是用的这种方法。丢失了ROM密钥并不能使加密密钥受到损害———换掉它一切就正常如初,丢失终端密钥情况也如此,这样,两者之一被损害都不能损害整个密钥。
可采用类似于密钥加密密钥的方法对难以记忆的密钥进行加密保存。例如,—个RSA私钥可用DES(数据加密标准)密钥加密后存在磁盘上,要恢复密钥时,用户只需把DES密钥输入到解密程序中即可。如果密钥是确定性地产生的(使用密码上安全的伪随机序列发生器),每次需要时从一个容易记住的口令产生出密钥会更加简单。
(6)密钥的备份/恢复
密钥的备份是非常有意义的,在密钥主管发生意外的情况下,以便恢复加密的信息,否则加密的信息就会永远地丢失了。
有几种方法可避免这种事情发生。最简单的方法称密钥托管方案,它要求所有雇员将自己的密钥写下来交给公司的安全官,由安全官将文件锁在某个地方的保险柜里(或用主密钥对它们进行加密)。当发生意外情况时,可向安全官索取密钥。
一个更好的方法是采用一种秘密共享协议,即将密钥分成若干片,然后,每个有关的人员各保管一部分,单独的任何一部分都不是密钥,只有将所有的密钥片搜集全,才能重新不把密钥恢复出来。
(7)密钥的泄露与撤销
密钥的安全是所有的协议、技术、算法安全的基本条件,如果密钥丢失、被盗、在媒体上公开或以其他方式泄露,则所有的保密性就都失去了,唯一补救的办法是及时更换新密钥。
(8)密钥的有效期
没有哪个加密密钥能无限期使用,其原因如下:
1)密钥使用时间越长,它泄露的机会就越大。人们会写下密钥,也会将其丢失,偶然事件也会发生的。
2)如果密钥已泄露,那么密钥使用越久,损失就越大。如果密钥仅用于加密一个文件服务器上的单个预算文件,它的丢失仅意味着该文件的泄密。如果密钥用来加密文件服务器上所有预算信息,那么,损失就大得多。
3)密钥使用越久,人们花费精力破译它的诱惑力就越大———甚至不惜采用穷举攻击法。破译了两个军事单位使用一天的共享密钥,就会使某人能阅读当天两个单位之间的通信信息。破译所有军事机构使用一年的共享密钥,就会使同样的人获取和伪造通行该机构一年的信息。
4)对用同一密钥加密的多个密文进行密码分析一般比较容易。
对任何密码应用,必须有一个密钥的有效期。不同密钥应有不同有效期,如电话就是把通话时间作为密钥有效期,当再次通话时就启用新的密钥。专用通信信道就不这么明显了,密钥应当有相对较短的有效期,这主要依赖数据的价值和给定时间里加密数据的数量。
密钥加密密钥无需频繁更换,因为它们只是偶尔用作密钥交换,只是给密钥破译者提供了很少的密文分析,且相应的明文也没有特殊的形式。然而,如果密钥加密密钥泄露,那么其潜在损失将是巨大的,因为,所有的通信密钥都经其加密。在某些应用中,密钥加密密钥一般是一月或一年更换一次。
用来加密保存数据文件的加密密钥不能经常变换。在人们重新使用文件前,文件可以加密储藏在磁盘上数月或数年,每天将它们解密,再用新的密钥进行加密,这无论如何都不能加强其安全性,这只是给破译者带来了更多的方便。一种解决方法是每个文件用唯一的密钥加密、然后再用密钥加密密钥把所有密钥加密,密钥加密密钥要么记忆下来,要么保存在一个安全地点,或在某个地方的保险柜中。当然,丢失该密钥意味着丢失了所有的文件加密密钥。
公开密钥密码应用中的私钥的有效期是根据应用的不同而变化的。用作数字签名和身份识别的私钥必须持续数年(甚至终身),用于类似于抛掷硬币协议的简单应用的私钥在协议完成之后就应该立即销毁。即使期望密钥的安全性持续终身,两年更换一次密钥也是要考虑的。许多网络中的私钥仅使用两年,此后用户必须采用新的私钥。旧密钥仍需保密,以防用户需要验证以前的签名,但是新密钥将用作新文件签名,以减少密码分析者所能攻击的签名文件数目。
(9)控制密钥使用
控制密钥使用是为了保证密钥按预定的方式使用,在一些应用中控制怎样使用密钥是有意义的,有的用户需要控制密钥或许仅仅是为了加密,有的或许是为了解密。可以赋予密钥的控制信息的有:密钥的主权人、密钥合法使用期限、密钥识别符、密钥预定的用途、密钥限定的算法、密钥预定使用的系统、密钥授权用户以及与密钥生成、注册、证书有关的实体名字等。
运用这些限制的一个方案是在密钥后面附加一个控制向量(CV,Control Vector)———用它来标定密钥的使用和限制。对CV取单向Hash运算,然后与主密钥异或,把得到的结果作为密钥对密钥进行加密,再把合成的加密了的密钥与CV存在一起。恢复密钥时,对CV取Hash运算再与主密钥异或,最后用结果进行解密。
(10)密钥的销毁
如果密钥必须定期替换,旧密钥就必须销毁。旧密钥是有价值的,即使不再使用,有了它们,攻击者就能读到由它加密的一些旧消息。
密钥必须安全地销毁。如果密钥是写在纸上的那么必须切碎或烧掉;如果密钥存在EEPROM硬件中,密钥就应进行多次重写;如果密钥存在EPROM或PROM硬件中,芯片就应被打碎成小碎片;如果密钥保存在计算机磁盘里,就应多次重写覆盖磁盘存储的实际位置或将磁盘切碎。
一个潜在的问题是,在计算机中的密钥易于被多次复制并存储在计算机硬盘的多个地方。采用防窜器件,能自动销毁存储在其中的密钥。
2.密钥的分配技术
密钥分配技术主要研究密钥的分发和传送中的问题。密钥分配实质上是使用一串数字或密钥,依次进行加密、解密等操作,从而实现保密通信和认证等。
(1)密钥分配实现的基本方法
安全的密钥分配是通过建立安全信道来实现的,当前主流的安全信道算法有:
1)基于对称加密算法建立安全信道。
通信双方的保密通信,需要两个用户A和B共享密码,一般有以下几种方式:①密钥由A选取并通过物理手段发送给B;②密钥由第三方选取并通过物理手段发送给A和B;③如果A、B事先已有一密钥,则其中一方选取新密钥后,用已有的密钥加密新密钥并发送给另一方;④如果A和B与第三方C有一保密信道,则C为A、B选取密钥后,分别在两个保密信道上发送给A、B。
前两种方法称为人工发送。在通信网中,若只有个别用户想进行保密通信,密钥的人工发送还是可行的。然而,如果所有用户都要求支持加密服务,则任意一对希望通信的用户都必须有一共享密钥。如果有n个用户,则密钥的数量为n(n-1)/2,因此当n很大时,密钥分配的代价非常大,密钥的人工发送是不可行的。
第三种方法,攻击者一旦获得一个密钥就可以获取以后所有的密钥;而且用这种方法对所有用户分配初始密钥时,代价仍然很大。
第四种方法比较常用,其中第三方通常是一个负责为用户分配密钥的密钥分配中心。这时,每一用户必须和密钥分配中心有一个共享密钥,称为主密钥。如果用户数为n,主密钥数为n,可以通过物理手段发送。
2)基于双钥体制利用数学上求逆的困难建立安全信道。
双钥体制适用于进行密钥管理,特别是对于大型网络中的密钥管理。假设通信双方为A和B。使用双钥体制交换对称密钥的过程是这样的:首先A通过一定的途径获得B的公钥然后A随机产生一个对称密钥K,并用B的公钥加密对称密钥K发送给B;B接收到加密的密钥后,用自己的私钥解密得到密钥K。在这个对称密钥的分配过程中,不再需要在线的密钥分配中心,也节省了大量的通信开销。目前,主要有两种基于双钥体制建立安全信道的模式,一种为采用公钥证书的方式,另一种是分布式密钥管理模式。
3)基于量子密码建立安全信道。
量子密码学是量子力学与密码学结合的产物,而量子密码学的核心就是量子密码安全分配。量子密钥分发的安全性由量子力学的测不准原理和量子不可克隆定理等物理学原理作保证。量子密码学便是基于量子的不确定性,采用量子态作为信息载体,经由量子通道在合法的用户之间传送密钥,构造一个安全的通信通道,使任何在信道上的窃听行为不可能对通信本身产生影响,从而达到窃听失败的目的,以保证信道的安全。
(2)密钥分配实现的基本工具
认证技术和协议技术是分配密钥的基本工具,认证技术是安全分配密钥的保障,协议技术是实现认证必须遵守的流程。
(3)密钥分配系统实现的基本模式
密钥分配系统实现的基本模式有两种,一种是对小型网络,由于用户人数较少,每对用户之间可采用共享一个密钥的方法,如图2-24所示。
图2-24 对小型网络的密钥分配系统模式
图中k表示A和B之间共享的密钥。
另一种是在一个大型网络中,如由n个用户组成的系统中,希望相互之间保密通信,则需要生成n(n-1)/2个密钥进行分配和存储,这样密钥的分配问题就变得复杂,因此为了解决这一问题,常采用密钥中心管理方式。在这种结构中,每个用户和密钥中心共享一个密钥,保密通信的双方之间无共享密钥。
密钥中心机构有两种形式:密钥分配中心(KDC)和密钥传送中心(KTC)。在KDC中,当A向KDC请求发放与B通信的密钥时,KDC生成一个密钥k传给A,并通过A传给B,如图2-25a所示。或者利用A和B与KDC共享密钥,由KDC直接传送给B,如图2-25b所示。
图2-25 密钥分配中心
密钥传送中心(KTC)和密钥分配中心(KDC)十分相似,主要区别在于由通信方的一方产生需求的密钥,而不是由密钥中心来产生。当A希望和B通信时,它产生密钥k并将密钥发送给KTC,KTC再通过A转送给B,如图2-26a所示,或直接送给B,如图2-26b所示,利用A与B和KTC的共享密钥来实现。
图2-26 密钥传送中心
由于KDC和KTC参与,各用户只需保存一个和KDC或KTC共享的较长期的密钥即可其安全性依赖于对密钥中心的信任,中心节点一旦出问题将威胁整个系统的安全。
(4)密钥的验证
在密钥分配过程中,需要对密钥进行验证,以确保准确无误地传送给指定的用户,防止伪装信使用假密钥套取信息,并防止密钥分配中的错误。当你收到密钥时,如何知道这是对方传送的而不是其他人传送的呢?如果是对方亲自传递给你的,那自然简单;如果通过可靠的信使传送密钥,必须相信信使,并需要对密钥进行确认,例如采用指纹法。而让信使传送加密密钥可能更安全。如果密钥由密钥加密,必须相信只有对方才拥有那个加密密钥;如果运用数字签名协议来给密钥签名,那么当验证签名时就必须相信公开密钥数据库;如果某个密钥分配中心(KDC)在对方的公钥上签名,则必须相信KDC的公开密钥副本不曾被篡改过。这些都需要对公开密钥认证。如果被篡改,任何一个人都可以伪装成对方传送一个加密和签名的消息。利用该缺陷的一些人声称公钥密码体制是无用的,公钥体制对提高安全性一点用处也没有,但实际情况却复杂得多。采用数字签名和可信赖KDC的公钥体制,使得一个密钥代替另一个密钥变得非常困难。你可以通过电话核实对方的密钥,这样他可以听到你的声音。声音识别是一个真正的好的鉴别方案。如果是一个秘密密钥,他就用一个单向Hash函数来核实密钥,AT&T、TSD就是用这种方法对密钥进行验证的。有时,核实一个公开密钥到底属于谁并不重要,核实它是否属于去年的同一个人或许是有必要的:如果某人送了一个签名提款的信息到银行,银行并不关心到底谁来提款,它仅关心是否与第一次来存款的人是同一个人。
3.对称密钥管理
对称加密是基于共同保守秘密来实现的。采用对称加密技术的双方必须保证采用的是相同的密钥,保证彼此密钥的交换是安全可靠的,同时还要设定防止密钥泄密和更改密钥的程序。从而对称密钥的管理和分发工作将变成一个具有潜在危险的和繁琐的过程。但通过公开密钥加密技术实现对称密钥的管理使相应的管理变得简单和更加安全,同时还解决了纯对称密钥模式中存在的可靠性问题和鉴别问题。
一种建立对称加密密钥的常用方法是RSA密钥传输法。对称密钥能够由一个系统生成,然后散发给一个或多个系统,其采用的是RSA的加密模式来进行加密。
通信双方中的一方可以为每次交换的信息生成唯一一把对称密钥,并用公开密钥对该密钥进行加密,然后再将加密后的密钥和用该密钥加密的信息一起发送给相应的通信方。由于对每次信息交换都对应生成了唯一一把密钥,因此通信双方就不再需要对密钥进行维护和担心密钥的泄露或过期。这种方式的另一优点是即使泄露了一把密钥也只将影响一笔交易,而不会影响通信双方之间所有其他交易关系。这种方式提供了贸易伙伴间发布对称密钥的一种安全途径。
另一种建立对称加密密钥的方法,是通信双方通过某个值来形成对称加密密钥的方法,它是由Diffie和Hellrnan提出的。这一创造性的技术被称为Diffie-Hellman密钥协议,其运作方式如下:系统A和B各自生成一个随机的秘密值x和y,每个系统从自己的秘密值计算出相应的公开值X和Y,两个系统交换彼此的公开值,然后每个系统可以从自己的秘密值和另一个系统的公开值来计算出同一个密钥,也就是说A可以用x和Y计算出密钥,B则可以用y和X计算出同一个密钥。只知道公开值但不知道秘密值的窃听者是不可能计算出密钥的。
4.公开密钥管理
公开密钥加密系统对密钥管理的要求与对称加密系统本质上是完全不同的。在对称加密系统中,对彼此间进行通信的信息进行保护的双方必须持有同一把密钥,该密钥对他们之外的其他方是保密的。而在公开密钥加密系统中,一方必须持有一把对其他任何方都是保密的密钥(私人密钥),同时,还要让想要与私人密钥的持有者进行安全通信的其他方知道另一把相应的密钥(公开密钥)。
在分发公开密钥时并不要求保密,但必须保持公开密钥的完整性。也就是说,不能给攻击者任何替换密钥值的机会,因为这些密钥是一方所信赖的其他方的公开密钥,否则就可能遭到攻击。
从表面来看,公开密钥密码算法没有密钥分配问题,这正是公开密钥密码算法的最大方便之处,网络越复杂、网络用户越多,其优点就越明显。因为公开密钥加密使用两个不同的密钥,其中有一个是公开的,另一个是保密的。公开密钥可以保存在系统目录内、未加密的电子邮件信息中、电话黄页(商业电话)上或公告牌里,网上的任何用户都可获得公开密钥。而私有密钥是用户专用的,由用户本身持有,它可以对由公开密钥加密的信息进行解密。
但是在具体应用中,公开密钥的分发并不像在电话簿中公布电话号码那么简单,除非所有的用户对这样的目录及相应的访问具有高度的信任感,但事实证明这类信任是很难实现的。由此引出了以证书形式来进行公开密钥的管理。通常意义上,所谓证书其实是一种数据结构,是证书使用者所信任的一方进行数字签名的电子信息。公开密钥证书是一种将某方的身份(证书的主体)与某个公开密钥值安全地连接在一起的数据结构。围绕证书的签发与管理而构建的技术和法律框架结构被称为公开密钥基础设施(PKl)。
下面介绍四类典型的公开密钥分配方案:公开宣布;公开可以得到的目录;公开密钥管理机构;公开密钥证书。
(1)公开密钥的公开宣布
公开密钥的公开宣布方法最为简单,只需将公开密钥附加在发送给公开论坛的报告中,这些论坛包括USENET新闻组和Internet邮件组。这是一个不受控制的公开密钥分配方案,如图2-27所示。但是这个方法有一个致命的弱点:任何人都可以伪造一个这样的公开告示。
(2)公开可以得到的目录
通过维持一个公开可以得到的公开密钥动态目录就能够取得更大程度的安全性。对公开目录的维护和分配必须由一个受信任的系统和组织来负责,如图2-28所示。
图2-27 不受控的公开密钥分配
图2-28 公开密钥的公布
这种方案包括下列成分:
1)管理机构为每个参与者维护一个目录项(名字,公开密钥)。
2)每个参与者在目录管理机构登记一个公开密钥。登录必须面对面进行,或者通过某种安全的经过认证的通信方式进行。
3)参与者可以随时用新的密钥更换原来的密钥,不论是因为希望更换一个已经用于大量的数据的公开密钥,还是因为对应的私有密钥已经以某种途径泄露出去了。
4)管理机构定期发表这个目录或者对目录进行更新。例如,可以出版一个很像电话号码簿的打印版本,或者可以在一份发行量很大的报纸上列出更新的内容。
5)参与者也可能以电子方式访问目录。为了这个目的,从管理机构到参与者的通信必须是安全的、经过鉴别的通信。
这个方案明显比各个参与者单独进行公开告示更加安全,但是它仍然有弱点。如果一个敌对方成功地得到或者计算出了目录管理机构的私有密钥,敌对方就可以散发伪造的公开密钥,并随之假装成任何一个参与者窃听发送给该参与者的报文。另一个达到同样目的的方法是敌对方篡改管理机构维护的目录。
(3)公开密钥管理机构
通过更严格地控制公开密钥从目录中分配出去的过程就可以使公开密钥分配更安全。一个典型的情况如图2-29所示。和以前一样,在这里假定一个中心管理机构维护一个所有参与者的公开密钥动态目录。另外,每个参与者都可靠地知道管理机构的一个公开密钥,而只有管理机构才知道对应的私有密钥。
本方案中,开始的4个报文并不经常使用,因为A和B两者都可以保存另一个公开密钥以供将来使用,即都可以使用缓存技术。一个用户应该定期向通信的对方要求当前的公开密钥,以保证公开密钥的实效性。
(4)公开密钥证书
如图2-29所示的情形固然很好,但是它也有某些缺点。公开密钥管理机构可能是系统中的一个瓶颈,因为一个用户对于他所希望联系的其他用户都必须借助于管理机构才能得到公开密钥。像前面一样,管理机构所维护的名字和公开密钥目录也可能被篡改。一个使用数字证书的替代方法如图2-30所示。
图2-29 利用公钥管理机构分发公开密钥
注:KUa和KUb分别是A和B的公开密钥
图2-30 公开密钥证书的交换
注:Cert-A、Cert-B和ID-A、ID-B是A和B的数字证书和身份标识。
采用这种方案可以做到如同直接从公开密钥管理机构得到密钥一样可靠。每个证书包含一个公开密钥以及其他信息,它由一个证书管理机构制作,并发给具有匹配的私有密钥的参与者。一个参与者通过传输它的证书将其密钥信息传送给另一个参与者,其他参与者可以验证证书是不是该管理机构制作的。
这种方案有如下要求:
1)任何参与者都可以阅读证书以确定证书拥有者的名字和公开密钥。
2)任何参与者都可以验证证书是否来自证书管理机构。
3)只有证书管理机构才可以制作和更新证书;
4)任何参与者都可以验证证书的有效性。
图2-30给出了一个满足如上条件的证书交换方案。贸易伙伴间可以使用数字证书(公开密钥证书)来交换公开密钥。国际电信联盟(ITU)制定的标准X.509对数字证书进行了定义,该标准等同于国际标准化组织(ISO)与国际电工委员会(IEC)联合发布的ISO/IEC9594—8:195标准。数字证书通常包含唯一标识证书所有者(即贸易方)的名称、唯一标识证书发布者的名称、证书所有者的公开密钥、证书发布者的数字签名、证书的有效期及证书的序列号等。证书发布者一般称为证书管理机构(CA),它是贸易各方都信赖的机构。数字证书能够起到标识贸易方的作用,是目前电子商务中广泛采用的技术之一。微软公司的Internet Explorer就提供了数字证书的功能来作为身份鉴别的手段。
5.混合密钥管理方案
直接用公钥进行通信加密和直接用私钥对数据进行签名的做法效率太低,而公钥体制不需要共享的通用密钥,而且在身份验证方面很有优势,因此出现了公钥体制和对称密钥体制混合起来的密钥管理方案。这种方案是利用公钥来协商临时的会话密钥,再用会话密钥来加密会话内容。
假定有两个用户a和b想要相互通信,网络上还有一个可信的第三方CA。a和b均有自己的公钥和私钥,其中公钥公开在CA上,私钥则自己秘密保存,如图2-31所示。
图2-31 混合密钥管理方案
(1)a发起通信,先随机生成一个会话密钥key。从CA得到b的公钥PK2,用PK2加密y,发送给b。
(2)b收到后,用自己的私钥SK2解密得到key。这时双方都已经拥有会话密钥。b发送一个确认给a。
协商以后,a和b使用会话密钥y来通信。如果b要确认a的身份,那么在步骤(1)中,a还要加上自己的签名,也就是用私钥SK1加密一个能表明自己身份的标记,把加密结果附带发送给b。此时,在步骤(2)中,b就可以用a的公钥来验证a的签名了。
以上只是个简单的密钥管理方法,在实际应用中密钥管理可能复杂得多,可能要考虑数据完整性、时间戳、密钥更新等问题。其中所用到的公钥密码算法可以是RSA、椭圆曲线等。
6.密钥托管技术
密钥托管的前提是,用户不应具有在他们中间分配秘密密钥的能力,否则用户能用这些密钥替代密钥托管机构能控制的密钥,绕过密钥托管,使密钥管理失效。
密钥托管可以简单地理解为把通信双方每次的会话密钥交给合法的第三方,以便让合法的第三方利用得到的会话密钥解密双方通信的内容,从而监视双方的通信。一般而言合法的第三方通常为政府部门和法律执行部门。
密钥托管的一个最简单方法就是由一个(或多个)可信的政府代理机构为个人保管秘密密钥,这样经过适当的授权,政府就能检索存储的秘密密钥,进而对窃听到的通信进行脱密。
(1)密钥托管的发展
由于密钥托管技术的使用会将企业和私人用户的秘密泄露给政府和法律执行部门,这引起了政府和法律执行部门与企业和私有用户之间的矛盾。官方认为,密钥托管的研制和使用对于加速发展高级安全技术,保证高速发展的信息网络系统的安全有重要作用,它为公司保护其专有信息,为私人保护个人秘密,防止未授权信息泄露提供了有效的工具,同时它也为政府和法律执行机构提供了依法监视犯罪分子所进行通信的能力,以维护宪法的尊严和保护公民的权力。但企业和私人用户认为密钥托管将泄露他们的私人秘密,它将对通信双方的安全和公民的权力产生破坏性的影响,这样对用户来说,它们将没有自己私人的秘密可言。由此可见,要进行密钥托管,需要政府制定相应的法规,并要严格控制。
现在比较成熟的密钥托管技术是美国的密钥托管标准KES,它是基于一个防拆性的CLIPPER芯片,它利用了私钥密码体制的分组密码算法来产生数据恢复域。密钥托管已经在一些地方使用,它们不仅用来恢复加密后的信息,而且还具有签名验证功能。
虽然近年来从大众媒体到政府高层政策决策者都对密钥托管体制产生了浓厚的兴趣,遗憾的是,就密钥托管领域本身而言,其基础不是很完善,以致在安全保密性问题上产生过灾难性的事故。
(2)密钥托管的应用
目前密钥托管技术的使用还不够广泛,但它已在下面几个方面得到了应用:
当一个用户存储了一个加密后的文件或其他重要资料时,由于用户不小心丢失或损害加密该文件的密钥,而需要紧急解密文件或资料,此时用户可向密钥托管代理者申请,密钥托管代理者向他们提供所需要的用户秘密密钥,从而使用户能恢复出加密的文件或资料。
使用密钥托管来加密关键文件时,当执行加密的用户不在,而合法的用户又想知道该文件内容时,它可把加密后的文件传送给密钥托管者,密钥托管者解密后就可把它送还给合法用户。
在此介绍利用密钥托管协议进行文件加密的一种应用:
1)用户向密钥托管者发送将要存储的文件。
2)密钥托管者利用自己的秘密密钥K1来加密用于加密该文件的密钥K2。
3)密钥托管者利用K2来加密该文件,并把加密后的K2和加密后的文件送回给用户。
因为只有密钥托管者能解密K2,而其他人没有能力对其解密,所以文件的安全性得到了保障。
当法律执行部门怀疑某人或组织在采用密码设备进行犯罪活动时,为了获得犯罪证据他们利用密钥托管来解密截取到的密文,从而将犯罪分子绳之以法。企业内部为了防止某些怀有恶意的雇员利用内部的保密设备泄露本公司的秘密,利用密钥托管技术对他们的通信进行监视,从而可防止和减少公司的损失。
在电子邮件中,发送者和接受者利用密钥托管可进行密钥交换、电子签名、鉴别等操作。此外,在银行系统、商业系统、军方和一些政府部门都可找到它的应用。
(3)密钥托管的组成
密钥托管加密分成3个组成部分:用户安全部分、密钥托管部分和数据恢复部分。用户安全部分是用来提供信息加密和解密以及密钥托管功能的硬件设备或软件程序,它提供了一个数据恢复域(DRF)到加密后的信息中去,DRF中包含了会话密钥的信息,它用来实现密钥托管功能;密钥托管部分可由密钥托管代理来操作,它采用一些安全方法从DRF中恢复出会话密钥;数据恢复部分则利用从密钥托管部分中得到的会话密钥对截取到的密文进行明文的恢复。
(4)密钥托管的可行性分析
由于密钥托管系统负有法律执行部门及政府智能部门的特殊任务,同非密钥托管系统相比,它的实行势必降低加密系统的安全性,增加系统的复杂性以及建立、维护、运行系统的费用。密钥托管作为一个信息安全基础设施,在它的推广使用时必须考虑以下几点:
1)保证数据的保密性、完整性。
2)世界范围内的可用性。与国际、国内不同的密码政策相适应。
3)足够的强度,能抗击实际使用中各种威胁及运行的风险。
4)实施方法的细节应该是公开的。比如SHIJACK算法及LEAF产生方法。
5)必须能为法律执行部门提供方便。
6)滥用应该是困难的和容易发现的。
7)形成一个合法的组织体系。
8)必须考虑宪法赋予公民的合法权利。
9)选择可信任的托管机构KEA(Key Escrow Agency)时应有很大的灵活性。
10)有足够的权利使用新开发的算法和标准。
11)对任何人都是容易得到的而且费用不能太高。
12)为用户提供可选的安全防范,以减小诸如密钥丢失或毁坏所造成的损失。
2.5.2 密钥交换协议
密钥交换协议是这样一种机制:系统中的一个成员先选择一个秘密密钥,然后将它传送给别的成员。传统的方法是通过邮递或信使护送密钥,这种方法的安全性完全取决于信使的忠诚和素质,当然很难完全消除信使被收买的可能性。另外,这种方法的传输量和存储量都很大。人们希望能设计出满足以下两个条件的密钥分配协议:传输量和存储量都比较小;每一对用户U和V都能独立地计算一个秘密密钥K。目前已经设计出了大量的满足上述两个条件的密钥分配协议,诸如Diffie-Hellman密钥交换协议、Oakley密钥交换协议和IKE密钥管理协议等。
1.Diffie-Hellman协议
Diffie和Hellman在其具有里程碑意义的文章中,虽然给出了密码的思想,但是没有给出真正意义上的公钥密码实例,也没能找出一个真正带陷门的单向函数。然而,他们给出了单向函数的实例,并且基于此提出了Diffie-Hellman密钥交换协议法。
Diffie-Hellmen密钥交换协议拥有美国和加拿大专利。利用Diffie-Hellman密钥协议,两个通信系统可以用同一个数值来生成加密的对称密钥。
Diffie-Hellman密钥交换协议有两个优势特征:
(1)密钥仅在需要时才被建立,不需要将密钥存储很长—段时间,因此不易受到攻击,降低了密钥泄露的危险性。
(2)协议除要求有预先协商好的全局参数外,不要求有其他预先已存在的基础设施,实现简单方便。
但是,Diffie-Hellman协议也存在着如下弱点。
1)协议未提供有关通信双方身份的任何信息。
2)易受中间人攻击。即第三方C在和A通信时扮演B;而在和B通信时扮演A。A和B都同C协商了一个密钥,然后C就可以监听和修改通信数据流,而A和B毫不知情,都以为是在和对方通信。
3)协议的计算量很大,因此易受到阻塞性攻击。即攻击者假冒一个合法用户的源地址向被攻击者发送Diffie-Hellman公钥,请示大量的密钥,被攻击者则需要花费大量的计算资源来做无用的模指数运算,严重时可导致拒绝服务。
2.Oakley协议
Oakley密钥交换协议是由安全专家Hilarie Orman开发的一种协议,是在Diffie-Hellman密钥交换协议基础上的改进。
Oakley的设计目标是继承Diffie-Hellman协议的优点,同时克服其缺点。Oakley有五个重要的特征:
1)采用了称为Cookie程序的交换机制来防止阻塞攻击。
2)通信双方可以协商Diffie-Hellman密钥交换所用的群,即协商所需的全局参数。
3)使用一次性随机数来防止重播攻击。
4)可使通信双方交换Diffie-Hellman公开密钥的值。
5)对Diffie-Hellman密钥交换加以鉴别,防止中间人攻击。
此外,在此基础上,还产生了更为规范的IKE安全交换协议。IKE是Oakley和SKEME密钥交换方案的综合体,属于ISAKMP(Internet Association and Key Management Protocol,互联网安全关联和密钥管理协议)框架的一种实例,并在ISAKMP规定的一个框架内运行。
3.互联网简单密钥交换协议(SKIP)
尽管SKIP协议仍然采用Diffie-Hellman密钥交换机制,也就是说,两个实体以证书形式都知道对方的长效Diffie-Hellman公钥,从而隐含地共享一个主密钥。该主密钥可以导出对分组密钥进行加密的密钥,而分组密钥才真正用来对IP包加密。一旦长效Diffie-Hell-man密钥泄露,则任何在该密钥保护下的密钥所保护的相应通信都将被破解。还有,SKIP是无状态的,它不以安全条例为基础。每个IP包可能是个别地进行加密和解密的,归根到底用的是不同的密钥。
2.5.3 PGP密钥管理技术
PGP(Pretty Good Privacy)是Hil Zimmermann于20世纪80年代中期提出的密钥管理方案,该方案的创造性在于把RSA公钥体系的便捷性和传统加密体系的高速性结合起来,公开密钥采用RSA加密算法,实施对密钥的管理;分组密钥采用了IDEA算法,实施对信息的加密,并且在数字签名和密钥认证管理机制上有巧妙的设计。因此PGP成为几乎最流行的公钥加密软件包。
PGP应用程序的第一个特点是速度快,效率高,另一个显著特点就是可移植性出色,它可以在多种操作平台上运行。PGP主要具有加密文件、发送和接收加密的E-mail、数字签名等。它采用了以下技术:审慎的密钥管理、一种RSA和传统加密的杂合算法、用于数字签名的邮件文摘算法和加密的杂合算法、用于数字签名的邮件往往在加密前压缩等,还有一个良好的人机会话设计。它功能强大,速度很快,而且其源代码是免费的。
PGP的主要功能有:
(1)使用PGP对邮件加密,以防止非法阅读。
(2)能给加密的邮件追加上数字签名,从而使收信人进一步确信邮件的发送者,而事先不需要任何保密的渠道用来传递密钥。
(3)可以实现只签名而不加密,适用于发表公开声明时证实声明人身份,也可防止声明人抵赖,这一点在商业领域有很大的应用前景。
(4)能够加密文件,包括图形文件、声音文件以及其他各类文件。
(5)利用PGP代替Uuencode生成RADIX64(就是MIME的BASE64格式)的编码文件。
1.PGP的概念和原理
PGP是目前最流行的一种加密软件,它是一个基于RSA公钥加密体系的邮件加密软件。我们可以用它对邮件加密以防止非授权者阅读,它还能对用户的邮件加上数字签名,从而使收信人可以确信发信人的身份。它让用户可以安全地和从未见过的人们通信,事先并不需要任何保密措施的来传递密钥,因为它采用了非对称的“公钥”和“私钥”加密体系。
PGP不是一种完全的非对称加密体系,它是个混合加密算法,是由一个对称加密算法(IDEA)、一个非对称加密算法(RSA)、一个单向散列算法(MD5)以及一个随机数产生器(从用户击键频率产生伪随机数序列)组成的,每种算法都是PGP不可分割的组成部分。PGP之所以得到流行,得到大家的认可,最主要的一个原因是它集中了几种加密算法的优点,使它们彼此得到互补。
我们知道采用“公钥”和“私钥”加密体系最大的安全性问题就是公开的“公钥”可能被人篡改,影响文件的解密。虽然PGP也采用这一加密体系,并且所有“公钥”和“私钥”都可以由用户自己产生,不需要专门的认证机构,但它却有一个比较完善的密钥管理体制,所以它的另一半优点就体现在PGP独特的密钥管理体制上。
下面我们就从PGP加密机制和密钥管理的角度来分析PGP加密的优越性。
(1)PGP的安全机制
在现代社会里,电子邮件和网络上的文件传输已经成为生活的一部分。邮件的安全问题也就突出了,大家都知道在互联网上传输的数据是不加密的。如果用户不保护自己的信息第三者就会轻易获得用户的隐私。还有一个问题就是信息认证,如何让收信人确信邮件没有被第三者篡改,就需要使用数字签名技术(关于数字签名技术,本书将在下一章作详细阐述)。
PGP的数字签名是利用一个叫“邮件文摘”的功能。“邮件文摘”(Message Digest),简单讲就是对一封邮件用某种算法算出一个最能体现这封邮件特征的数来,一旦邮件有任何改变,这个数都会发生变化,那么这个数加上用户的名字(实际上在用户的密钥里)和日期等等,就可以作为一个签名了。确切地说,PGP是用一个128位的二进制数作为“邮件文摘”,用来产生它的算法就是MD5(Message Digest 5)。MD5的提出者是Ron Rivest,PGP中使用的代码是由Colin Plumb编写的MD5。
PGP给邮件加密和签名的过程是这样的:首先甲用自己的私钥将上述的128位值加密,附加在邮件后,再用乙的公钥将整个邮件加密(要注意这里的次序,如果先加密再签名,别人可以将签名去掉后签上自己的签名,从而篡改了签名)。这样这份密文被乙收到以后,乙用自己的私钥将邮件解密,得到甲的原文和签名,乙的PGP也从原文计算出一个128位的特征值来和用甲的公钥解密签名所得到的数进行比较,如果符合就说明这份邮件确实是甲寄来的。这样两个安全性要求都得到了满足。
PGP还可以只签名而不加密,这适用于公开发表声明时,声明人为了证实自己的身份,可以用自己的私钥签名,这样就可以让收件人能确认发信人的身份,也可以防止发信人抵赖自己的声明。这一点在商业领域有很大的应用前途,它可以防止发信人抵赖和信件被途中篡改。
PGP提供的安全服务如表2-16所示。
表2-16 PGP的安全服务
(续)
(2)PGP的密钥管理
一个成熟的加密体系必然要有一个成熟的密钥管理机制配套。公钥体制的提出就是为了解决传统加密体系的密钥分配难以保密的缺点。比如网络黑客们常用的手段之一就是“监听”,如果密钥是通过网络传送就太危险了。对PGP来说公钥本来就要公开,就没有防监听的问题。但公钥的发布中仍然存在安全性问题,例如公钥被篡改(Public Key Tampering),这可能是公钥密码体系中的最大漏洞。用户必须确信用户的公钥属于需要收信的那个人。
PGP的每个密钥有它们自己的标识(key ID)。key ID是一个8位十六进制数,两个密钥具有相同key ID的可能性只有十亿分之一,而且PGP还提供了一种更可靠的标识密钥的方法:“密钥指纹”(Keys Fingerprint),每个密钥对应一串数字(16个2位十六进制数),这个指纹重复的可能就更微乎其微了。而且任何人无法指定生成一个具有某个指纹的密钥,密钥是随机生成的,从指纹也无法反推出密钥来。用户拿到某人密钥后就可以与他在电话上核对这个指纹,从而认证他的公钥。
2.PGP软件使用简介
PGP加密软件是美国Network Associate Inc.开发的免费软件,目前已经有多种版本,分别有与MS-DOS、UNIX、Macintosh和Windows兼容的版本。PGP的6.5版是免费版,在www.pgp.com上可以下载。
PGP的安装很简单,和一般的软件安装一样,按提示一步步完成即可。安装后,Win-dows的Exchange或者Outlook就增加了PGP软件及相应的菜单和按钮。如果使用的电子邮件软件没有PGP的软件支持,PGP可以通过文件快捷菜单和剪贴板这两种手段与电子邮件软件交换加密数据,因此,PGP可以直接或间接地支持所有电子邮件软件。
安装后,用户能够使用两个程序:PgpTrays.exe和PgpKeys.exe。PgpTrays.exe是控制中心,提供对所有功能的操作界面,并且执行后在任务栏中供用户随时调用,建议将其添加到开始菜单的“启动”。而PgpKeys.exe可以对密钥进行生成、散发与废除、签名与信任等管理。
PgpKeys管理着一个“钥匙环”,钥匙环文件保存着收集到的所有公开密钥,由此可以进行密钥维护与管理。
(1)生成新的密钥对
每一个用户都必须生成自己的密钥对,这是使用PGP加密的第一步,通常在安装过程中完成。在PgpKeys中也可生成新的密钥,在菜单Key→NewKey弹出的生成密钥窗口中,填写用户名、电子信箱地址;然后要选择密钥长度,确定密钥生存周期,定义保护密钥的口令。生成密钥后,可以选择是否立即将新的公开密钥发送到互联网的密钥服务器上。
(2)散发和获取公开密钥
散发和获取公开密钥有两种途径:
1)通过网上公共的密钥服务器在PgpKeys的密钥列表中选择某个公开密钥。点击鼠标右键,在Key Server→Send Selected Keys弹出的快捷菜单中选择发送密钥至服务器即可上传公开密钥。选择Get Selected Keys(获取指定人的密钥)或者主菜单Keys→Key Server→Find New Key(通过电子信箱地址和姓名查找新密钥),即可在密钥服务器上查询和下载密钥,并安装到本机钥匙环上。
2)通过电子邮件在PgpKeys的密钥列表中选择某个公开密钥。点击鼠标右键,在弹出的快捷菜单中选择Export(导出),将选中的密钥保存为一个后缀名为ASC的文本文件,作为电子邮件的附件发送给对方;收到密钥文件后,对方在PgpKeys的菜单中选择Import(导入),或者在运行PgpKeys后,双击该密钥文件,即可将公开密钥挂在钥匙环上。
(3)签名与信任
获得他人的公开密钥并挂到钥匙环上以后,必须经过验证,再使用你自己的私人密钥对其签名以设定信任等级。验证的方法有两种:
1)验证密钥的指纹。每一个密钥在生成时都产生一个唯一对应的数字指纹,这是一串数字,最保险的办法是要求密钥所有者在电话里报出密钥指纹供你验证。
2)通过可信任的介绍人来验证密钥的信任度。任何人都可以用自己的私人密钥对他人的公开密钥进行数字签名,表示相信该密钥属于其真正的主人。
验证一个密钥的真实性后,可以用私人密钥对其进行签名并设定其信任等级。在Pgp-Keys的密钥列表中选择该公开密钥,点击鼠标右键,在弹出的快捷菜单中选择Sign(签名),回答口令后即将该公开密钥签名;在右键快捷菜单中选择Key Properties(密钥属性)即可修改信任等级。
(4)密钥的废除
假如不再信任密钥对,则可以通过废除操作来取消它们,在PgpKeys的密钥列表中选择该公开密钥,在右键快捷菜单中选择Revoke(废除),然后将废除的密钥上传到公开密钥服务器,或者通过电子邮件发送给相关的通信伙伴。