当前位置:文档之家› 密码学与网络安全

密码学与网络安全










目标
本章的几个目标是:
● 说明为什么要有一个密钥分配中心(KDC)
● 说明KDC怎样在两个机构之间创建一个会话密钥
● 说明在不使用KDC服务的情况下,两个机构怎样使用对称密钥协议在他们之间创建会话密钥
● 介绍作为KDC的Kerberos和一种验证协议
● 说明为什么要有一个公钥证书发行机构(CA),并解释X509推荐怎样定义证书的格式
● 介绍公钥基础设施(PKI)的概念并说明其职责
前几章中我们已经讨论了对称密钥密码和非对称密钥密码。不过对对称密钥密码中的密钥,和非对称密钥密码中的公钥,是怎样分配和维持的还没有讨论。本章涉及这方面的问题。
首先,讨论运用于可信第三方的对称密钥的分配。其次,说明为什么两个机构在不使用可信第三方的情况下,也可以在他们之间建立一个对称密钥。再次,介绍作为KDC和一个验证协议的Kerberos。第四,讨论运用基于X.509推荐的认证机关的公钥证书。最后,简要介绍一下公钥基础设施(PKI)的概念及其作用。
15.1 对称密钥分配
在对大的信息进行加密时,对称密钥密码比非对称密钥密码更为有效。不过对称密钥密码在两个机构之间需要有一个共享密钥。
如果爱丽丝需要与N个人交换秘密信息,她就要有N个不同的密钥。如果N个人相互之间都需要通信,那又会怎么样呢?如果我们要求爱丽丝和鲍勃在双向通信中用两个密钥,那总共要用N(N???1)个密钥;如果我们允许在两个方向上用一个密钥,那就只需要N(N ??1)/2个密钥。这就表明如果有一百万人相互之间要通信的话,每个人几乎要有一百万把不同的密钥,总共要有一万亿把密钥。因为N个实体需要密钥的数量是N2,通常这就被称为N2问题。
问题不仅仅是密钥的数量,还有一个问题就是密钥的分配。如果爱丽丝和鲍勃要通信,他们就要有一个交换密钥的方法;如果爱丽丝要和一百万人通信,她怎样才能和一百万人交换一百万把密钥呢?运用因特网肯定不是一种安全的方法。显然,我们需要有一种有效的方法来维持和分配密钥。
密钥分配中心:KDC
实际的解决方法就是运用一个可信的第三方,称为密钥分配中心(KDC)。为了减少密钥的数量,每人要与KDC建立一个共享密钥,如图15-1所示。

图15-1 密钥分配中心(KDC)
密钥是在KDC和每个成员之间建立的。爱丽丝有一把与KDC之间的密钥,称为KAlice;鲍勃有一把与KDC之间的密钥,称为KBob等。现在的问题是爱丽丝怎样把一个密信发送给鲍勃。过程如下:
(1) 爱丽丝向KDC发送一个请求,表明她需要一个她和鲍

勃之间的会话(临时)密钥。
(2) KDC把爱丽丝的请求通知鲍勃。
(3) 如果鲍勃同意,就在他们之间创建一个会话密钥。
爱丽丝和鲍勃与KDC之间建立的密钥,用来进行从爱丽丝、鲍勃到KDC这个方向上的验证,并用来避免伊夫模仿他们当中的任何一方。在本章后面,我们将讨论怎样在爱丽丝和鲍勃之间建立会话密钥。
1. 平级多重KDC
如果使用KDC的人数增加,系统就会难于管理并产生一个瓶颈。为了解决这个问题,我们就需要有多重KDC。我们可以把这个世界分成若干个域。每个域可以有一个或多个KDC(冗余以免失败)。现在如果爱丽丝要发送一个秘密信息,给属于另一个域的鲍勃,爱丽丝就和KDC联系,该KDC再和鲍勃所在域中的KDC联系。这两个KDC可以在爱丽丝和鲍勃之间创建一个密钥。图15-2所示,就是处于同一层次的KDC。我们称为平级多重KDC。
2. 分级多重KDC
平级多重KDC的概念可以扩展到KDC的分级系统,就是在最高层上具有一个或多个KDC。比如,可以有本地KDC、国家KDC和国际KDC。如果爱丽丝需要与鲍勃通信,鲍勃生活在另外一个国家,她就发送一个请求给本地KDC;本地KDC向国家KDC重放这一请求;国家KDC再向国际KDC重放这一请求。然后,这个请求一直被从上到下重放到鲍勃的本地KDC。图15-3所示就是分级多重KDC的构造。

图15-2 平级多重KDC

图15-3 分级多重KDCs
15.1.2 会话密钥
KDC为每个成员创建一个密钥,这个密钥只能用于成员和KDC之间,不能在成员之间使用。如果爱丽丝要与鲍勃通信,她就要有一个她自己和鲍勃之间的密钥。KDC可以使用他们与中心之间的密钥,在爱丽丝和鲍勃之间创建一个会话密钥(session key)。在会话密钥建立之前,爱丽丝和鲍勃的密钥用来进行中心对爱丽丝和鲍勃的验证以及他们两人之间的验证。通信终止后,会话密钥就没有用了。
两个机构之间的会话对称密钥只使用一次。
运用在第14章中讨论过的实体验证的概念,几种不同的方法都可以用于创建会话密钥。
1. 运用KDC的简单协议
让我们了解一下KDC是怎样在爱丽丝和鲍勃之间建立会话密钥KAB的。图15-4表明了这一过程的步骤。

