分布式安全性.doc_第1页
分布式安全性.doc_第2页
分布式安全性.doc_第3页
分布式安全性.doc_第4页
分布式安全性.doc_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

分布式安全性 只要有人讨论起分布式计算,最先提出的问题之一就是“这样安全吗?”。计算机的安全性通常包括两个部分:认证和访问控制。认证包括对有效用户的确认和识别。而访问控制则致力于避免对数据文件和系统资源的有害篡改。在一个孤立、集中、单用户系统中(例如一台PC),通过锁上存放计算机的房间并将磁盘锁起来就能够实现其安全性。因此只有拥有房间和磁盘钥匙的用户才能访问系统资源和文件。这就同时实现了认证和访问控制。因此,安全性实际上就相当于锁住计算机和房间的钥匙。 在多用户组成的孤立、集中系统中,安全性稍显复杂。在这种情况下,认证包括了有效用户的确认和识别,通常通过某种形式的口令和用户识别的结合来进行管理。对于文件、数据和资源的访问控制可以避免有害的篡改,一般通过权限或访问列表来实现,并作为操作系统的一部分进行管理。 在本章中我们发现,与前面的几种情况一样,当我们将系统与其他系统所组成网络连接时,认证和访问控制再次成为我们主要的关注对象。虽然认证和访问控制被认为是由操作系统维护的任务,但是分布式访问控制却可以通过路由器和应用程序软件来管理。而且,由于我们使用外部的共享资源(网络)来进行通信,因此我们还需要保护这些内容,并验证这些通过网络发送的信息的发送者身份,为此我们分别使用了密码系统和数字签名。 虽然分布式安全性仍然是非常活跃的研究领域,但是现在的技术已经足以使我们理解安全性问题的基础以及适用于分布式操作系统的多种解决方案。在11.1节中,我们讨论了多种密码类型,包括它们在数字签名中的使用。11.2节介绍了两种普通的认证方法,11.3节介绍了多种分布式系统中访问控制方式。另外,在本章中所讨论的这些方法也可以用作集中系统所常用的必要认证和访问控制技术,集中系统中的一部分技术在第8章中加以介绍。 11.1 密码和数字签名 虽然计算机用户偶尔会希望通过加密的方式保护单台计算机系统中的信息,但是很多用户希望并要求对网络中的通信进行加密。加密包括使用密钥对数据进行编码,从而使偷听者无法方便的阅读这些数据。经过加密的数据称为密文,原始的数据成为明文。从密文到明文的转换过程称为解密。图11.1描述了Alice和Bob通过Caesar密码方式进行的通信,这里的Alice和Bob常用来表示密码通信的双方。Caesar密码是一种替换数据的简单密码系统;在这种情况下,每个字母用其后面的第三个字母代替。评估一种加密算法安全性的最常用的方法是判断该算法是否是计算安全的。如果利用可用资源进行系统分析后无法攻破系统,那么这种加密算法就是计算安全的。目前,有两种常用的加密类型:私钥加密和公钥加密。除了加密整条消息以外,两种加密类型都可以用来对一个文档进行数字签名。11.1.1节讨论了对称加密,并以DES为例。11.1.2讨论了非对称加密,并以RSA为例。当使用一个足够长的密钥时,上述两个例子都是计算安全的。 Figure 11.1 Alice 和 Bob 使用密码。 11.1.1 对称加密 对称加密指的是加密和解密算法都使用相同密钥的加密算法。具体如下: E(p,k)=C ;D(C,k)=p 其中 E = 加密算法, D = 解密算法, p = 明文(原始数据), k = 加密密钥,C = 密文。 由于在加密和解密数据时使用了同一个密钥,因此这个密钥必须保密。这样的加密也称为秘密密钥加密,或常规加密。很显然,这类系统的难点之一是传送密钥!一种克服这种密钥交换问题的简单途径是首先使用公钥加密来交换密钥,然后利用私钥解密。Detail Box 11.4描述了一种用于交换密钥的公钥加密Diffie-Hellman密钥交换算法。这种方法也非常实用,因为DES加密通常在接近45,000kbps的速度下运行,而公钥密码则在20kbps下运行。现在我们开始讨论一种最常用的私钥加密算法DES(读作DEZ),该算法被国家标准技术研究所(NIST)1在1977年定为美国标准NIST77。其他的私钥加密算法包括IDEALai92和Skipjack(用在Clipper chip中)NIST94a。 数据加密标准 1977年,DES成为一个标准,以后每五年进行一次再验证,这通常在12月份进行。所有的美国联邦机构和其他处理信息的组织为了各自的利益都必须使用DES(用于非机密文档)。在非政府公司中,DES也得到了广泛的使用。这个算法基于IBM的LUCIFER系统,该系统使用128位的密钥。通常,密钥越长,系统越安全。DES使用64位密钥;但是其中8位用于错误检测,因此实际上从安全性角度看DES是个56位的密钥系统。由于该加密系统以64位的二进制数据为一组进行加密,因此它也被称为分组密码。DES的安全性取决于密钥的保密,而不是算法的保密。通过密钥的长度可以进一步增强安全性,因为存在着7亿亿(70,000,000,000,000,000)种可能的密钥;因此推断密钥的可能性很小,足以保护大部分分布式环境。当然,随着普通PC的能力持续提高,连续搜索密钥和破译代码的能力也成比例的提高。该加密算法有三个阶段,在图11.2中进行了描述。解密是通过逆序执行这三个阶段来实现的,包括逆序使用阶段2中所提到的密钥分组(从K16到K1)。 图11.2 DES的三个阶段。 DES 阶段1:初始置换 DES的第一阶段包括64位分组的置换,改变每个分组中位的顺序。术语置换使用其严格的数学意义;只改变了顺序。在下面的表格中具体给出了这个置换(参加Detail Box 11.1)。这64位数据现在被分成两半:L0(左半部分)和R0(右半部分)。下标0说明是原始的数据。在DES算法第二阶段的每次循环后,这些下标加1。 Detail Box 11.1 DES置换 表11.1中描述了这个表格,DES标准使用这个表格来进行初始置换NIST77。因此,在置换后的第1位是置换前的第58位。在置换后的第2位是置换前的第50位。置换后数据的最后一位在最初是明文中的第7个数据位。 表 11.1 DES初始置换 NIST77. 58504234261810260524436282012462544638302214664564840322416857494133251791595143352719113615345372921135635547393123157DES 阶段2: 移位(重复16次) 第二阶段包括一种根据密钥,并且依赖于表格的算法。这种操作通常被称为数据移位。这个算法要重复16次,但由于每次移位都使用密钥的不同子分组,因此每次移位的操作各不相同。密钥的子分组由另一组表格和表格的移位算法来确定。在每次循环以后,L(左半部分)和R(右半部分)的下标依次加一,用来表示每个阶段,如图11.2所示。第16次循环的结果被称为预输出,并传送到第3阶段。NIST77列有这些表格和各种算法。DES阶段 3: 逆序置换 DES的最后一个阶段包括64位分组的置换,改变每个分组中位的顺序,这与第1阶段的操作类似,只是前后者使用不同的表格。在下面的表格中具体给出了这个置换(参加Detail Box 11.2)。这次置换的输出结果就是密文。Detail Box 11.2 DES 逆序置换表11.2中描述了这个表格,DES标准使用这个表格来进行最后的逆序置换NIST77。因此,在置换后的第1位是预输出的第40位。在置换后的第2位是预输出的第8位。而密文的最后一位是预输出的第25个数据位。Table 11.2 DES 逆序置换NIST77. 408481656246432397471555236331386461454226230375451353216129364441252206028353431151195927342421050185826331419491757253DES 人们可以利用3DES来增强DES的安全性。3DES使用三个64位的密钥。利用第一个密钥,这些数据通过DES的三个阶段的计算得到了C1。然后利用第二个密钥,C1经过DES三个阶段的计算得到了C2。然后利用第三个密钥,将第二个密文最后一次通过DES过程计算。下面和图11.3都对这个过程进行了描述。 E(p,k1)=C1E(C1,k2)=C2E(C2,k3)=C3 其中 E是DES加密算法, Ki是第i个密钥, p是原始的明文, C3是最终的密文。 图 11.3 3DES. 使用对称密钥加密的数字签名 在通过网络发送数据的过程中,有两种对文档进行数字签名的基本方法。在这里我们讨论第一种方法,利用私钥加密法。数字签名也称为消息摘要,它使用NIST93B中所描述的安全哈希函数。这个哈希函数被称为摘要函数,通常长度为128位。确定性的摘要函数应用到整个文档中,并根据消息中的每一位信息产生一个值。有两种方法可以利用共享的私钥来计算摘要。最简单、快捷的方法是计算消息的哈希值,然后通过私钥对这个数值进行加密。然后消息和已加密的摘要一起发送。接收者可以再次计算消息摘要,对摘要进行加密,并与接收到的加密摘要进行比较。如果这两个加密摘要相同,那就说明该文档没有被改动。第二种方法将私钥应用到消息上,然后计算哈希值。这种方法的结果如下: 计算 D(M,K) 其中 D 是摘要函数M 是消息K 是共享的私钥 然后可以发布或分发这个文档。由于第三方并不知道私钥,而计算正确的摘要值恰恰需要它,因此消息摘要能够避免对摘要值自身的伪造。在这两种情况下,只有那些了解秘密密钥的用户才能验证其完整性,所有欺骗性的文档都可以很容易的检验出来。 11.1.2 非对称加密 非对称加密包括两个密钥一个公钥和一个私钥,也称为公钥加密。如果信息使用公钥进行加密,那么通过使用相对应的私钥可以解密这些信息,过程如下。 E(p,ku)=C ; D(C,kr)=p 其中 E = 加密算法, D = 解密算法, p = 明文(原始数据),ku = 公钥, kr = 私钥, C = 密文。 如果信息使用私钥进行加密,那么通过使用其相对应的公钥可以解密这些信息,过程如下。 E(p,kr)=C ; D(C,ku)=p 其中 E = 加密算法, D = 解密算法, p = 明文(原始数据),ku = 公钥, kr = 私钥, C = 密文。 您不能使用加密所用的密钥来解密一个消息,如图11.4所示。而且,从一个密钥计算出另一个密钥从数学上来说是很困难的。私钥只有用户本人知道,因此得名。当然,如果每个人都知道这个私钥,那也就不是私钥了!公钥并不保密,可以通过公共列表服务获得,通常公钥是使用X.509(在11.2.2节中说明)实现的。公钥加密的想法最早由Diffie和Hellman于1976年DH76在密钥交换中提出的,Detail Box 11.4对此进行了说明。现在最常用的公钥加密方法是RSARSA78,下面我们将对此方法进行详细介绍。 RSA RSA是一个受专利保护的公钥加密算法,由Rivest、Shamir和Adleman在1978年开发。使用RSA有三个阶段。阶段1包括确定公钥和私钥。阶段2包括加密消息。最后,阶段3包括解密消息。在后面将详细说明这三个阶段,并在Detail Box 11.3中给出实例。 RSA 阶段 1: 确定公钥和私钥 为了确认公钥和私钥,每个用户必须完成下面6个步骤。 1. 选择两个大素数,P和Q。 2. 计算N = P * Q. 3. 计算F(n) = (P - 1)(Q - 1). Figure 11.4公钥密码学 4. 选择 e,其中 1 = e = n-1 且 GCD (e, F(n) = 1. 5. 计算d,其中 ed = 1 (mod f(n) (使用扩展的欧几里德算法) 6. 公开 d 和 n ; 这些值组成公钥。 RSA 阶段 2: 加密消息 为了使用RSA加密消息M (其中1 = M = N 1),你必须进行下列下列计算。 C=Me (Mod N) 其中 C 是你的密文。 发送 C. RSA 阶段 3: 解密密文 为了使用RSA解密密文C,你必须进行下列计算。 Cd (Mod N)=M 其中 M 是你的原始明文。 Detail Box 11.3 RSA三个阶段的实例 阶段1: 1. Alice选择 P = 5, Q = 11. 2. 因此, N = P * Q = 55. 3. F(N) = (P - 1)(Q - 1) = 40. 4. 选择 e = 7 (使用欧几里德算法验证 GCD (40 , 7) = 1 40 = 5 * 7 + 5 7 = 1 * 5 + 2 5 = 2 * 2 + 1 2 = 2 * 1 + 0 ). 5. 使用扩展欧几里德算法来确定D,它是e和f(N)的线形组合。 1 = 5 2 * 2 = 5 2 (7 1 * 5) = - 2 * 7 + 3 * 5 = - 2 * 7 + 3 * (40 5 * 7) = 3 * 40 17 * 7 因此 1 = - 17 * 7 (Mod 40) = 23 (Mod 40) 且D = 23. 阶段 2. 发送消息 M = 25 给Alice. 计算 C = Me (Mod N) = 257 (Mod 55) = 20. 阶段 3. 解密从Alice那里接收到的密文C = 20 ,其公钥是 (D = 23, N = 55). 计算 Cd (Mod N) = M = 2023 (Mod 55) = 25 = M. Detail Box 11.4 Diffie-Hellman 密钥交换 Alice和Bob可以使用下面的方法交换密钥;他们必须按照下面的7个步骤来执行Diffie-Hellman密钥交换。图11.5描述了这个实例中Alice和Bob的交换过程。 1. Alice和Bob就公开通信的素数p和一个整数a达成一致。2. Alice 生成一个随机值x: 2=x=p-1. 3. Alice 计算 ax (Mod p)=A ,并将A发送给Bob。 4. Bob 生成一个随机值y: 2=y=p-1. Figure 11.5 Diffie-Hellman 密钥交换 5. Bob 计算ay (Mod p)=B ,并将 B 发送给 Alice。6. Bob 计算 (A)y (Mod p)=(ax)y (Mod p). 7. Alice 计算 (B)x (Mod p)=(ay)x (Mod p)= (ax)y (Mod p)! 因此,(ax)y (Mod p) 是他们共同的共享密钥! 例子 1. Alice 和 Bob 达成一致,选择 p=11, a=7. 2. Alice 生成 x=5 ,其中 2=5=11-1. 3. Alice 计算 ax (Mod p) 75 (Mod 11)=10 ,并将10发送给 Bob。4. Bob 生成 y=8: 2=8=11. 5. Bob 计算 ay (Mod p)= 78 (Mod 11)=9 ,并将9发送给Alice。 6. Bob 计算 (A)y (Mod p)=(75)8 (Mod 11) = 78*5(Mod 11) 7. Alice 计算 (B)x (Mod p)=(78)5 (Mod 11)= 75*8(Mod 11)! 因此, 75*8(Mod 11) 是他们共同的共享密钥。 使用公钥加密的数字签名 用于数字签名的公钥加密使用RSA算法。 在这种方法中,发送者利用私钥通过摘要函数对整个数据文件(代价昂贵),或文件的签名进行加密。私钥匹配的最主要优点就是不存在密钥分发问题。这种方法假定你信任发布公钥的来源(参加11.3.1节)。然后接收者可以利用公钥来解密签名或文件,并验证它的来源和/或内容。回忆一下,由于公钥密码学的复杂性(图11.4)因此只有正确的公钥才能够解密信息或摘要。最后,如果你要将消息发送给拥有已知公钥的用户,那么你就可以使用接收者的公钥来加密消息或摘要,这样只有接收者才能够通过他们自己的私钥来验证其中的内容。 11.2 认证 分布式环境中的认证需要几个必须的步骤。第一步是鉴别或验证一个用户的身份。实现这一步有三种基本的方法Sha 77,WL92。第一种方法,可以通过一个用户所知道的某些信息对其进行验证,例如口令,这是最常用的方法,虽然不一定是最安全的方法。第二种方法,通过用户所拥有的某些东西对其进行验证,例如钥匙。第三种方法,通过用户本身所具备的某些特性对其进行验证,如用户的指纹或者视网膜,这是最安全也是最昂贵的方式。就上面讨论中涉及的观点来看,这些方法也都可以用在集中式系统中。一个分布式操作系统中还必须考虑以下几点。 1. 偷听:我们如何阻止别人在通信线路上进行偷听? 2. 多口令管理:如果我们正在访问多个系统,每个系统是否都保留了用户ID和口令的副本呢?每个存储认证信息的数据库都是系统安全漏洞的目标。而且,在每次我们需要作些什么的时候,是否都需要提供口令呢? 3. 重放:有人可以在认证信息在网络中传输的时候对它进行复制,即使这些信息经过了加密,然后在以后进行重放,从而获得不正当的访问。 4. 信任:认证是否应该是单方面的呢?或者用户是否也应该检验和相信使用的服务是合法的?集中系统信任它自己;分布式系统必须寻找一个方法来信任其他系统。 为了解决备受关注的通用方案可以使用一种证书管理系统。证书是一种由计算机生成并在一段时间内有效的经认证的信息包,可以用它在分布式系统中方便的访问各种资源。时间有效特性有助于避免以后的重放攻击。该特性通过时间戳或现时来实现。现时是一个随机值,对于每个会话来说都是唯一的。因此,没有两个会话会共享同一个现时,从而能够更加容易的监测到重放。有两种基本方法来进行证书管理。第一种方法在11.2.1节介绍,它包括使用证书列表,在这些列表中包含了一系列来自可靠证书颁发机构发布的证书,X.509就采用了这种方法。所有希望检验身份的服务都必须检查这个列表,检验客户端的真实性。第二种方法在11.2.2节介绍,它包括集中的证书分发中心,在那里客户端将获得适合每个想要使用的服务的证书。然后,当客户端使用服务时就提供相应的服务证书。 11.2.1 证书列表 正如11.1.2中所述,证书列表是基于公钥密码学的。用户的识别信息被称为证书,可以包含在证书列表中。验证用户身份的认证权威机构被称为证书颁发机构,它们对用户的公钥进行检验。图11.6描述了像RPC这样的服务是如何利用证书列表的。 证书是通过证书颁发机构的数字签名来认证的,如11.1节所述。可以有多个证书颁发机构。下面我们将以X.509为例讨论证书列表的工作原理。 Figure 11.6 安全的RPC中使用的证书 X.509 X.509是第7章所讨论的X.500目录服务的认证部分。这个目录服务提供了证书列表的存储位置,但假定存在可靠证书颁发机构来创建这些证书。这些证书由发行者签署(使用发行者的私钥进行加密),将证书拥有者的姓名与发布者的公钥捆绑在一起。下面就是在X.509证书中所包含的元素的列表(Version 1)。 V:版本;它用来区别X.509的各种连续的版本。默认值是1988版本。SN:序列号;序列号是一个整数值,在发行的证书颁发机构中是唯一的。序列号与证书有明确联系,就像社会安全号与美国公民或移民有明确联系。AI:算法识别符;算法识别符识别证书颁发机构用来签署证书的算法。证书颁发机构使用它的私钥对每个证书进行签名。CA:发行者或证书颁发机构;证书颁发机构是创建这个证书的机构。T$_A$:有效期;提供证书有效的起止日期,类似于信用卡的期限。A:主体;证书对他的身份进行验证。Ap:公钥信息;为证书识别的主体提供公钥和算法识别符。签名:证书签名覆盖了证书的所有其他字段。签名是其他字段的哈希代码,使用证书颁发机构的私钥进行加密,保证整个证书中信息的完整性。如果有人使用了证书颁发机构的公钥来解密这个哈希代码,同时计算了证书的哈希代码,而两者并不相同,那么证书的某一部分就肯定被非法更改了。任何具有证书颁发机构公钥的用户都可以恢复和检验证书列表中每个证书的真实性。X.509提供了三种使用证书列表的认证过程:单向认证、双向认证和三向认证。 单向认证 单向认证只保护消息的完整性和原创性。当有人使用用户签名(私钥)签署了时间戳、现时值和目标身份时,就实行单向认证。接收者可以通过使用发送者的公钥来“逆向签署”信息,从而验证信息的真实性,可以从证书列表获得发送者的公钥。由于只对目标进行认证,因此称为单向认证。 双向认证 双向认证允许发送者或发送者对接收者或目标进行验证。除了进行单向认证以外,目标会发送给发送者一个回复。回复中包括新的时间戳、原始的现时和新的现时。该回复使用发送者的公钥进行签名。回忆一下,在公钥密码学中,只有相对应的私钥或发送者的私钥才能解密这个回复。而且现时必须时原始的现时,否则这个消息就不可信。 三向认证 当目标和发送者没有同步的时钟或不希望信任时钟时,则采用三向认证。除了进行双向认证以外,发送者将对目标的回复再发送一个回复,包括在原有回复中的新现时,如图11.7所示。这里只需要验证相匹配的现时值,不再需要验证时间戳。 Figure 11.7 三向 X.509 认证 撤销证书 证书列表可能存在的问题之一就是,在证书到期前可能撤销证书。这个问题可以通过保持一个撤销列表来解决。这个列表与证书列表存放在一起,为了确保证书依然有效,必须参考这个列表。这类似于老式的信用卡簿,其中提供了一个在未到期但已无效的信用卡列表。撤销列表包括使用证书颁发机构的私钥进行数字签名的消息摘要,用来维护和确保这个列表的完整性。 使用X.509中多个证书颁发机构 另一个可能出现的问题是存在多个证书颁发机构。但是如果用户使用的证书颁发机构与你的证书颁发机构列在同一张表上,你就可以认证该用户。为了实现这个目标,你必须使用自己的认证来验证其他认证机构的身份。一旦完成这一步,你就可以获得其他认证机构的公钥,从而可以认证图11.8中所列出的其他认证机构中的用户身份。这就是所谓的连锁认证,类似于数学中的传递原则。如果Alice知道证书颁发机构1,证书颁发机构1知道证书颁发机构2,证书颁发机构2知道证书颁发机构N,而证书颁发机构N知道Steven,那么Alice就知道Steven。 图11.8 X.509中的连锁证书颁发机构. 证书类型 最后,X.509提供了不同种类的证书。每种类型的证书都进行不同程度的认证,从而反映出认证列表中认证信息的可靠性级别。 最低级别是类型1。对于1类证书,通过主体提供Email地址,颁发机构向该Email地址发送回复来验证身份。最高的级别是类型4,要求实际给出具体的材料,而认证颁发机构必须进行背景调查。X.509认证可以在协议内进行,即安全套接层(SSL),在Detail Box 11.5中有它的详细描述。 11.2.2 集中式证书分发中心 集中式证书分发主要依靠一个站点来管理所有证书的分发。从而使得证书分发中心成为分布式系统的关键组件。如果证书分发中心崩溃或受到威胁,那么整个分布式系统就会遭受损失。这个站点在证书数据库管理器中保留了所有有效用户的私钥副本和系统服务。证书分发中心使用这些私钥将系统和服务证书分发那些用户,用于所需要使用的每个服务。客户端在使用服务时必须出示服务证书。每位用户和每个服务所使用的服务证书都是唯一的。这些服务证书类似于集中系统中的性能安全性概念。因此,每个用户可以拥有多个服务证书,在使用服务时必须出示这些服务证书。服务证书只在有限的时间段内有效,并且是针对特定的服务的。如果一个用户的服务证书已经过期,那么用户必须凭用户的系统证书从证书分发中心获取一个新的服务证书。下面我们通过讨论Kerberos version 5来研究集中式证书分发中心是如何运作的。 Detail Box 11.5 安全套接层 SSL是由Netscape提出的,其主要用于保证Web页的安全通信,目前大部分浏览器都支持SSL。前不久,WinSock中也集成了SSL。Internet工程任务组(IETF)正式开发SSL的标准。它的目标是确保隐密性、完整性和真实性。浏览器中原始域的应用程序可以有所不同,这样可以提高同个项目的几个合伙公司间安全传输数据的性能,从而满足他们安全通信的需求。SSL的使用可以让两个实体在一定程度(取决于密钥长度)的安全意义上通过公共网络进行通信,而不需要重新编写很多现有的编码。这种选择比购买和利用专线连接更合算、更有效。 SSL由三个阶段组成。第一阶段是认证握手,并完成下列任务。 1. 建立双方用来通信的协议。 2. 定义加密算法。 3. 决定是否使用数据压缩。 4. 交换密钥。 5. 然后使用X.509证书(包括链接X.509证书的能力)来验证对方的身份。 第二个阶段是真正的数据通信。数据在加密后进行传输,如第一阶段所描述的。另外,每个数据分组一般还都使用DES进行数字签名。最后一个阶段简单的执行附加握手,确保双方都意识到连接正在关闭,然后最终关闭连接。由于现在美国商业限制禁止输出更长的密钥,因此SSL通常使用40位密钥。 Kerberos v.5 Kerberos是第一个广泛使用的分布式认证协议,影响了很多后来的协议,如SESAME和KryptoKnight。它可以从/pub/kerberos免费获得,并在NeTs94中有详细的描述。Kerberos的目的是提供一个可信的第三方认证系统。通过使用第三方,使得每个分布式系统中所涉及到的位置不再需要保存存储用户ID和口令的复杂数据库。实际上,Kerberos保存了一个单独的认证信息主数据库,称为Kerberos数据库管理系统(KDBM)。另外,有多个可能的Kerberos密钥分发服务对KDBM提供协助,这些密钥分发服务包括主数据库的只读副本,并且有助于避免KDBM的瓶颈。Kerberos密钥分发服务还允许系统在KDBM临时无法访问时继续工作。Kerberos系统包括下列4个阶段,这些阶段在Detail Box 11.6中进一步讨论。 阶段 0: 使用Kerberos注册 在用户建立一个会话之前,在Kerberos密钥分发中心必须首先离线建立用户的身份。当这工作完成时,用户的ID和口令就以加密形式存储在Kerberos数据库管理器中。这里,用户被认为是已注册的,并已经准备好通过Kerberos协议使用网络服务。 阶段1: 获得系统票据 用于认证的Kerberos证书称为票据。阶段1包括系统票据的获取,在阶段2中这个系统票据可以用来从票据授予服务(TGS)去获取服务票据。为了得到系统证书,用户必须使用Kerberos注册(阶段0)。所获得的Kerberos系统票据使用TGS专用私钥进行加密。系统票据中包括了客户端的鉴定信息,包括: 临时会话密钥,由TGS和客户端使用 客户端身份 TGS身份 票据有效期 客户端的网络地址 票据由Kerberos进行加密,因此只有TGS能够检验系统票据是否有效。无效的票据不能使用TGS的私钥进行加密,而且只有Kerberos和TGS知道这个私钥。系统票据、TGS身份以及Kerberos创建的会话密钥一起被发送给客户端,其中的会话密钥是由TGS和客户端使用的,并返回从客户端发送给Kerberos的现时值。如果现时值与发送给Kerberos的值相一致,那么客户端就知道这个系统票据是合法的,而且是新的。 阶段 2: 获得服务票据 为了获取一个服务票据,客户端需要将一个数据包发送给TGS,并使用客户端和TGS共享的会话密钥对这个数据包进行加密。这个数据包中包括客户端名称、网络地址、一个现时值以及客户端希望使用的服务的名称。另外,同时还发送系统票据,只是不对其进行加密。当TGS使用密钥解密系统票据后,它将系统证书中的信息与接收到的数据包中的信息进行对比。如果两个完全匹配,那么TGS就能确认这是一个有效的请求。在确认请求有效后,TGS就会为这个客户端准备一个数据包。在这个数据包中包括了使用服务私钥加密的服务票据(因此只有服务才能验证这个票据)、服务的名称、有效期以及一个现时。这个数据包使用客户和服务共享的会话密钥进行加密。如果现时值相同,客户端就知道这是一个正确的回复。我们现在就有方法可以使用Kerberos中列出的特定服务了。 Detail Box 11.6 Kerberos 认证服务V.5令 IDT = 票据授予服务的IDIDc = 客户端 IDIDs = 服务器 IDNi = 现时值Kc = 客户端私钥Ks = 应用程序服务器IDKT = 票据授予服务器的私钥K1 = 系统票据K2 = 服务票据Ts = 起始时间戳Te = 终止时间戳E(a,K) = 对a使用密钥k的加密算法应用程序。图11.9、11.10和11.11分别描述了阶段1、阶段2和阶段3。 Figure 11.9 Kerberos阶段1 的细节。 Figure 11.10 Kerberos 阶段2的细节。 Figure 11.11 Kerberos 阶段3的细节。 阶段 3: 利用间接服务 现在客户端拥有了一个服务票据,并已准备好使用服务了。这个服务票据允许服务认证或验证客户端的身份。要使用一个服务,客户端需要向服务发送一个数据包,其中包括服务票据和客户端身份。回忆一下,服务票据是使用服务的密钥加密的,包含客户端身份和时间戳。如果时间戳没有到期,而且身份相互匹配,则客户端通过认证,可以自由的使用这个服务。 11.3 访问控制 (防火墙) 虽然开放分布式系统在设计上允许信息在所有连接到网络的系统间自由流动,但是分布式操作系统必须提供访问控制,这样实际上只共享我们希望共享的信息。而且,一个系统的需求可能并不是其他系统的需求。公司可能遵循“所有没有明确被允许的都不被允许”的安全性策略,而大学或私人站点可能遵循另一个极端。具体的说就是,“所有没有被明令禁止的都是可行的。”虽然访问控制是一个操作系统的概念,但如今的分布式操作系统通常必须依赖硬件的协助。无论是哪一种情况,当今分布式系统中的访问控制一般都通过防火墙来实现。防火墙应该不受安全威胁,并应该能够阻止任何通过防火墙对其所保护系统发出的安全威胁。防火墙不应该妨碍那些符合组织安全政策的活动。防火墙通常分为以下两种:1. 包过滤网关 2. 代理服务 一个站点往往两种防火墙都实施,以此来实现理想的访问控制。我们将研究这两种基本的防火墙,并研究两种防火墙中的一些基本防火墙体系结构。11.3.1 包过滤网关包过滤网关防火墙中需要一个安全工程师,他必须详细的描述可以通过防火墙的任何信息。这包括什么样的内部信息可以通过防火墙传输出去,以及哪些外部站点可以进入并穿过防火墙。还有,安全工程师应该可以对防火墙进行配置,从而指定内部的哪些计算机设备可以与外界进行共享。包过滤网关防火墙通常放置在路由器中,该路由器连接内部系统与外部世界。普通的路由器能执行包过滤功能,但是防火墙路由器能提供更好的用户界面,而且也更容易配置成基于安全的过滤。就像通行世界的邮政服务需要在信封上标明地址,网络也要求传输的消息附上地址。这种防火墙在允许消息进出时就是对这些地址进行检查。因为所有的信息都必须通过作为防火墙的路由器,所以所有的信息都要受到防火墙的检查。表11.3描述了包过滤网关的规则。表11.3 包过滤网关规则 动作目标地址目标端口源地址源端口拒绝 E 允许F这些规则拒绝任何端口接受任何来自于并试图到达的信息或企图到网络的连接。而且,他们允许任何端口接受来自到的信息。具体语法要取决于具体的路由器及其体系结构。不管生产商是谁,建立系统的安全工程师必须明确的申明允许和不允许的事项。决定或确定这点并不容易。有些设备,例如UNIX X11窗口管理器,很有利于内部用户,可是,如果有人在内部使用X11,就不能禁止在外部不使用它。未授权的X11用户可以导致屏幕死机并记录内部用户的键盘输入,这是非常严重的安全威胁。最后,防火墙中存在的任何漏洞都可能被穿过,从而使其所保护的系统的安全性受到破坏。 11.3.2 代理服务 代理服务代表的是一个用于外界的内部客户端服务。虽然它描述的是这种服务,它并不完全是为了增强安全性。有两种基本的代理服务。 1. 应用级网关代理服务 2. 链路级网关代理服务 应用级网关路由器可以通过重写所有主要的应用程序来提供访问控制。新的应用程序驻留在所有人都要使用的集中式主机中。这个主机称为堡垒主机,这个名字起源于非常坚固的中世纪城堡,也被认为是最重要的安全点。这些主机通常是双宿主,或是驻留在多个网络中的主机。这些应用程序看上去与原来那些程序的功能一样,但是消除了安全漏洞。特别是,新的应用程序有一个小而重要的附加性能:使用了一种本章前面提过的方法进行身份认证。应用网关防火墙很好的补充了包过滤网关,而且能用来重写应用程序,如X11。 链路级网关与应用级网关的相似之处在于,它们都是设计用于个人应用程序的。但与应用级网关不同的是,它们对用户来说是透明的。特别是,外部人员可以通过TCP端口连接到网络中。在链路级网关中,防火墙提供了TCP端口并来回分发字节,这个作用就像电缆,从而不用解释应用程序协议就完成了电路。 因为链路级网关在低层实现,它们需要修改客户端程序来获得目标地址,而应用级网关不用修改就可以容易地获得目标地址。通常,修改后的客户端程序只用在外部连接中。所有的过滤操作只基于源和目标,而不使用特定命令获得其他信息。 除了分发字节,修改后的客户端程序和电路级网关保留有一个日志,记录已分发字节的数量以及TCP地址。如果已知站点有个安全问题,系统管理员可以使用日志通知那些不幸连接到崩溃站点的系统中的所有人。 11.3.3 防火墙体系结构 下面我们讨论三种基本的防火墙体系结构,其中结合了包过滤防火墙和代理服务防火墙。 堡垒主机体系结构 最简单的体系结构是堡垒主机。这种设计方案只使用堡垒主机来提供代理服务。虽然主机能够路由从一个网络到另一个网络的信息,但是并不推荐使用这个主机的特性,因为这个特性可能会被滥用,从而被他人用来绕过你的防火墙检测。所有的本地系统都被认为是内部系统。所有非本地系统都被认为是外部系统。堡垒主机是双宿主主机,驻留在内部和外部系统之间。它不在任何网络中,而作为网络间的网关。所有内部系统都可以与堡垒主机进行通信,同时所有的外部系统也都可以与同一台堡垒主机进行通信。内部系统和外部系统之间不能直接相互通信,而通过主机为它们代理服务,如图11.12所示。如果主机接收到具有内部地址的有关外部连接的信息包,那么这个包必然是伪造的。这种体系结构表现出代理服务防火墙的所有弱点,包括所可能提供服务的局限性。 Figure 11.12 堡垒主机防火墙体系结构 过滤主机体系结构 过滤主机体系结构利用堡垒主机和一台路由器,前者提供代理服务,而后者则作为屏障、提供包过滤功能。与前面的体系结构不同的是,堡垒主机驻留在内部网络中,如图11.13所示。 过滤路由器的包过滤功能将所有允许的具有内部目标的外部流量路由到堡垒主机。而且,包过滤器还被配置为只允许堡垒主机进行外部访问。如果出堡垒主机以外的其他内部主机被禁止访问包过滤路由器,那么这些内部主机为了连接到外部主机就必须使用堡垒主机提供的代理服务。因此具有强大安全性要求的站点应该可以禁止内部主机直接通过包过滤防火墙访问外部网络。 Figure 11.13 过滤主机防火墙体系结构 过滤子网体系结构 三种防火墙体系结构中最安全的就是这种过滤子网体系结构。这种结构包括2个包过滤防火墙和一个代理服务防火墙。代理服务防火墙或堡垒主机与自身网络相连接,处于两个包过滤防火墙之间。一个包过滤防火墙将堡垒主机的子网连接到外部网络。另一个包过滤防火墙将堡垒主机的子网连接到内部网络,如图11.14所示。 能够访问外部网络的子网称为过滤子网。由于在大多数局域网中,任何网络上的主机都可能“偷听”或查看所有网络中的流量,因此这种体系结构的最大优点就是在过滤子网中没有纯内部网信息。 因此,入侵者必

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论