【kerberos】kerberos 认证浅析

      最后更新:2022-06-29 08:15:01 手机定位技术交流文章

      在这里插入图片描述

      0.概述

      复制和补充: Кер伯罗斯认证分析

      在这里插入图片描述

      1.引言

      在希腊神话中,克尔贝罗斯是一个可怕的三头狗,他守护着地狱的门。本文所介绍的 Kerberos 认证协议首先由 MIT 提出并实施。Kerberos认证是一个三向加工过程,依靠第三方服务,即Key Distribution Centers(KDC)来验证对方的身份,并设置一个键以确保计算机之间的安全连接.实质上,每个计算机都共享了KDC的密钥,KDC有两个组件: Kerberos认证服务器和证书授权服务器。如果KDC不知道所要求的目标服务器,需要另一个KDC的帮助才能完成认证。它允许在网络上通信的实体证明彼此的身份,它也可以防止诸如窃听和重复播放等攻击。不仅如此,它 还 可以 保护 通讯 数据 的 机密 和 完整性 。

      2 Kerberos认证应用环境假设

      Kerberos协议的基本应用在分布式客户端/服务器架构中,使用一个或多个Kerberos服务器提供识别服务。当客户端想请求应用程序服务器上的资源时,首先,客户要求从密钥分发中心取得身分证,然后将身分证转交给应用程序服务器进行验证,通过服务器进行验证后,服务器将分配请求资源给客户端。

      在这里插入图片描述
      Kerberos协议本身并不完全解决安全问题,它基于若干假设,并且只能在满足这些假设的环境下正常工作:

      • 无法防止拒绝服务攻击.Kerberos不能解决拒绝服务攻击,攻击者可以在协议的许多部分中阻止正常认证步骤。 这类攻击只能由管理者和用户检测和解决。

      • 受试者必须确保其私人钥匙的安全如果入侵者以某种方式偷走主体的私钥,他可以假装是身份。

      • 克雷伯罗斯无法应付口令猜测攻击如果用户选择弱口令然后攻击者很可能成功地破解代码,然后从用户代码加密中获取所有消息。

      • 网络上每个主机的时钟必须是松散同步是的,这种同步可以减少应用程序服务器重载攻击检测时记录的数据。 一个服务器可以配置一个离散级别。

      • 不能重复使用身体标识.因为访问控制的典型模式是使用访问控制列表(ACL)来授权对象。 如果一个旧ACL也存储删除对象的输入,攻击者可以重新使用这些删除的用户标识来获取旧ACL中指定的访问权限。

      3 Kerberos认证过程

      3.1 Kerberos认证的基本原则

      在网络中,身份验证主要用于解决通信实体之间互相证明身份的问题。 如何身份验证,我们通常使用下列方法:如果一个秘密只知道身份验证者和身份验证者,身份验证者可以通过让身份验证者提供秘密来证明对方的身份.这个过程实际上涉及认证的三个重要方面:如何表达秘密,如何向被认证的当事人提供秘密,如何识别秘密

      基于这些三个方面,Kerberos认证可以尽可能简化为两个通信实体,客户端和服务器。他们共享的秘密由KServer-Client代表

      客户端在认证过程中向服务器提供平文本形式的客户端标识符并使用KServer-Client加密客户端识别要使服务器有效验证:

      因为这个秘密只有客户端和服务器知道,由客户端加密的客户端标识符只能由客户端和服务器解密。服务器接收到向客户端发送的两组信息,首先通过KServer-Client解密后者,然后将解密的数据与以前的数据比较,如果完全一样,然后你就可以证明客户端能提供正确的KServer-Client,而这个世界上,只有真正的客户端和自己知道KServer-Client,这可以证明对方的真实性.

      在这里插入图片描述
      如图

      在这里插入图片描述
      整个过程看起来非常简单,但事实上,Kerberos认证比这个过程要复杂得多。在我们了解Kerberos认证过程之前,我们首先给出两个重要的概念:

      长期密钥在安全领域,一些键可能长期保持不变,例如密码,可能不会改变几年。 这些键和由此产生的其他键被称为长期键。 长期键有下列原则:用长期密钥加密的数据不应通过网络传输.由于没有加密算法能够实现绝对保密,一旦这些用长期密码加密的数据包被黑客截获,理论上,只要有足够的时间,就可以计算用户接受加密的密码。

      对于一个账户来说,密码仅限于知道帐户的人,即使对经理来说,也应该保密。但密码也是身份的证明,因此,必须通过基于密码的导引信息来证明用户的真实性,在这种情况下,一般来说, Hash 值是通过对帐户密码进行 Hash 来获得的。也可以称之为主密钥.由于 Hash 算法是不可逆转的,它也可以保证密码和主键的推导的确定性,从而确保密码的机密性和主键和主键本身在证明用户身份时具有相同的效果。

      短期密钥用长期密钥加密的数据包不能上传到网络上,所以你需要使用另一键加密你需要通过网络传输的数据。这个键只有效一段时间,即使加密的包被黑客抓住,当他计算钥匙时,这个钥匙已经过期了。我们称之为关键的短期关键。

      3.2关键分布中心-SServer-客户端分布

      通过向认可方提供只有他和认可方所知道的东西密钥来确定彼此的真实身份。通过这个密钥加密的数据包需要在客户端和服务器之间传输,因此,这个关键可能只是短期关键,仅在客户端与服务器之间的会议中有效,所以我们把这个键叫做客户端和服务器之间的对话键,它被临时代表为SServer-Client。

      在介绍客户机和服务器如何获取对话键之前,关键分配中心(KDC)是一个重要的角色。那是关键的分发中心。KDC在整个Kerberos认证系统中扮演关键角色,作为一个第三方,由客户和服务器都信任。
      在这里插入图片描述

      上面的图示显示了SServer-Client向KDC分发的简单过程:

      • 首先,客户端向SServer-Client发送一个应用程序,该应用程序包含了它自身和想要访问的服务器的信息。

      • 当KDC接收此请求时,它生成了一个对话键,以确保该键只知道发送请求的客户端和希望访问该请求的服务器,而KDC生成两个该键的副本,分别由客户端和服务器使用。

      • 然后从数据库中提取客户端和服务器主键,分别对这两个拷贝进行对称加密,对于后者,一些客户端信息与对话键一起加密。

      KDC有两个会议键,分别由客户端和服务器主键加密。KDC将同时发送两个加密的副本给客户端,属于服务器的将由客户端发送给服务器。这很容易解决两个问题:

      1. 首先,服务器不需要维护大量的对话键来处理不同的客户端访问,这减少了服务器的负载;
      2. 第二,避免因网络延迟而客户端的认证请求在服务器 conversation key 之前到达服务器端,从而导致认证失败的情况。

      3.识别代码是你自己的证明的有效证明

      经过上述过程后,客户实际上收到两套信息:

      1. 其中一个是通过自己的主键加密的对话键
      2. 另一个是由服务器的主键加密的数据包,其中包含对话键和一些关于你本人的确认信息。

      尽管双方都知道密钥可以向另一方有效证明,但在一个不安全的网络环境中,简单的办法是存在一个安全漏洞,假设客户端向服务器发送的数据包被黑客截获,然后,黑客利用这些数据包作为自己的证书,以抵制客户端访问服务器,在这种情况下,你仍然可以成功地获得服务器认证。为此,客户需要提供更多的证据,称为鉴别码。在克尔贝罗斯,这个识别码实际上是有关客户端的一些信息和当前时间的时标

      客户端用自己的主键解密由KDC加密的对话键,以获取SServer-Client,然后创建身份代码并用SServer-Client加密。最后,从KDC获取的数据包,由服务器的主键加密,被发送到服务器端。我们通过服务器的主键加密这些包,作为会议券.

      当服务器接收两个数据集时

      1. 首先使用自己的主键解密会议收据,从而获取SServer-Client。
      2. 然后使用SServer-Client解密标识器获取时间标记与当前时间进行比较,如果偏差超过一个可接受范围,服务器将直接拒绝请求。
      3. 服务器保持一个记录所有身份验证的客户端和身份验证时间的列表在一个可接受的时间框架内。
      4. 对于在接受范围内有时间延迟的客户端,服务器将从列表中获取客户端最近的认证时间
      5. 只有当客户端提供时间标记之后,服务器将识别码中的客户端信息与会话凭证中的客户端信息进行比较,以取得对客户端的认证。

      这就是为什么我们需要从一开始就假设网络中的每个主机上的钟必须被离散地同步。

      在这里插入图片描述
      Kerberos的一个重要优势是它可以提供双向认证:不仅服务器可以验证客户端,而且客户端也可以验证服务器。如果客户端需要验证他访问的服务器,在向服务器发送的认证请求中,设置一个标记以指示是否需要双边认证。服务器成功验证客户端后,将时间邮票抽出身分编号中,通过SServer-客户端加密,当客户端使用SServer-Client来解密服务器响应的消息时,经确认时间邮票与原邮票相同,然后他可以确定服务器是他想要访问的服务器。

      3.4证书授权服务-TGS

      Kerberos实际上是一个基于凭证的认证方法.客户想要获取服务器端的资源,必须先通过服务器的证书;身份验证的先决条件是客户端向服务器提供由KDC获取的服务器主键加密的会议凭证因此,对于客户来说,获取会议票是整个认证过程中最重要的部分。

      在克尔贝罗斯,发票的程序远远没有像上面提到的那样简单,而且在客户从KDC收到会议票之前,需要授权,称为Ticket Granting Ticket(TGT),而TGT的分配仍由KDC负责

      首先,客户为TGT向KDC发起应用程序,然后KDC在收到应用程序后,为客户与KDC进行安全通信会话密钥,暂时用SKDC-Client来表示。确保会议钥匙只供客户本人使用,KDC使用客户端的主键和自己的主键加密生成的对话键,因此,获取了两个加密的SKDC-客户。对于后者,与对话键加密后,还包含了有关客户端的一些信息,这些信息之后将用于识别客户端的身份,这就是TGT以前说的。最后,KDC将两个副本一起发送给客户端。

      在这里插入图片描述
      当客户端从KDC接收两个加密包时,首先使用自己的主键解密第一个拷贝,所以你得到SKDC-客户,并用TGT缓存它。与SKDC-客户及TGT合作,不再需要客户自己的主键,从那时起,客户可以使用SKDC-Client向KDC申请访问每个服务器的机票,SKDC-客户是短期关键,安全更可靠,也正是因为如此,SKDC-客户有自己的生命周期,同时,TGT与SKDC-客户互联,SKDC-客户期满时,TGT 也 宣布 无效,然后,客户不得不再向KDC申请新的TGT,KDC将生成不同的会议键和关联的TGT,此外,客户取消操作也会导致SKDC-Client失败。

      客户收到SKDC-客户后,生成您自己的识别代码和访问的服务器名称,它也使用SKDC-Client加密。随后,它被派往KDC与TGT合作。KDC使用自己的主键解密TGT,提取客户信息和SKDC-客户,然后使用SKDC-Client解密识别代码,在识别代码中接收客户信息,比较这两个信息,然后验证对方的真实身份。验证成功,为访问服务器生成一个基于客户端的证书,随后的程序如上所述进行。

      在这里插入图片描述
      通过以上的介绍,Kerberos认证的程序基本上已经清楚地解释了,首先,客户向KDC申请TGT,然后,客户端获得TGT向KDC申请访问服务器的证书,最后, 客户端向服务器提交证书以验证.

      4Kerberos的子合同

      前面 节 所述 的 Kerberos 认证 过程 的 三 个 步骤 通过 三 个 子 程序 完成, 这些 是 :身份验证服务交换、TicketGrantingService交换及客户/服务器交换.三项子程序完成客户向KDC申请TGT的三个认证过程,客户向KDC申请通过取得的TGT访问服务器的证书,以及客户向服务器提交证书。

      在这里插入图片描述

      4.1 Authentication Service Exchange

      首先,客户端向KDC的认证服务发送一个认证服务请求(KRB_AS_REQ)。主要内容包括:客户端名称、证书授权服务器名称和客户端主键加密的时标,我们可以把它当作账单的有效性.

      身份验证服务从数据库中提取与KRB_AS_REQ中所载的客户端名称对应的主键,以解密加密的时间标记,如果时间邮票是合法的,然后可以证明发件人提供了正确的密码,身份验证服务向客户端发送响应(KRB_AS_REP),其中包含使用客户端主键加密的对话键和由客户端自己的主键加密的TGT。此TGT包含SKDC-Client、客户端名和TGT期限。

      在客户从SKDC-Client获取解密的第一个部分后,TGT可以被转移到下一个步骤,TGS(TicketGranting Service)交换。

      4.2 Ticket GrantingService Exchange

      客户端向KDC的Ticket Authorization Service发送TicketGranting Service Request(KRB_TGS_REQ)。内容包括客户通过AS Exchange获取的TGT,使用SKDC-Client加密的客户信息,以及需要访问的服务器名称。

      经 Certificate Authorization Service 收到请求后,首先,您必须确认客户提供的TGT是否是向客户发出的AST。方法很简单,KDC首先用自己的主键解密客户端提供的TGT,获取SKDC-客户,然后使用SKDC-Client解密识别代码验证。通过向另一方发送 Ticket Granting Service Response(KRB_TGS_REP)来验证。响应声明还包括两个部分:使用SKDC-Client加密的客户端和服务器的会议键(SServer-Client)和使用服务器的主键加密的证书,包括SServer-客户端,客户名称和账单的期满日期。

      客户收到答复后,使用SKDC-Client去解密第一个部分,获取SServer-Client。与SServer-客户和帐单,客户端可以直接与服务器进行交互,它不再需要通过KDC。

      4.3 Client/Server Exchange

      最后,客户端通过CS(Client/Server)交换与证书和服务器进行交互。客户通过TGS交换接收SServer-Client,然后创建身份识别代码来证明你是该文件的真正拥有者。它也使用SServer-Client加密。最后将加密的识别代码和收据作为应用程序服务请求(KRB_AP_REQ)发送到服务器上,此外,请求还包含一个标记,以表示客户端是否需要执行双边验证。

      服务器收到请求后,通过自己的主键解密收据,从而获取SServer-Client。然后使用SServer-Client解密识别代码,然后验证客户的身份。如果验证通过,让客户访问需要访问的资源,否则, 直接拒绝对方的要求.

      如果客户端需要进行双向验证,服务器将时间标记从识别代码中提取,使用SServer-Client加密,然后发送到客户端,以验证服务器对客户端的身份。

      通过 引进 上述 三 项 次级 协定,我们已经理解了整个 Cerberos认证过程。但小心的读者可能会发现,基于这些三个子协议的Kerberos系统具有一定的安全风险。在CS交换阶段,客户所携带的收据由服务器的主键加密,这 似乎 不符 合 上述 使用 长期 钥匙 的 原则,降低服务器的安全系数。

      最直接的解决办法是使用一个会议键,该证书由服务器的主键加密。这是Kerberos的第四个子协议:用户对用户身份交换。KDC生成后,收据通过客户端发送到服务器上,因此,加密收据的自然方法是使用KDC与服务器之间的对话键(SKDC-Server)。但是KDC没有维护任何对话键,因此,SKDC-Server只能由申请证书的客户提供。

      在这里插入图片描述
      上面的图表描述了包含用户间认证交换的认证过程,它由四个步骤组成,第二个步骤是基于传统的认证过程。

      首先,通过AS Exchange,客户可以获取他/她所属的TGT,并向KDC申请访问服务器的证书。

      第二步的主要任务是获取包含SKDC服务器的服务器的TGT。如果TGT存在于服务器缓存中,服务器将直接向客户端返回它。否则服务器将通过AS交换从KDC获取。

      然后,客户向KDC提供自己的TGT,服务器的TGT和身份编码用于申请证书访问服务器.KDC先用自己的主密钥解密Client的TGT获取SKDC-客户,通过SKDC-Client解密身份码,验证发件人的身份,验证并使用自己的主键解密服务器TGT,获取SKDC-Server,使用SKDC-Server加密返回证书给客户端。

      最后,客户端使用SKDC-Server加密的证书和SServer-Client加密的识别码访问服务器,服务器通过SKDC-Server解密证书获取SServer-Client,通过SServer-Client的解密识别代码实现客户端的认证。

      5 小结

      分析了整个Kerberos认证过程后,也反映了Kerberos的优点。首先,它具有很高的性能,一旦客户获得访问服务器的收据,然后,服务器可以根据收据验证客户,KDC 不再 需要 参加 ; 此外, Kerberos 可以 进行 双边 核查,客户端可以在访问服务器资源之前请求验证服务器的身份;第三个问题是互操作性,Kerberos最初是由MIT提出并实施的,现在它已成为计算机领域广泛接受的标准,因此使用Kerberos可以轻松实现不同平台之间的互操作性。

      但克尔贝罗斯的缺点也存在,例如,Kerberos认证使用了对称加密机制,加密和解密使用相同的密钥,安全 已 减少 ; Kerberos 已 集中 管理 核证 服务 和 证书 授权 服务,容易形成瓶颈,系统性能和安全性也过于依赖这两个服务的性能和安全性。

      本文由 在线网速测试 整理编辑,转载请注明出处,原文链接:https://www.wangsu123.cn/news/28785.html

          热门文章

          文章分类