图15-4 运用KDC的第一种方法
(1) 爱丽丝发送一个明文信息给KDC,以便获得一个她自己和鲍勃之间的对称会话密钥。这个信息包含她的注册身份(图中爱丽丝这个词)和鲍勃的身份(图中鲍勃这个词)。这个信息没有加密,是公开的。KDC并不关心。
(2) KDC收到这个信息并创建一个称为票据(ticket)的东西。票据用鲍勃的密钥(KB)加密。票据包含爱丽丝和鲍勃的身份以及会话密钥(KAB)。票据和会

话密钥的副本被发送给爱丽丝。爱丽丝收到信息后,对其解密,并把会话密钥抽取出来。她不能解密鲍勃的票据,因为这个票据是鲍勃的,不是爱丽丝的。注意,这个信息包含双重加密:票据要加密,全部的信息也要加密。在第二个信息中,因为只有爱丽丝可以用她与KDC的私钥打开全部信息,所以实际上KDC就对爱丽丝进行了验证。
(3) 爱丽丝把票据发送给鲍勃。鲍勃打开票据,知道爱丽丝要用KAB作为会话密钥给他发送信息。注意,在这个信息中,因为只有鲍勃能够打开票据,也就相当于KDC对鲍勃进行了验证,爱丽丝对鲍勃也进行了验证,因为他已经被KDC验证了。同样,相当于鲍勃也对爱丽丝进行验证,因为鲍勃相信KDC,并且KDC把含有爱丽丝身份的票据发送给了鲍勃。
遗憾的是,这个简单协议是有缺陷的。伊夫可以使用前面讨论过的重放攻击。即她可以在第三步中把信息保存起来,并且以后再把它重放。
2. Needham-Schroeder协议
另一种方法就是精密的Needham-Schroeder协议,这是许多其他协议的基础。这种协议运用机构之间的多重挑战-应答交流,来获得无缺陷的协议。Needham 和 Schroeder用了两个nonce:RA和RB。图15-5所示就是运用这一协议的五个步骤。
我们把每一步都简单讨论一下:
(1) 爱丽丝把一个包含她自己的nonce、RA、个人身份以及鲍勃身份的信息发送给KDC。

图15-5 Needham-Schroeder协议
(2) KDC再把一个包含爱丽丝的nonce、鲍勃的身份、会话密钥和一个鲍勃的加密票据的加密信息发送给爱丽丝。整个信息用爱丽丝的密钥加密。
(3) 爱丽丝把鲍勃的票据发送给他。
(4) 鲍勃把用会话密钥加密了的挑战(RB)发送给爱丽丝。
(5) 爱丽丝应答鲍勃的挑战。注意,应答携带的是RB ??1而不是RB。
3. Otway-Rees协议
第三个协议就是Otway-Rees协议,也是一个精密的协议。图15-6所示是该协议的五个步骤。

图15-6 Otway-Rees协议
下面简单介绍一下这几个步骤。
(1) 爱丽丝发送一个信息给鲍勃,该信息包含普通nonce R以及爱丽丝和鲍勃的身份,爱丽丝也发送一个票据给鲍勃,该票据包含爱丽丝的nonce RA(KDC使用的一个挑战)、普通nonce R的副本以及爱丽丝和鲍勃的身份。
(2) 鲍勃创建同类型的票据,不过是用他自己的nonce RB。两种nonce都发送给KDC。
(3) KDC创建一个信息,该信息包含普通nonce R,爱丽丝的票据和鲍勃的票据,并把该信息发送给鲍勃。票据包含相关的nonce RA 或 RB以及会话密钥KAB。
(4) 鲍勃把爱丽丝的票据发送给她。
(5) 爱丽丝发送一个用她的会话密钥KAB加密的短信息,表明她有

会话密钥。
15.2 KERBEROS
Kerberos是一个验证协议,同时也是一个KDC,现在它的应用非常普及。有几种系统,包括Windows 2000都使用Kerberos。它的名字来自于希腊神话中守卫地狱大门的三头狗。最初是由麻省理工学院设计出来的,现在已经经历了好几个版本。我们只讨论最普及的第四版,再简单讨论一下第四版和第五版(最新版)的不同。
15.2.1 服务器
Kerberos协议涉及三种服务器:一个验证服务器(AS),一个票据许可服务器(TGS)和一个给其他机构提供服务的真实(数据)服务器。在我们的图和例子中,鲍勃就是真实服务器,爱丽丝是请求服务的用户。图15-7所示,就是这三种服务器之间的关系。

