首页 理论教育云安全深度剖析:Kerberos简介

云安全深度剖析:Kerberos简介

【摘要】:Kerberos的设计针对客户端/服务器模型,为其相互提供身份验证,并保证其协议信息不受窃听和重播攻击。Kerberos是通过一种可信任的通过传统的加密技术来执行认证的第三方认证服务。Kerberos以第三方的形式提供身份验证机制,并以主从架构及利用集中密钥控管方式,以及应用TGS,通过共享私钥的加密提供各项服务,建立安全及可靠的身份鉴别系统。2)应用服务器端,提供用户应用程序服务的Kerberos服务器端。图7-8 Kerberos身份验证过程示意步骤1:客户端向KDC请求TGT。

源自麻省理工学院的“雅典娜计划(Project Athena)”的Kerberos,是一种被业内人士公认的成熟的使用X.509公钥凭证的网络认证协议。Kerberos的设计针对客户端/服务器模型,为其相互提供身份验证,并保证其协议信息不受窃听和重播攻击。Kerberos是通过一种可信任的通过传统的加密技术来执行认证的第三方认证服务。

为了能有效地提供验证服务,Kerberos采用模块化与分布式系统架构,让系统之间能够相互支持,防止因单一系统故障而导致访问控制验证的失败。Kerberos以第三方的形式提供身份验证机制,并以主从架构及利用集中密钥控管方式,以及应用TGS,通过共享私钥的加密提供各项服务,建立安全及可靠的身份鉴别系统。

采用Kerberos与使用一般账户密码方法的不同之处在于如下几个方面:

1)由于Hadoop是分布式系统,因此通常使用Hadoop系统时不会只有一台主机用来服务,因此如果以一般的账号密码作为身份验证及访问控制时,每当需要更改密码就必须一一登入每台Hadoop系统主机更改密码,使用Kerberos验证时就可以不需要登入每台主机更改密码。

2)Kerberos验证使用Ticket实现单一登录的功能,并由用户第一次验证输入用户信息取得Ticket之后,再次使用经过Kerberos验证核查其他系统时,就可以不重复输入用户信息,可减少数据的输入工作。

3)一般使用账号密码的方式可能会有部分密码数据会传递到其他服务器中,因此会有被窃取破解的可能,使用Kerberos验证是针对系统的使用而每次产生Ticket,并会记载使用期限,即使被窃取也只能在特定范围使用,无法取得详细验证信息。

4)当应用系统需要使用许多资源时,又要使用身份验证功能保护系统安全,此时使用Kerberos身份验证可将验证工作转移到Kerberos验证服务器中,以降低应用系统服务器的资源消耗。

5)使用Kerberos实现访问控制的好处,是针对用户与应用系统两个方面都需经过Kerberos的验证,因此用户与应用系统是相互可信任的。经过Kerberos验证后,用户可以信任系统不会有被伪造的可能,所以可以放心地存取数据;此外,应用系统也可以确定用户的身份,但是使用一般的账号密码作为访问控制方式则无法达到此要求,只能单纯地验证使用者身份。

在Kerberos验证系统中共有如下四个角色:

1)客户端,提出验证需求的Kerberos使用者端。

2)应用服务器端,提供用户应用程序服务的Kerberos服务器端。

3)身份鉴别服务器(AS),作为使用者的身份鉴别并维护使用者和应用服务器之间所需验证的权限数据。

4)通行证签发服务器(TGS),用以产生客户端与应用服务器每次通信时所要使用的通信密钥(包含Session Key与Ticket)。其中身份鉴别服务器与通行证签发服务器所组成的系统称为KDC,当客户端向KDC请求与应用服务器认证时,KDC会建立两个相同的Session Key,并透过ServiceTicket的机制,安全地将Session Key分别传送给客户端与服务器,以便两者进行相互验证的工作。(www.chuimin.cn)

使用Kerberos进行身份验证的六个步骤即执行过程如图7-8所示。

978-7-111-53353-5-Chapter07-9.jpg

图7-8 Kerberos身份验证过程示意

步骤1:客户端向KDC请求TGT。客户端计算机上的Kerberos服务首先向KDC的AS发送一个Kerberos身份认证服务请求,以期获得TGS提供的服务。该请求包括自己的ID、TGS的ID及一个加密的时间戳。

步骤2:KDC发送加密的TGT和登录会话密钥。KDC会利用该用户的密钥,解密随Kerberos身份认证请求一起传送的时间戳。如果该时间戳有效,则用户是有效用户。KDC身份认证服务会创建一个登录会话密钥,并使用用户的密钥对该副本进行加密。然后,KDC身份认证服务再创建一个TGT,包括用户信息和会话密钥。同时,KDC身份认证服务使用自己的密钥加密TGT,最后,AS将客户端与KDC之间的Session Key与TGT传送给客户端。由于进行了加密,只有真正的拥有密钥的用户才能解密TGT。

步骤3:客户端利用客户端与KDC之间的Session Key与TGT向TGS请求应用服务器端的ServiceTicket(由TGS颁发)。请求信息包括用户ID、使用Session Key加密的认证符、TGT,以及用户想访问的服务和服务器名称。

步骤4:KDC确认客户端的身份后,由TGS将客户端与应用服务器端之间加密的Session Key和ServiceTicket发送给客户端。

步骤5:客户端利用客户端与应用服务器之间的Session Key来建立验证码,然后再利用验证码与ServiceTicket向应用服务器发送一个请求服务。

步骤6:服务器与客户端进行相互验证。应用服务器使用Session Key和ServiceTicket解密认证符,并计算时间戳,然后与认证符中的时间戳进行比较,如果误差在允许的范围内(通常为5min),则通过测试,服务器使用Session Key对认证符进行加密,然后将认证符(时间戳)传回到客户端。客户端用Session Key解密时间戳,如果该时间戳与原始时间戳相同,则该服务是客户端所需的,此后客户端可以进行其他操作。

当用户登录以后,TGT失效,这样就可以避免TGT被其他用户恶意使用。当客户端需要与其他服务器节点通信时,会将加密后的TGT发送给TGS。在一般的情况下,TGS和KDC是共享同一个主机的。

Kerberos的设计适合用于开放式网络或内部网络的架构,整个身份鉴别架构虽然复杂,但却是一种相当完善的验证协议。它运用集中私钥的管理方式,提供主从架构的第三方身份鉴别,尤其在验证机制中Kerberos系统具有相互验证的功能,因此加强了身份验证的可信度,更重要的是Kerberos是一个通用的标准,所以提高了与其他系统整合的兼容性