关于 Kerberos 认证协议流程

这周网络安全课布置的作业是了解 Kerberos 认证协议的流程,于是我自学了相关知识,整理笔记如下,如有错误,欢迎指正!

1. 基本概念

  • Kerberos 认证是一个基于票据的认证机制,旨在在不安全的网络环境中提供强大的身份验证服务

  • Kerberos 认证流程涉及四个个主要参与者:

    • 客户端(用户)

    • 认证服务器(AS,Authentication Server)

    • 票据授予服务器(TGS,Ticket Granting Server)

    • 应用服务器(为用户提供服务的设备或系统)

  • 其中,AS 和 TGS 是第三方,用于验证 Kerberos 客户机的身份,为应用服务器提供认证服务

2. 认证过程

2.1 举例

纯文字感觉不太好理解,我们先用图片和公式来梳理下认证流程:

  • 假设有四个角色:客户端(C),认证服务器(AS),票据授予服务器(TGS),和应用服务器(S)
  • 记客户端的密码为 \(k_C\) ,AS 和 TGS 的密钥分别为 \(k_{AS}\)\(k_{TGS}\) ,应用服务器的密钥为 \(k_S\) ,以下是详细的流程:

C ==> AS

  • \(E{k_C}(ID_{TGS}, TS_1)\)

    • \(TS_1\) 是时间戳,可以用于防止重放攻击

    • 客户端C给认证服务器AS发送包含其身份信息的请求,请求获得对票据授予服务器的访问权,发送票据服务器TGS的ID和时间戳(是用客户端的密钥进行的加密)

AS ==> C

  • \(E_{k_C}(ID_{TGS}, K_{C,TGS}, TS_1)\)
  • \(E_{k_{TGS}}(ID_C, K_{C,TGS}, TS_1)\)
    • \(K_{C,TGS}\) 是 C 和 TGS 之间的会话密钥
    • AS 就会验证客户端的身份,然后发送两个重要的信息:
      • 一是客户端和TGS之间的会话密钥 \(K_{c,tgs}\)
      • 二是TGT(Ticket Granting Ticket,票据授予票据),即 \(E_{k_{TGS}}(ID_C, K_{C,TGS}, TS_1)\),客户端无法解密这个,之后它会将其原封不动发给TGS

C ==> TGS

  • \(E_{k_{C,TGS}}(ID_S, TS_2)\)
  • \(TGT\),也就是 \(E_{k_{TGS}}(ID_C, K_{C,TGS}, TS_1)\)
    • \(TS_2\) 是新的时间戳
    • C 使用 \(K_{C,TGS}\) 加密请求,并附上 \(TGT\)

TGS ==> C

  • \(E_{k_{C,TGS}}(ID_S, K_{C,S}, TS_2)\)
  • \(E_{k_S}(ID_C, K_{C,S}, TS_2)\)
    • \(K_{C,S}\) 是 C 和 S 之间的会话密钥
    • TGS就会先解密TGT,验证客户端的身份,然后生成客户端和应用服务器之间的会话密钥 \(K_{c,s}\)
    • TGS发送两个信息给客户端:
      • 一是加密的会话密钥 \(K_{c,s}\)
      • 二是加密的服务票据(Service Ticket),即 \(E_{k_S}(ID_C, K_{C,S}, TS_2)\),同理,客户端无法解密这个,之后它会将其原封不动发给S

C ==> S

  • \(E_{k_{C,S}}(ID_C, TS_3)\)
  • \(Ticket\),也就是 \(E_{k_S}(ID_C, K_{C,S}, TS_2)\)
    • \(TS_3\) 是新的时间戳
    • C 使用 \(K_{C,S}\) 加密请求,并附上服务票据 \(Ticket\)

S ==> C

  • \(E_{k_{C,S}}(TS_3 + 1)\)
    • S 验证服务票据和时间戳,然后使用 \(K_{C,S}\) 加密 \(TS_3 + 1\)作为回应

2.2 具体流程(纯文字)

下面是一个典型的 Kerberos 认证过程,分成六个主要步骤:

(1)客户端请求AS(认证服务器)

  • 客户端向认证服务器发送一个包含其身份信息的请求(通常是用户名),请求获得对票据授予服务器的访问权,这个请求可以包含一个时间戳,用于防止重放攻击。

(2)AS(认证服务器)回复客户端

  • 认证服务器验证客户端的身份,然后发送两个重要的信息:
    • 一是客户端和票据授予服务器之间的会话密钥\(K_{c,tgs}\)
    • 二是TGT(Ticket Granting Ticket,票据授予票据),TGT是加密的,包含客户端的身份信息和会话密钥,只有票据授予服务器能解密

(3)客户端请求TGS(票据授予服务器)

  • 客户端使用从AS获得的会话密钥加密一个新的请求(包含对目标服务的访问要求)和TGT,发送给票据授予服务器,这个请求通常也包含一个新的时间戳。

(4)TGS(票据授予服务器)回复客户端

  • 票据授予服务器首先解密TGT,验证客户端的身份,然后生成客户端和目标服务(应用服务器)之间的会话密钥\(K_{c,s}\)
  • TGS发送两个信息给客户端
    • 一是加密的服务票据(Service Ticket)
    • 二是加密的会话密钥

(5)客户端请求应用服务器

  • 客户端使用从TGS获得的服务票据和会话密钥向目标服务(应用服务器)发起请求
  • 服务票据是加密的,只有目标服务能解密

(6)应用服务器回复客户端

  • 应用服务器解密服务票据,验证客户端的身份,然后使用会话密钥与客户端建立安全的通信。

在整个过程中,Kerberos 保证了身份验证的安全性和数据的保密性。

posted @ 2023-11-25 11:01  路有所思  阅读(601)  评论(0)    收藏  举报