图15-7 Kerberos服务器
1. 验证服务器(AS)
验证服务器(AS)就是Kerberos协议中的KDC。每个用户用AS注册,并被授予一个用户身份和一个口令。AS有一个带有这种身份和相关口令的数据库。AS确认用户,发行在爱丽丝和TGS之间使用的会话密钥,并把TGS的票据发送出去。
2. 票据许可服务器(TGS)
票据许可服务器(TGS)发行一个真实服务器(鲍勃)的票据。它也提供爱丽丝和鲍勃之间的会话密钥。Kerberos把用户验证和票据发行分开了。这样爱丽丝虽然只用AS对她自己的ID验证一次,但为了获得不同的真实服务器票据,她可以多次联系TGS。
3. 真实服务器
真实服务器(鲍勃)可以为用户(爱丽丝)提供服务。Kerberos是为客户-服务器程序设计的,如FTP,这里一个用户使用客户程序就能访问服务器程序。Kerberos不用来进行人对人的验证。
15.2.2 操作
一个客户服务器(爱丽丝)可以分六个步骤来访问在真实服务器(鲍勃)上运行的程序,如图15-8所示。
(1) 爱丽丝用她的注册身份,以明文的形式发送一个请求到AS。
(2) AS把一个用爱丽丝的永久对称密钥KA-AS加密的信息发送出去。该信息包含两项:一个会话密钥KA-TGS,这个密钥是爱丽丝用来与TGS联系的;一个TGS的票据,该票据是用TGS对称密钥KAS-TGS加密过的。爱丽丝不知道KA-AS,但收到信息后,她键入了她的对称口令。如果口令是正确的,口令和适当的算法一起创建了KA-AS。然后,立即销毁口令,这个口令既不发送到网络也不在终端停留,只在创建KA-AS的那一刻使用。现在使用KA-AS给发送的信息解密,KA-TGS和票据被提取出来。
(3) 爱丽丝现在给TGS发送三项内容。第一是从AS收到的票据,第二是真实服务器(鲍勃)的名称;第三是一个由KA-TGS加密的时间戳。时间戳可以避免由伊夫执行的重放。
(4) 现在,TGS发送两个票据,每一个都包含爱丽丝和鲍勃之间的会话密钥KA-B。爱丽丝的票据用KA-TGS加密;鲍

勃的票据用鲍勃的密钥KTGS-B加密。注意,因为不知道KA-TGS或 KTGS-B,伊夫不能提取出KAB。因为她不能用一个新的时间戳(她不知道KA-TGS)取代旧的,她就不能重放第三步。即使伊夫的速度足够快,在时间戳作废之前发送了第三步的信息,也收到了相同的两个票据,她还是不能解密。
(5) 爱丽丝发送带有用KA-B加密的时间戳的鲍勃的票据。
(6) 鲍勃通过在时间戳上加1来证实他已经接收了。这个信息用KA-B加密并发送给爱丽丝。
15.2.3 不同服务器的运用
注意,如果爱丽丝需要从不同的服务器上接受服务,她只要重复最后的四步就可以了。前两步已经确认了爱丽丝的身份,不需要重复。爱丽丝可以要求TGS通过重复第三步到第六步,为多重服务器发行票据。

图15-8 Kerberos示例
15.2.4 Kerberos第五版
第四版和第五版的微小区别如下:
(1) 第五版有一个长的终生票据。
(2) 第五版允许票据更新。
(3) 第五版可以接收任何对称密钥算法。
(4) 第五版使用不同的协议描述数据类型。
(5) 第五版的费用比第四版要高。
15.2.5 领域
Kerberos允许AS和TGS的全球分配,把每一个系统称为一个领域。用户可能得到一个本地服务器的票据,也可能得到一个远程服务器的票据。如:在第二种情况下,爱丽丝也许会要求其本地TGS发行可被远程TGS接收的票据。如果远程TGS在本地TGS上注册过,本地TGS就可以发行这个票据。那么爱丽丝就可以用远程TGS来访问远程的真实服务器。
15.3 对称密钥协定
不使用KDC,爱丽丝和鲍勃就可以在他们之间创建一个会话密钥。这种创建会话密钥的方法就称为对称密钥协议。虽然有几种方法都可以实现这一目标,但这里我们只讨论两种最普通的方法:Diffie-Hellman 协议和站对站协议。
15.3.1 Diffie-Hellman密钥协定
在Diffie-Hellman协议中,两个机构不需要使用KDC,就可以创建一个对称会话密钥。在创建对称密钥之前,这两个机构要选择两个数p和g。第一个数p,是一个有300个十进制数位(1024比特)的大的素数。第二个数g,是一个在群当中p ??1阶的生成元。这两个(群和生成元)都不是保密的。他们可以通过因特网发送,也可以公开。图15-9所示,就是这一过程。

图15-9 Diffie-Hellman方法
步骤如下:
(1) 爱丽丝选择一个大的随机数x,使得0 ? x ? p ??1,并算出R1 = gx mod p。
(2) 鲍勃选择另一个大的随机数y,使得0 ? y ? p ??1,并算出R2 = gy mod p。
(3) 爱丽丝发送R1给鲍勃。注意,爱丽丝不发送x的值,只发送R1。
(4) 鲍勃发送R2给爱丽丝。也要注意,鲍勃不发送y的值,只发送R2。
(5) 爱丽

