Kerberos认证协议

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Kerberos 是一种网络认证协议,其设计目标是通过密钥系统为客户机/ 服务器应用程序提供强大的认证服务。该认证过程的实现不依赖于主机操作系统的认证,无需基于主机地址的信任,不要求网络上所有主机的物理安全,并假定网络上传送的数据包可以被任意地读取、修改和插入数据。在以上情况下,Kerberos 作为一种可信任的第三方认证服务,是通过传统的密码技术(如:共享密钥)执行认证服务的。

组成结构

Kerberos是MIT为雅典娜(Athena)计划开发的认证系统。

Kerberos的组成:

Kerberos应用程序库:应用程序接口,包括创建和读取认证请求,以及创建safe message 和private message的子程序。

加密/解密库:DES等。

Kerberos数据库:记载了每个Kerberos 用户的名字,私有密钥,截止信息(记录的有效时间,通常为几年)等信息。

数据库管理程序:管理Kerberos数据库

KDBM服务器(数据库管理服务器):接受客户端的请求对数据库进行操作。

认证服务器(AS):存放一个Kerberos数据库的只读的副本,用来完成principle 的认证,并生成会话密钥。

数据库复制软件:管理数据库从KDBM服务所在的机器,到认证服务器所在的机器的复制工作,为了保持数据库的一致性,每隔一段时间就需要进行复制工作。

用户程序:登录Kerberos,改变Kerberos密码,显示和破坏Kerberos标签(ticket)等工作。

Microsoft Windows Server 2003操作系统上实现了Kerberos5身份验证协议。Windows Server2003总是使用扩展公钥身份验证机制。KerBeros身份验证客户端作为SSP(Security Support Provider)通过访问SSPI(Security Support Provider Interface)来实现身份验证。用户身份验证初始化过程被集成在Winlogon这SSO (Single Sign-On)体系中。

认证流程

客户机的最终目的是能够访问到服务器上提供给合法用户的某项服务,那么在此之前必须经过以下几个步骤(1—5必选;6在需要对服务器进行认证时使用)(1)首先客户机向Kerberos KDC中的AS(authentication server)部分申请合法身份验证,客户机向AS发送用户名称及所用TGS服务器名称,即:

user,tgs_name。

(2)AS从自己的数据库中查找用户,如果查到,则生成消息:[TGT, {client,tgs_name, K_session_tgs}K_user]。其中TGT为{client, tgs_name,

start_time, lifetime, K_session_tgs}K_tgs;client为{user,IP};K_session_tgs是AS 生成的客户机与TGS进行对话用的会话密钥,tgs_name为TGS服务器名称。

(3)合法用户用正确的口令揭开(2)中的包得到TGT,此后客户机利用TGT(而非用户名称和口令,这样可以降低口令泄密危险)来验证自己的身份。客户机需要得到服务器上的某项服务,他必须得到KDC中TGS颁发的服务票据,故客户机向TGS服务器发送一个为[TGT,验证器] 包。其中验证器为{user,IP, start_time, lifetime} K_session_tgs。验证器使用客户机与服务器(TGS本质也是一种服务器)的会话密钥加密,这样就算TGT被盗,如果他不知道会话密钥,也不会得到TGS服务器的信任。

(4)TGS服务器判断无误后返回给客户机一个包:[{K_session_server}

K_session_tgs,ST],其中K_session_server为TGS生成的用于客户机与服务器之间进行会话的密钥,ST为服务票据具体为:{client, server, start_time, lifetime,

K_session_server}K_server

(5)客户机用与TGS服务器共享的K_session_tgs揭开TGS返回包的前半部分,取出K_session_server,然后组成新包:[验证器,服务票据],此处验证器为{user,IP, start_time, lifetime} K_session_server,服务票据为{client, server, start_time, lifetime, K_session_server}K_server此包送给服务器,服务器先揭开服务票据并且检查其中参数正确后,用获得的K_session_server来解密验证器,如果最终通过,则通过服务器验证。

(6)正确的服务器应该能够返回给客户机一个消息,其中包含{client, server,start_time, lifetime} K_session_server此后客户机与服务器利用

K_session_server来进行服务数据的传递。注意客户机在TGT有效期内申请新服务时,跳过1、2步直接从第三步开始用TGT向TGS证明自己的身份。

上述认证交换过程需要只读方式访问Kerberos 数据库。但有时,数据库中的记录必须进行修改,如添加新的规则或改变规则密钥时。修改过程通过客户机和第三方Kerberos 服务器(Kerberos 管理器KADM)间的协议完成。有关管理协议在此不作介绍。另外也有一种协议用于维护多份Kerberos 数据库的拷贝,这可以认为是执行过程中的细节问题,并且会不断改变以适应各种不同数据库技术。

实现过程

下面就该协议在三类端点中的实现进行简要阐述

(1)客户端客户端与操作系统的集成可以有两种实现方式:一种称为结合式:即Kerberos的客户端与系统的login等软件集成或关联。当用户输入用户名和口令进行系统登录时,Kerberos客户端软件也得到了同样的用户名和口令。该客户端软件可以立即向Kerberos服务申请身份验证或者等到用户申请具体应用服务时再向AS申请身份认证票据TGT。第二种方式称为分离式。即客户端软件独立于操作系统,当客户端首次申请应用服务时,客户端检测缓存中是否有TGT,若有说明用户已经向Kerberos服务申请注册并验证成功;若无则要求用户输入用户名称或口令,向服务器申请TGT。用户在得到TGS服务认证后,在本地得到了TGT以及与应用服务的会话密钥,不同的应用服务对应于不同的会话密钥,因此如果用户使用文件服务器和邮件服务器,他将有一个TGT但是两个会话密钥。客户端功能中的一个子项是修改和设置用户密码。具体说,当用户由于某些原因想要更改自己密码的时候,需要向服务器证明自己身份并提交密码修改请求。这是很重要的一步,如果处理不慎,可能被他人从网络上非法截取到。客户端送给TGS的TCP包如下。

消息长度协议号

AP_REQ长度AP_REQ数据

KRB-PRIV 数据

其中消息长度和协议号都为16位,消息长度为5个部分的字节总长度。协议号为0xFF80H,AP_REQ称作鉴别部分,用于向TGS验证自己的身份。形式为kadmin/changepw@REALM,其中REALM为用户修改和设置自己密码时申请的Kerberos管理域对象。TGT部分置于此部分中。KRB-PRIV部分包含用户业务数据,此时的主要部分结构为:

ChangePasswdData ::= SEQUENCE {

newpasswd[0] OCTET STRING,

相关文档
最新文档