Kerberos基础认知

KerBeros基础

1988年MIT(麻省理工学院)研发的身份认证系统

1.目标

不使用公钥证书,实现局域网中的用户认证

允许用户访问服务,不必每次重新输入登录密码

2.原理

使用共享同一把密钥的对称加密算法,以及电子通行证(票据)

3.使用两种类型的票据

TGS票据:由AS(身份认证服务器)颁发给用户

V-票据(服务器票据):由TGS(通行证授予服务器)颁发给用户

Kerberos服务器

  • 需要两个特殊的服务器向用户发放票据

AS:认证服务器,用户管理用户和用户认证,存储用户名和登录密码,以及与TGS的共享密钥

TGS:票据授予服务器,用户管理服务器,存储与所有服务器的共享密钥

  • 两个Kerberos协议(单网络 VS 多网络)

单域Kerberos

多域Kerberos

KerBeros如何工作

登录时,用户向认证服务器AS提供用户名和密码,AS对用户进行认证,并提供一个TGS票据给用户(用户和TGS之间的共享密钥)

当用户要访问服务器V时提供的某种服务时,用户向TGS服务器提供它的TGS票据
TGS服务器对用户的TGS票据进行认证,然后向用户发放一个V票据(服务器票据)给用户
用户向服务器提供V票据,通过后访问服务器提供的服务

KerBeros协议的符号定义

image-20240907050340399

Ek:采用密钥K,采用对称加密算法进行加密
Ku:通过用户U提供的Password得到的一个密钥
Ku,TGS:由AS产生的用户U和TGS服务器之间的一把共享密钥
K TGS:AS服务器和TGS服务器之间的共享密钥
K v:TGS和V服务器之间的共享密钥
K u v:用户U有TGS服务器颁发的用户U和服务器V之间的共享密钥
L T i :超时时间
Ticket TGS:由AS颁发给U用户的TGS票据
Ticket v:由TGS服务器颁发给用户U关于服务器V的票据
ADu:用户U的MAC地址
AuthU TGS:通过Ku,tgs生成的消息验证码
Auth u v:通过Ku,v生成的消息验证码

单域

image-20240907051554473

阶段1:用户向AS提出使用TGS的请求,AS认证用户(通过用户名和密码)后颁发一个TGS票据(为用户和TGS服务器设定一个共享密钥)给用户

阶段2:用户用TGS票据向TGS提出访问某服务器的请求,TGS颁发一个使用该服务器的V-票据(为用户和服务器V设定一个共享密钥)给用户

阶段3:用户用V-票据向该服务器发出请求,通过验证后获得请求的服务

单域KerBeros的三个步骤

  • 阶段1:AS颁发一个TGS票据给用户

1.$U → AS: ID_U || ID_TGS || t_1$

2.$AS → U: E_{K_U}(K_{U,TGS} || ID_TGS || t_2 || LT_2 || Ticket_{TGS}) $

​ $ Ticket_{TGS} = E_{K_{TGS}}(K_{U,TGS} || ID_U || AD_U || ID_TGS || t_2 || LT_2)$

  • 阶段2:TGS颁发一个服务器票据给用户

3.$U → TGS: ID_V || Ticket_{TGS} || Auth_{U,TGS}$

​ $Auth_{U,TGS} = E_{K_{U,TGS}}(ID_U || AD_U || t_3)$

4.$TGS → U: E_{K_{U,TGS}}(K_{U,V} || ID_V || t_4 || Ticket_V)$

​ $Ticket_V = E_{K_{V}}(K_U,v||ID_U || AD_U || ID_V || t_4 || LT_4)$

  • 阶段3:用户获得请求的服务

5.$U → V: Ticket_V || Auth_{U,V}$

​ $Auth_{U,V} = E_{K_{U,V}}(ID_U || AD_U || t_s)$

6.$V → U: E_{K_{U,V}}(t_5+1)$

多域

image-20240907055137712

  • 阶段1:用户向本域AS提出使用TGS的请求,本域AS颁发一个TGS票据(为用户和本域TGS服务器设定一个共享密钥)给用户
  • 阶段2:用户用本域TGS票据向本域TGS提出访问邻域TGS的请求,本域TGS颁发一个使用邻域TGS的票据(为用户和邻域TGS服务器设定一个共享密钥)给用户
  • 阶段3:用户用邻域TGS票据向邻域TGS提出访问邻域某服务器的请求,邻域TGS颁发一个使用该服务器的V-票据(为用户和服务器V设定一个共享密钥)给用户
  • 阶段4:用户用V-票据向该邻域服务器发出请求,通过验证后获得请求的服务

多域KerBeros的四个步骤

  • 阶段1:本域AS颁发一个本域的TGS票据给用户

1.$U → AS: ID_U || ID_TGS || t_1$

2.$AS → U: E_{K_U}(K_{U,TGS} || ID_TGS || t_2 || LT_2 || Ticket_{TGS})$

​ $Ticket_{TGS} = E_{K_{TGS}}(K_{U,TGS} || ID_U || AD_U || ID_TGS || t_2 || LT_2)$

  • 阶段2:本域TGS颁发一个邻域TGS票据给用户

3.$U → TGS: ID_V || Ticket_{TGS} || Auth_{U,TGS}$

​ $Auth_{U,TGS} = E_{K_{U,TGS}}(ID_U || AD_U || t_3)$

4.$TGS → U: E_{K_{U,TGS}}(K_{U,TGS} || ID_TGS || t_4 || Ticket_TGS)$

​ $Ticket_V = E_{K_{TGS}}(K_{U,TGS} || ID_U || AD_U || ID_TGS || t_4 || LT_4)$

  • 阶段3:邻域TGS颁发一个服务器票据给用户

5.$U → TGS': ID_V || Ticket_{TGS} || Auth_{U,TGS'}$

​ $Auth_{U,TGS'} = E_{K_{U,TGS}}(ID_U || AD_U || t_5)$

6.$TGS' → U: E_{K_{U,TGS}}(K_{U,V} || ID_V || t_6 || Ticket_V)$

​ $Ticket_V = E_{K_{V}}(K_{U,V} || ID_U || AD_U || ID_V || t_6 || LT_6)$

阶段4:用户从邻域服务器请求服务

7.$U → V: Ticket_V || Auth_{U,V}$

​ $Auth_{U,V} = E_{K_{U,V}}(ID_U || AD_U || t_7)$

8.$V → U: E_{K_{U,V}}(t_7+1)$

本文链接:

https://www.linqi.net.cn/index.php/archives/539/