`
小木马
  • 浏览: 1393 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论
阅读更多
Kerberos协议主要用于计算机网络的身份鉴别(Authentication), 其特点是用户只需输入一次身份验证信息就可以凭借此验证获得的票据(ticket-granting ticket)访问多个服务,即SSO(Single Sign On)。由于在每个Client和Service之间建立了共享密钥,使得该协议具有相当的安全性。

条件

先来看看Kerberos协议的前提条件:

如下图所示,Client与KDC, KDC与Service 在协议工作前已经有了各自的共享密钥,并且由于协议中的消息无法穿透防火墙,这些条件就限制了Kerberos协议往往用于一个组织的内部, 使其应用场景不同于X.509 PKI。



过程

Kerberos协议分为两个部分:

1 . Client向KDC发送自己的身份信息,KDC从Ticket Granting Service得到TGT(ticket-granting ticket), 并用协议开始前Client与KDC之间的密钥将TGT加密回复给Client。

此时只有真正的Client才能利用它与KDC之间的密钥将加密后的TGT解密,从而获得TGT。

(此过程避免了Client直接向KDC发送密码,以求通过验证的不安全方式)

2. Client利用之前获得的TGT向KDC请求其他Service的Ticket,从而通过其他Service的身份鉴别。

Kerberos协议的重点在于第二部分,简介如下:



1.    Client将之前获得TGT和要请求的服务信息(服务名等)发送给KDC,KDC中的Ticket Granting Service将为Client和Service之间生成一个Session Key用于Service对Client的身份鉴别。然后KDC将这个Session Key和用户名,用户地址(IP),服务名,有效期, 时间戳一起包装成一个Ticket(这些信息最终用于Service对Client的身份鉴别)发送给Service, 不过Kerberos协议并没有直接将Ticket发送给Service,而是通过Client转发给Service.所以有了第二步。

2.    此时KDC将刚才的Ticket转发给Client。由于这个Ticket是要给Service的,不能让Client看到,所以KDC用协议开始前KDC与Service之间的密钥将Ticket加密后再发送给Client。同时为了让Client和Service之间共享那个秘密(KDC在第一步为它们创建的Session Key), KDC用Client与它之间的密钥将Session Key加密随加密的Ticket一起返回给Client。

3.    为了完成Ticket的传递,Client将刚才收到的Ticket转发到Service. 由于Client不知道KDC与Service之间的密钥,所以它无法算改Ticket中的信息。同时Client将收到的Session Key解密出来,然后将自己的用户名,用户地址(IP)打包成Authenticator用Session Key加密也发送给Service。

4.    Service 收到Ticket后利用它与KDC之间的密钥将Ticket中的信息解密出来,从而获得Session Key和用户名,用户地址(IP),服务名,有效期。然后再用Session Key将Authenticator解密从而获得用户名,用户地址(IP)将其与之前Ticket中解密出来的用户名,用户地址(IP)做比较从而验证Client的身份。

5.    如果Service有返回结果,将其返回给Client。

总结

概括起来说Kerberos协议主要做了两件事

1.    Ticket的安全传递。

2.    Session Key的安全发布。

再加上时间戳的使用就很大程度上的保证了用户鉴别的安全性。并且利用Session Key,在通过鉴别之后Client和Service之间传递的消息也可以获得Confidentiality(机密性), Integrity(完整性)的保证。不过由于没有使用非对称密钥自然也就无法具有抗否认性,这也限制了它的应用。不过相对而言它比X.509 PKI的身份鉴别方式实施起来要简单多了。

推荐资料:

Kerberos的原理

Kerberos: An Authentication Service for Computer Networks

Web Services Security系列文章

Kerberos 是一种网络认证协议,其设计目标是通过密钥系统为客户机 / 服务器应用程序提供强大的认证服务。该认证过程的实现不依赖于主机操作系统的认证,无需基于主机地址的信任,不要求网络上所有主机的物理安全,并假定网络上传送的数据包可以被任意地读取、修改和插入数据。在以上情况下, Kerberos 作为一种可信任的第三方认证服务,是通过传统的密码技术(如:共享密钥)执行认证服务的。
  认证过程具体如下:客户机向认证服务器(AS)发送请求,要求得到某服务器的证书,然后 AS 的响应包含这些用客户端密钥加密的证书。证书的构成为: 1) 服务器 “ticket” ; 2) 一个临时加密密钥(又称为会话密钥 “session key”) 。客户机将 ticket (包括用服务器密钥加密的客户机身份和一份会话密钥的拷贝)传送到服务器上。会话密钥可以(现已经由客户机和服务器共享)用来认证客户机或认证服务器,也可用来为通信双方以后的通讯提供加密服务,或通过交换独立子会话密钥为通信双方提供进一步的通信加密服务。
  上述认证交换过程需要只读方式访问 Kerberos 数据库。但有时,数据库中的记录必须进行修改,如添加新的规则或改变规则密钥时。修改过程通过客户机和第三方 Kerberos 服务器(Kerberos 管理器 KADM)间的协议完成。有关管理协议在此不作介绍。另外也有一种协议用于维护多份 Kerberos 数据库的拷贝,这可以认为是执行过程中的细节问题,并且会不断改变以适应各种不同数据库技术。
编辑本段协议结构
Kerberos 信息
  * 客户机/服务器认证交换
  <
  信息方向 信息类型
  客户机向 Kerberos KRB_AS_REQ
  Kerberos 向客户机 KRB_AS_REP或KRB_ERROR
  * 客户机/服务器认证交换
  信息方向 信息类型
  客户机向应用服务器 KRB_AP_REQ
  [可选项] 应用服务器向客户机 KRB_AP_REP或 KRB_ERRORR
  * 票证授予服务(TGS)交换
  信息方向 信息类型
  客户机向 Kerberos KRB_TGS_REQ
  Kerberos 向客户机 KRB_TGS_REP或KRB_ERROR
  * KRB_SAFE 交换
  * KRB_PRIV 交换
  * KRB_CRED 交换
  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)体系中。
编辑本段Kerberos缺陷
  1.失败于单点:它需要中心服务器的持续响应。当Kerberos服务结束前,没有人可以连接到服务器。这个缺陷可以通过使用复合Kerberos服务器和缺陷认证机制弥补。
  2.Kerberos要求参与通信的主机的时钟同步。票据具有一定有效期,因此,如果主机的时钟与Kerberos服务器的时钟不同步,认证会失败。默认设置要求时钟的时间相差不超过10分钟。在实践中,通常用网络时间协议后台程序来保持主机时钟同步。
  3.管理协议并没有标准化,在服务器实现工具中有一些差别。
  4.因为所有用户使用的密钥都存储于中心服务器中,危及服务器的安全的行为将危及所有用户的密钥。
  5.一个危险客户机将危及用户密码。
分享到:
评论

相关推荐

    三步轻松理解Kerberos协议

    Kerberos协议是一种广泛应用于企业环境的身份验证协议,特别是在Active Directory (AD)域环境中,它为客户端和服务器应用提供了安全的认证服务。该协议的核心在于使用对称加密技术,确保了用户身份的安全验证,防止...

    kerberos协议简介.pdf

    Kerberos 协议简介 Kerberos 协议是一种计算机网络认证协议,允许某实体在非安全网络环境下通信,向另一个实体以一种安全的方式证明自己的身份。该协议基于对称密码学,并需要一个值得信赖的第三方。 Kerberos 协议...

    Kerberos协议及安全性分析

    ### Kerberos协议及安全性分析 #### 概况与背景 Kerberos协议是于20世纪80年代由麻省理工学院(MIT)研发的一种安全认证协议,旨在为TCP/IP网络提供一种可靠的第三方身份验证机制。它使得客户端能够以安全的方式...

    Kerberos协议原理及应用

    ### Kerberos协议原理及应用 #### 一、引言 Kerberos协议作为一种基于加密的安全认证服务,在分布式网络环境中扮演着至关重要的角色。它最初由麻省理工学院(MIT)作为“雅典娜计划(Project Athena)”的一部分...

    Kerberos协议理解

    Kerberos协议理解 Kerberos是一种广泛使用的身份验证协议,旨在提供身份验证服务,以确保在不安全的网络环境中进行身份验证的安全性。下面将详细介绍Kerberos协议的概念、原理和工作流程。 1. Kerberos协议的基础...

    kerberos的java实现

    **Kerberos协议详解** Kerberos是一种网络身份验证协议,由麻省理工学院开发,旨在提供安全的网络服务。它的核心理念是通过共享密钥的方式进行身份验证,确保通信双方的安全交互。Java语言实现的Kerberos允许开发者...

    域渗透中的DPAPI和Kerberos协议.pdf

    《域渗透中的DPAPI和Kerberos协议》 在网络安全领域,尤其是在企业内网环境中,域渗透是一项关键的技术挑战。本文将深入探讨两种关键的Windows安全机制——DPAPI(Data Protection API)和Kerberos协议,以及它们在...

    Kerberos协议标准

    《Kerberos协议标准》是网络身份验证领域的重要标准,主要设计用于保护计算机网络中的通信安全,确保只有授权用户能够访问资源。Kerberos由麻省理工学院开发,并且广泛应用于企业级网络环境,尤其在多层安全策略中...

    Java实现运用Kerberos协议的客户机服务器程序.caj

    Java实现运用Kerberos协议的客户机服务器程序.caj

    对Kerberos协议的攻击及对策研究 (2005年)

    Kerberos协议是当今最重要的实用认证协议,但是它也存在着一些局限性和缺陷,文章主要分析了Kerberos协议的两种最重要的攻击:口令攻击和重放攻击,以Windows2000环境下对Kerberos协议进行的攻击为例进行了具体分析...

    无线网络安全协议Kerberos的Petri网建模.pdf

    Kerberos协议是一种广泛应用于无线网络环境中的安全协议,它允许用户通过一个中心认证服务器进行身份验证。Kerberos协议的主要优势在于其在身份委派和身份验证方面表现出的高效性,使得其成为无线网络安全领域内常用...

    Kerberos 认证协议详解

    Kerberos协议是一种在不安全的网络环境中,为可信方提供相互认证的系统。它被设计为一种可信第三方认证系统,并使用对称加密技术来实现。Kerberos的目的是让用户在初次获取凭证后,能够一次性地对多个服务进行认证,...

    改进的Kerberos协议在HDFS环境下的研究

    研究者首先分析了Kerberos协议的基本原理和其在中心化管理方式下遇到的问题,并且结合HDFS的特殊需求,提出了一个优化的Kerberos协议模型。 改进的协议模型采用了分布式思想,对Kerberos协议的消息传递模型进行了...

Global site tag (gtag.js) - Google Analytics