丝算出K = (R2)x mod p。
(6) 鲍勃也算出K = (R1)y mod p。
K是会话的对称密钥。

鲍勃算出了K = (R1)y mod p = (gx mod p)y mod p = gxy mod p。爱丽丝算出了K = (R2)x mod p = (gy mod p)x mod = gxy mod p。鲍勃不知道x的值,爱丽丝也不知道y的值,但是两个人求出来的值是相同的。
在Diffie-Hellman方法中,对称(共享)密钥是K = gxy mod p。
例15.1
我们用一个普通的例子来清楚地说明这一过程。在这个例子中,我们用小数字,但是要注意,在实际情况中,数字是非常大的。假定g = 7 和 p = 23。步骤如下:
(1) 爱丽丝选择x = 3并算出R1 = 73 mod 23 = 21。
(2) 鲍勃选择y = 6并算出R2 = 76 mod 23 = 4。
(3) 爱丽丝发送数字21给鲍勃。
(4) 鲍勃发送数字4给爱丽丝。
(5) 爱丽丝算出对称密钥K = 43 mod 23 = 18。
(6) 鲍勃算出对称密钥K = 216 mod 23 = 18。
爱丽丝的K值和鲍勃的K值是相同的:gxy mod p = 718 mod 35 = 18。
例15.2
我们再给出一个更实际的例子。我们用一个程序创建一个512比特(理想位数是1024比特)的随机整数。整数p是一个159位的数。我们选择g、x和y如下所示:

p 764624298563493572182493765955030507476338096726949748923573772860925
235666660755423637423309661180033338106194730130950414738700999178043
6548785807987581 g 2 x 557 y 273
下面就表示出了R1、R2和K的值。
R1 844920284205665505216172947491035094143433698520012660862863631067673
619959280828586700802131859290945140217500319973312945836083821943065 966020157955354 R2 435262838709200379470747114895581627636389116262115557975123379218566
310011435718208390040181876486841753831165342691630263421106721508589 6255201288594143 K 155638000664522290596225827523270765273218046944423678520320400146406
500887936651204257426776608327911017153038674561252213151610976584200 1204086433617740
1. Diffie-Hellman的分析
Diffie-Hellman的概念,如图15-10所示,既简单又精密。我们可以认为爱丽丝和鲍勃之间的密钥是由三部分组成的:g, x 和 y。第一部分是公开的,人人都知道这个密钥的1/3,g是一个公开的值。另外两个部分必须要由爱丽丝和鲍勃往上加。他们每人加一部分。爱丽丝加x作为鲍勃的第二部分;鲍勃加y作为爱丽丝的第二部分。如果爱丽丝从鲍勃那里收到全密钥的2/3,她就把最后的部分,她的x,加上去完成密钥。如果鲍勃从爱丽丝那里收到全密钥的2/3,他就把最后部分,他的y,加上去完成密钥。注意,虽然爱丽丝手上的密钥由g, y 和 x组成,鲍勃手上的密钥由g, x 和y组成,但因为gxy = gyx,这两个密钥是相同的。

图15-10 Diffie-Hellman概念
也要注意,虽然两个密钥相同,因为计算是在模p中进行,爱丽丝不

能求出鲍勃使用的y值;爱丽丝从鲍勃那里收到的是gy mod p,不是gy。为了要知道y的值,爱丽丝必须要用前一章中讨论过的离散对数。
2. Diffie-Hellman的安全性
Diffie-Hellman密钥交换易受两种攻击:离散对数攻击和中间相遇攻击。
离散对数攻击 密钥交换的安全性基于离散对数问题的困难性。伊夫可以拦截R1和R2。如果她能从R1 = gx mod p 求出x,从 R2 = gy mod p求出y,那么她就可以计算出对称密钥K = gxy mod p。密钥就不再是秘密了。为了使Diffie-Hellman能够抵抗离散对数攻击,推荐采取以下措施。
(1) 素数p必须要非常大(多于300个十进制数位)。
(2) 素数p的选择必须要使得p ??1具有至少一个大的素因子(多于60个十进制数位)。
(3) 生成元必须要从群中选择。
(4) 鲍勃和爱丽丝算出对称密钥后,必须立即销毁x 和 y。x 和 y的值只能使用一次。
中间人攻击 该协议还有一个缺陷。伊夫不需要求出x 和 y的值,就可以攻击这个协议。她可以创建两个密钥来欺骗爱丽丝和鲍勃:一个是她和爱丽丝之间的,另一个是她和鲍勃之间的。图15-11所示,就是这种情况。

图15-11 中间相遇攻击


