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协议的符号定义
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生成的消息验证码
单域
阶段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)$
多域
- 阶段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)$