可能发生如下过程:
(1) 爱丽丝选择x,计算出R1 = gx mod p,并发送R1给鲍勃。
(2) 入侵者伊夫拦截R1。她选择z,计算出R2 = gz mod p,并发送R2给爱丽丝和鲍勃。
(3) 鲍勃选择y,计算出R3 = gy mod p,并发送R3给爱丽丝。R3被伊夫拦截并没有到达爱丽丝那里。
(4) 爱丽丝和伊夫算出K1 = gxz mod p,这就成为了爱丽丝和伊夫之间的共享密钥了。然而,爱丽丝却认为这是她和鲍勃之间的共享密钥。
(5) 伊夫和鲍勃计算出K2 = gzy mod p,这就是伊夫和鲍勃之间的共享密钥,然而,鲍勃认为这是他和爱丽丝之间共享的密钥。
也就是说,创建了两个密钥,而不是一个:一个是爱丽丝和伊夫之间的,一个是伊夫和鲍勃之间的。如果爱丽丝发送用K1加密的数据给鲍勃(爱丽丝和伊夫共享),那这个数据就可以被伊夫解密并读出其内容。伊夫可以发送一个用K2(伊夫和鲍勃共享)加密的信息给鲍勃,她甚至可以改变信息或干脆发送一个新的信息。鲍勃被欺骗从而相信信息是来自爱丽丝的。相似的情形也可以在另一个方向上对爱丽丝发生。
因为伊夫出现在中间,并拦截了爱丽丝发送经鲍勃的R1,以及鲍勃发送给爱丽丝的R3,这就称为中间相遇攻击(man-in-the-middle attack)。因为和一个志愿者之间依次传递水桶的队列相似,也称为水桶队列攻击(bucket brigade attack)。接下来的方法是基于Diffie-Hellman的,用验证来阻止这种攻击。
15.3.2 站对站密

钥协定
站对站密钥协定是基于Diffie-Hellman的一种方法。它使用带有公钥证书(参看后面这一部分)的数字签名,在爱丽丝和鲍勃之间建立会话密钥,如图15-12所示。
下面就是这种方法的步骤:
● 算出R1后,爱丽丝把R1发送给鲍勃(图15-12中的第一步和第二步)。
● 算出R2和会话密钥后,鲍勃把爱丽丝的ID、R1与R2连接起来。然后他用他自己的私钥为结果签名。鲍勃现在把签名、R2和他自己的公钥证书发送给爱丽丝。签名用会话密钥来加密(图15-12中的第三步、第四步和第五步)。
● 如果鲍勃的数字签名已经验证,会话密钥也已经算出,爱丽丝就把鲍勃的ID、R1与R2连接起来。然后她就用她自己的私钥在结果上签名,并发送给鲍勃。签名用会话密钥加密(图15-12中的第六步、第七步和第八步)。
● 如果爱丽丝的签名已被验证,鲍勃就把会话密钥保存起来(图15-12中的第九步)。
站对站协议的安全性
站对站协议避免了中间相遇攻击。拦截R1后,伊夫不能发送她自己的R2给爱丽丝,因为伊夫不能伪造鲍勃用来创建数字签名的私钥,也不能假装R2是来自鲍勃的。鲍勃的数字签名,不能用证书当中确定的鲍勃的公钥进行验证。同样,伊夫不能伪造爱丽丝的私钥来为爱丽丝发送的第三个信息签名。因为我们在本书后面将要了解到,证书是由可信的权威机构发布的,所以这些证书也是可信的。

图15-12 站对站密钥协定方法
15.4 公钥分配
在非对称密钥加密中,人们并不需要知道对称共享密钥。如果要发送一个信息给鲍勃,爱丽丝只要知道鲍勃的公钥,这个公钥是公开的人人可用的。如果鲍勃要发送一个信息给爱丽丝,他只要知道爱丽丝的公钥,这个公钥也是公开的人人可用的。在公钥加密中,任何人都要保密私钥,公开公钥。
在公钥加密中,每个人都要访问别人的公钥;
公钥对任何人都是可用的。
公钥和密钥一样,需要分配才有用。我们简单讨论一下公钥分配的方法。


15.4.1 公钥公布
公开公布公钥是一种幼稚的方法。鲍勃可以把他自己的公钥放在他的网站上,也可以在本地或国家级的报纸上公布。如果爱丽丝要发送一个保密信息给鲍勃,她就要从网站或报纸上获得鲍勃的公钥,甚至还可以发信息索取。如图15-13所示,就是这种情况。
然而,这种方法并不安全,还易被伪造。例如,伊夫可以做公开宣告。在鲍勃进行抵制之前,这种破坏就完成了。伊夫可以欺骗爱丽丝,让她发送她准备发给鲍勃的信息。伊夫也可以用相关的伪造私钥在一个文件上签名,使人们都相信这是由鲍勃签名的。如果爱丽丝

直接请求鲍勃的公钥,这种方法也易受到攻击。伊夫可以拦截鲍勃的应答,并用她自己伪造的公钥代替鲍勃的公钥。
15.4.2 可信中心
更为安全的方法是要有一个保留公钥目录的可信中心。这种目录,像电话系统的目录一样,是自动升级的。每个用户都可以选择一个公钥或私钥,把私钥保存起来,把公钥发出去插入公钥目录中。中心请求每个用户在该中心注册,并证明他或她的身份。该目录还可以被可信中心公开。中心也可以对有关公钥的任何询问作出应答。图15-14表示了这一概念。

图15-14 可信中心
15.4.3 可信中心的控制
如果对公钥分配有更多的控制,就可以获得更高的安全性。公钥公布可以包括时间戳和被权威机构签署,以避免应答被拦截或修改。如果爱丽丝需要知道鲍勃的公钥,她可以向中心发送一个包含鲍勃姓名和时间戳的请求。中心用鲍勃的公钥、原请求和用中心的私钥签名的时间戳应答。爱丽丝用人人都知道的中心公钥验证时间戳。如果时间戳已经核实,她就提取鲍勃的公钥。如图15-15就表明了这一过程。

图15-15 可信中心的控制
15.4.4 认证机关
如果请求的数字是大的,前面的方法就会给中心增加一个重担。可选择的办法就是创建一个公钥证书(public-key certificate)。鲍勃有两个要求:他要别人知道他的公钥,他还需要别人不接受伪造的他的公钥。鲍勃可以求助于认证机关(CA),这是一个把公钥和实体捆绑起来并发行证书的组织或联盟。CA本身就有一个非常出名的不能伪造的公钥。CA查验鲍勃的身份(运用ID图和一些别的证据)。然后他请求鲍勃的公钥并把它写在证书上。为了避免证书本身被伪造,CA用它自己的私钥在证书上签名。现在鲍勃可以上传这个签了名的证书。想要鲍勃公钥的任何人,都可以下载这个签了名的证书,并运用中心的公钥提取鲍勃的公钥。图15-16就表明了这个概念。

图15-16 认证机关
15.4.5 X.509
虽然CA的使用解决了公钥欺骗的问题,但是它本身也有副作用。每个证书也许会有不同的格式,如果爱丽丝要运用一个程序自动下载不同的证书,以及属于不同人的摘要,程序也许还做不到这一步。一个证书的公钥可能具有这种或那种不同的格式。公钥也许就在某个证书的第一行信息上,或者在另一个证书的第三行信息上。任何要普遍使用的东西必须要有一个普遍适用的格式。
为了消除这些副作用,ITU已经设计出了X.509,一个稍作改变后已经被因特网采用的建议。X.509是一种从结构方面描述证书的方法。它使用一个著名的协议,称为ASN.1(抽象语法符号1),该协议详细说明了与C程序相似的

一些域。
1. 证书
图15-17表明了证书的格式。
A证书具有如下的域:
● 版本号 这个域确定X.509的证书的版本。版本号从0开始,当前版本(第三版)是2。
● 序列号 这个域确定分配给每个证书的号。这个值对每个证书的发行者来说是唯一的。
● 签名算法ID 这个域鉴别用来在证书上签名的算法。签名所需要的任何参数也要在这个域中确定。

图15-17 X.509证书格式
● 发行者名称 这个域鉴别发行证书的认证机构。名称通常是一个分层的系列,要确定所在的国家、州(省)、组织、部门等等。
● 有效期 这个域确定证书有效的最早时间(不是以前)和最晚时间(不是以后)。
● 主体名称 这个域确定公钥所属主体。它也是个分层的系列。该域的部分是确定被称为普通名称的东西。这就是密钥持有者的实际名称。
● 主体公钥 这个域确定持证人的公钥,是证书的灵魂。这个域也确定相关的公钥算法(例如RSA)及其参数。
● 发行者唯一标识符 如果发行者唯一标识符是不同的,这个可选的域就允许有两个发行者具有相同的发行者域值。
● 主体唯一标识符 如果主体唯一标识符不同,这个可选的域就允许有两个不同的主体具有相同的主体域值。
● 扩展 这个可选的域允许发行者在证书上附加更多的私人信息。
● 签名 这个域是由三个部分组成的。第一个部分包含证书中所有其他的域。第二部分包含用CA公钥加密过的第一部分的摘要。第三部分用来创建第二部分的算法标识符。
2. 证书更新
每个证书都有有效期。如果一个证书没有问题,那么CA在该证书失效之前,就要发行一个新的证书。这个过程就像信用卡公司更新信用卡一样,信用卡持有者通常在旧卡失效之前,就能得到一个更新了的信用卡。
3. 证书撤销
在某些情况下,证书在失效之前必须要废除。这里就是几个例子:
(1) 用户的(主体的)私钥(和列入证书的公钥对应)可能已经形成。
(2) CA不再愿意证明用户。例如,用户的证书与一个他不再为之工作的组织相联系。
(3) 可以用来验证证书的CA的私钥也许已经形成。在这种情况下,CA就需要废除所有尚未过期的证书。
可以通过定期发布证书撤回列表(CRL)来完成证书的撤回。这个列表包含所有在CRL发布时,尚未过期但已撤回的证书。如果用户要使用证书,她首先要查看相应CA的最新证书撤回列表目录。图15-18所示,就是证书撤回列表。

图15-18 证书撤回格式
证书撤回列表具有以下域:
● 签名算法ID 这个域与证书的域是相同的。
● 发行者名称 这个域与证书的域是相同的。
● 本次

升级日期 这个域确定列表释放的时间。
● 下次升级日期 这个域确定释放新列表的下一个日期。
● 撤回证书 这是一个虽未过期但已撤回的证书的重复的列表。每个列表包含两部分:用户证书序列号和撤回日期。
● 签名 这个域与证书列表中的域相同。
4. 三角撤回
为了使撤回更有效,我们引入了三角证书撤回列表(三角CRL)。如果在本次升级日期之后和下次升级日期之后有变化,就创建一个三角CRL并张贴在目录上。例如,如果CRL每月发布一次,但是在此期间有撤回,如果在这个月内有改变,CA就可以创建一个三角CRL。不过一个三角CRL只包含最新CRL之后的改变。
15.4.6 公钥基础设施(PKI)
公钥基础设施(PKI)是一种基于X.509的创建、分配和撤回证书的模式。因特网工程任务组(参看附录B)已经创建了一个公钥基础设施X.509 (PKIX)。
1. 职责
PKI的几种职责已经确定。最重要的几项如图15-19所示。

图15-19 PKI的某些职责
● 证书的发行、更新和撤回 这是在X.509中确定的职责。因为PKIX是基于X.509的,它要管理与证书有关的所有职责。
● 密钥的储存和升级 PKI应该是私钥的储存地,这些成员无论在什么地方,都需要安全地持有私钥。此外,PKI有责任应成员的要求升级这些密钥。
● 为其他协议提供服务 正像我们在后面几章将要了解到的那样,一些因特网安全协议,像IPSec 和 TLS,依赖于PKI所提供的服务。
● 提供访问控制 PKI可以在不同的层次上,提供对储存在数据库中的信息的访问。例如,某个组织的PKI可能对该组织的高层管理人员提供全部数据库的访问,而对雇员只提供有限的访问。
2. 可信模式
让一个CA为世界上的所有用户发行证书是不可能的。应当有许多个CA,每一个负责有限数量证书的创建、储存、发行和撤回。可信模式(trust model)制定了一些规则,这些规则说明了用户怎样验证从CA收到的证书。
分级模式 在这种模式中,有一个根是CA的树形结构。CA这个根有一个自签名、自发行的证书,它需要被为该系统工作的其他CA和用户信任。图15-20表示出了分三级的这类可信模式。在实际情况中,级数可以多于三级。
该图表明CA(根)已经在CA1、CA2 和 CA3的证书上签了名;CA1又在用户1、用户2和用户3的证书上签了名等。PKI用下列符号表示由机构X为实体Y发行的证书。

例15.3
表示出如果用户1只知道CA(根)的公钥,怎样才能获得用户3公钥的验证副本。

图15-20 PKI分级模式
解答
用户3把一系列证书CA<> 和 CA1<>发给用户1。
(1) 用户1用CA的公钥确认CA<>。
(2) 用户1从CA<>

中提取CA1的公钥。
(3) 用户1用CA1的公钥确认CA1<>。
(4) 用户1从CA1<>中提取用户3的公钥。
例15.4
一些网页浏览器,如Netscape 和 Internet Explorer,包含一些来自独立根的一系列证书,这些独立根并没有经过一个高级别的权威机构一一验证。在Internet Explorer的“工具”/“Internet选项”/“内容”/“证书”/“受信任的根证书颁发机构”/可信根(使用下拉菜单)中,我们可以找到这些根的列表。然后,用户可以选择任意一个根来查看证书。
网格模式 这种分级模式也许会在一个组织或一个小的团体中使用。一个大的团体要把几个分级结构连接起来。有一种方法就是用网格模式把根连接在一起。在这种模式中,每一个根都和每一个别的根相连接。如图15-21所示。
图15-21表明网格结构只是把根连接起来了,每个根都有一个自身的分级结构,是用一个三角形表明的。根与根之间的证书是交叉证书,每个根都可以证明所有别的根,这就表明有N (N ??1)个证书。图15-21中,有4个节点,所以我们有4 ? 3 = 12个证书。注意,每条双箭头线代表两个证书。
例15.5
爱丽丝在权威根1之下;鲍勃在权威根4之下。说明爱丽丝是怎样获得鲍勃的验证公钥的。
解答
鲍勃把一串证书从根4发送给鲍勃。爱丽丝查看根1的目录,找出Root1<> 和 Root1<< Root4>>证书。这个过程的运用如图15-21所示,爱丽丝可以验证鲍勃的公钥。

图15-21 网格模式
可信网 这种模式被运用在优秀密钥中,这是一种针对电子邮件的安全服务,我们将在第16章中讨论。
15.5 推荐阅读
要获得本章所述主题的细节,请参阅以下著作或网站。括号中所列各项,参阅书后的参考文献。
著作
对对称密钥和非对称密钥管理的更为深入的讨论,请参阅[Sti06]、[KPS02]、[Sta06]、[Rhe03]和[PHS03]。
网站
对于本章中讨论的主题,以下网站给予了更为详细的资料。
https://www.doczj.com/doc/443123659.html,/wiki/Needham-Schroeder
https://www.doczj.com/doc/443123659.html,/wiki/Otway-Rees
https://www.doczj.com/doc/443123659.html,/wiki/Kerberos_%28protocol%29
https://www.doczj.com/doc/443123659.html,/wiki/Diffie-Hellman
https://www.doczj.com/doc/443123659.html,/rfc/rfc2631.txt

15.6 关键术语
验证服务器(AS)( authentication server (AS)) 公钥证书(public-key certificate) 水桶队列攻击(bucket brigade attack) 公钥基础设施(PKI)( public-key infrastructure (PKI)) 认证机关(CA)( certification authority (CA)) 会话密钥(session key) Diffie-Hellman协议(Diffie-Hellman protocol) 站对站协议(station-to-station protocol) Kerberos 票据(ticket) 密钥分配中心(KDC)( key-distribution center (KDC)) 票据许可服务器(TGS)( ticket-granting server (TGS)) 中间相遇攻击(ma

n-in-the-middle attack) 可信模式(trust model) Needham-Schroeder协议
(Needham-Schroeder protocol) X.509 Otway-Rees协议(Otway-Rees protocol) 15.7 概要
● 对称密钥密码需要双方的共享密钥。如果有N个人彼此之间需要通信,就要有N(N ??1)/2把密钥。不仅密钥的数量是个问题,密钥的分配也是个问题。
● 一个切实可行的解决办法就是运用可信的第三方,称为密钥分配中心(KDC)。一个KDC可以运用爱丽丝、鲍勃与中心的密钥,在爱丽丝和鲍勃之间创建一个会话(临时)密钥。爱丽丝和鲍勃的密钥,用来进行从爱丽丝和鲍勃到中心的验证。
● 提出几种不同的方法,这些方法可以运用第14章中讨论的实体验证的概念,创建会话密钥。有两个最精密的方法,一个是Needham-Schroeder协议,该协议是许多其他协议的基础,另一个就是Otway-Rees协议。
● Kerberos 既是一个验证协议也是一个KDC。几种系统,包括Windows 2000也用Kerberos。在Kerberos协议中,涉及三种服务器:一个验证服务器(AS)、一个票据许可服务器(TGS)和一个真实(数据)服务器。
● 爱丽丝和鲍勃不使用KDC,就可以在他们之间创建一个会话密钥。这种创建会话密钥的方法就称为对称密钥协定。我们讨论了两种方法:Diffie-Hellman协议和站对站协议。前者容易遭受中间人攻击,后者则不。
● 公钥和私钥一样也需要分配才能起作用。认证机关(CA)提供作为拥有公钥的证据的证书。X.509是一个推荐,可以确定由CA发行的证书的结构。
● 公钥基础设施(PKI)是一个基于X.509的创建、分配和撤回证书的模型。因特网工程任务组创建了公钥基础设施X.509 (PKIX)。PKI的职责包括证书发行、私钥储存、对别的协议的服务和访问控制。一个PKI也可以确定可信模型以及认证机关之间的关系。本章中提到的三种可信模型是分级可信模型、网格可信模型和web可信模型。
15.8 习题集
复习问题
1. 列举出KDC的职责。
2. 定义会话密钥并说明KDC是怎样在爱丽丝和鲍勃之间创建会话密钥的。
3. 定义Kerberos并命名它的几种服务器。简要说明每种服务器的职责。
4. 定义Diffie-Hellman协议及其用途。
5. 定义中间人攻击。
6. 定义站对站协议并举出其用途。
7. 定义认证机构(CA)与公钥加密的关系。
8. 定义X.509推荐并陈述其用途。
9. 列举出PKI的职责。
10. 定义可信模式并提出本章中讨论过的该模式的一些变化形式。
练习
11. 图15-4中,如果鲍勃的票据在第二步中不用KB加密,而是在第三步中用KAB加密,会怎样?
12. 为什么在Needham-Schroeder协议中,要有四个nonce?
13. 在Needham-Schroeder协议中,KDC怎样验证爱丽丝?KD

C怎样验证鲍勃?爱丽丝怎样验证KDC?鲍勃怎样验证KDC?爱丽丝怎样验证鲍勃?鲍勃怎样验证爱丽丝?
14. 你能解释在Needham-Schroeder协议中,爱丽丝是与KDC联系的机构,而在Otway-Rees协议中,鲍勃是与KDC联系的机构吗?
15. 在Needham-Schroeder协议中,有四个nonce(RA, RB, R1 和 R2),而在Otway-Rees协议中,只有三个nonce(RA, RB和R)。你能解释为什么在第一个协议中要有一个额外的nonce R2吗?
16. 在Kerberos中,我们只需要一个时间戳,而在Needham-Schroeder协议中要有四个nonce,在Otway-Rees协议中要有三个nonce。原因是什么?
17. 在Diffie-Hellman协议中,g = 7, p = 23, x = 3和y = 5。
a. 对称密钥的值是多少?
b. R1和R2的值是多少?
18. 在Diffie-Hellman协议中,如果x和y的值相同,也就是爱丽丝和鲍勃偶然地选择了相等的数,会怎样?R1和R2相同吗?爱丽丝和鲍勃算出的会话密钥的值相同吗?举例证明你的结论。
19. 在一个普通的(不安全的)Diffie-Hellman密钥交换中,p = 53。求出g的适当值。
20. 在站对站协议中,说明如果从签名中取消接收者的身份,为什么协议就容易遭受中间相遇攻击。
21. 讨论由浏览器提供的根证书的可信性。
第Ⅲ部分 完整性、验证和密钥管理

第15章 密 钥 管 理

408


409







相关主题
文本预览
相关文档 最新文档