概念:

Kerberos服务器:AS认证服务器,TGS服务授权服务器

Client 客户端,代表使用应用的用户

AppServer 服务端,应用提供各种服务的服务器

Client在Kerberos注册用户名c,密码Kc

AppServer在Kerberos注册用户名s,密码Ks

TGS在Kerberos注册用户名tgs,密码Ktgs

说明:

Kerberos为Client和AppServer提供可信任第三方认证服务。

Kerberos服务器将用户的用户名及密码存放在它的数据库中。

密码Kc只有Client和Kerberos才拥有,通过Client在Kerberos服务器注册保证密码一致。

同理密码Ks只有AppServer和Kerberos才拥有。

认证过程:

1.Client->AS

KRB_AS_REQ={c, tgs, TS1}

c表示Client客户标识,告诉AS请求的Client身份,便于AS到数据库中查询c的密钥

tgs是Client下一步要访问TGS服务器标识

TS1时间戳被AS用于验证Client时钟是否与AS时钟同步

2.AS->Client

KRB_AS_REP={K(c,tgs),TS2,lifetime,tgs_Tickets}Kc

K(c,tgs)是由AS随机产生的,用于Client与TGS共享的一个会话私钥

TS2是票据发放的时间戳,lifetime是票据有效期

tgs_Tickets是AS发给Client的用于访问TGS的票据授权票据

tgs_Tickets={K(c,tgs), c, c_mac, tgs, TS2, lifetime2}Ktgs

c_mac是Client的MAC地址

3.Client->TGS

KRB_TGS_REQ={s, tgs_Tickets, Authen_info}

s是Client期望访问的AppServer服务器

tgs_Tickets是Client上一步从AS获取的票据授权票据

Authen_info是Client发送的一条认证消息,用于确认发送票据tgs_Tickets的用户就是c

Authen_info={c, c_mac, TS3}K(c,tgs)

4.TGS->Client

KRB_TGS_REP={K(c,s), s, TS4, s_Tickets}K(c,tgs)

K(c,s)是TGS随机生成的密钥,为Client端和AppServer共享的会话密钥

s_Tickets={K(c,s), c, c_mac, s, TS4, lifetime}Ks

TGS用自己的密码Ktgs解密tgs_Tickets获得c,c_mac,K(c,tgs),TS2,lifetime

TGS首先根据时TS2,lifetime时间判断票据是否过期,未过期则继续,

TGS再用上面解密出来的会话私钥K(c,tgs)解密Authen_info,获得c,c_mac,

比较上面2次解密出来的c,c_mac是否一致,判断此次请求来自合法Client。

5.Client->AppServer

KRB_APPSERVER_REQ={s_Tickets,Authent_info},

Client使用K(c,tgs)从KRB_TGS_REP响应中获取K(c,s)

Client采用会话密钥K(c,s)加密Authent_info消息

Authen_info={c, c_mac, TS5}K(c,s)

6.AppServer->Client

AppServer用自己的密码Ks从S_Tickets解密获得K(c,s), c, c_mac, s, TS4, lifetime

(s标识确认Client需要访问该AppServer,AppServer可以通过能否在票中找到自已的名字s来判断解密是否正确)

AppServer然后用TS4时间戳和有效期lifetime来检查票是否有效,有效才进行下一步

AppServer再用从上面解密出来的K(c,s)从Authen_info解密获得c, c_mac

AppServer比较上面2次解密出来的c,c_mac是否一致,判断此次请求来自合法Client。

最后AppServer使用K(c,s)加密确认消息给Client端,告知对方它期待的服务器已收到它的服务请求。

7.Client

Client接收到AppServer的响应,并且使用K(c,s)解密成功即可。

此时Client与AppServer即实现了可信的双方认证。

其他:

2中因为Tickets_tgs已经采用TGS的私钥加密,故没有必要采用客户端的私钥再次加密,

所以AS向Client响应可以修改为:

KRB_AS_REP=tgs_Tickets,{K(c,tgs),TS2,lifetime}Kc

4中同样S_Tickets已经采用AppServer的私钥加密,也不需要使用K(c,tgs),可以修改为:

KRB_TGS_REP=s_Tickets,{K(c,s), s, TS4}K(c,tgs)

参考文档:

【hadoop大数据安全基础知识】Kerberos安全协议(原理)解析与编程实现
http://www.aboutyun.com/thread-11577-1-1.html

KerberosRequestResponseFlow.png
KerberosObjectsHoldSummary.png
KerberosRequestResponseHandel.png

Kerberos认证过程学习理解的更多相关文章

  1. [Kerberos] Kerberos 认证过程整理

    Kerberos是一种安全认证协议,意在提供 more secure authentication simplified management of password convenience of s ...

  2. 在kerberos认证过程中Active Directory的作用

    LDAP介绍 1),ladp(Lightweight Directory Access Protocol),轻量级目录访问协议,提供被称为目录服务的信息服务,特别是基于X.500(构成全球分布式的目录 ...

  3. 域渗透 | kerberos认证及过程中产生的攻击

    ​文章首发于公众号<Z2O安全攻防>​ 直接公众号文章复制过来的,排版可能有点乱, 可以去公众号看. https://mp.weixin.qq.com/s/WMGkQoMnQdyG8UmS ...

  4. Kerberos认证浅析

    1 引言 在希腊神话中Kerberos是守护地狱之门的一条凶猛的三头神犬,而我们在本文中所要介绍的Kerberos认证协议是由美国麻省理工学院(MIT)首先提出并实现的,是该校雅典娜计划的一部分.这个 ...

  5. Kerberos认证与攻击学习总结

    0.背景 聆听了n1nty大佬(90后黑客代表)的谆谆指导,学习了n1nty大佬的基本操作,决定总结一下,做一个简要的读书笔记,也把之前自己记录的关于Windows的安全的一些博客能够串联起来.所以首 ...

  6. Kerberos认证原理简介

    1.1 What is Kerberos 1.1.1 简单介绍 Kerberos是一个用于鉴定身份(authentication)的协议, 它采取对称密钥加密(symmetric-key crypto ...

  7. RHCE认证过程

    RHCE认证,即红帽认证工程师(Red Hat Certified Engineer)的简称,认证内容包括DNS.NFS.Samba.Sendmail.Postfix.Apache和关键安全功能的详细 ...

  8. ASP.NET Core Identity 实战(3)认证过程

    如果你没接触过旧版Asp.Net Mvc中的 Authorize 或者 Cookie登陆,那么你一定会疑惑 认证这个名词,这太正式了,这到底代表这什么? 获取资源之前得先过两道关卡Authentica ...

  9. 图解Kerberos认证工作原理

    本文是我在看了这篇英文说明之后的总结 https://technet.microsoft.com/zh-cn/library/cc961976.aspx 是总结,不是翻译,所以是我看后按自己的理解写的 ...

随机推荐

  1. HelloWorldModelMBean

    package mbeanTest; import java.lang.reflect.Constructor; import javax.management.Descriptor; import ...

  2. zabbix之监控MySQL

    #:先配置MySQL的主从 #:安装Percona Monitoring Plugins (地址:https://www.percona.com/downloads/)#:我安在从库,监控哪个就安哪个 ...

  3. Servlet(2):通过servletContext对象实现数据共享

    一,ServletContext介绍 web容器在启动时,它会为每一个web应用程序都创建一个ServletContext对象,它代表当前web应用 多个Servlet通过ServletContext ...

  4. 【编程思想】【设计模式】【行为模式Behavioral】状态模式State

    Python版 https://github.com/faif/python-patterns/blob/master/behavioral/state.py #!/usr/bin/env pytho ...

  5. Linux中定时任务

    目录 一.简介 二.crondtab file 三.crond命令的调试 四.精确到秒的任务计划 一.简介 定时任务在线测试网站 定时任务基本概念: (1).crond是一个daemon类程序,路径为 ...

  6. 为什么使用卡尔曼滤波器?(Youtube视频学习)

    视频资料网址:https://www.youtube.com/watch?v=mwn8xhgNpFY&list=RDCMUCgdHSFcXvkN6O3NXvif0-pA&index=4 ...

  7. glViewport()函数和glOrtho()函数的理解

    glViewport()函数和glOrtho()函数的理解     OpenGL中有两个比较重要的投影变换函数,glViewport和glOrtho. glOrtho是创建一个正交平行的视景体. 一般 ...

  8. noVNC实现浏览器远程访问Windows桌面

    一.简介 1.VNC介绍 VNC (Virtual Network Console)是虚拟网络控制台的缩写.它 是一款优秀的远程控制工具软件.VNC 是在基于 UNIX 和 Linux 操作系统的免费 ...

  9. SWPUCTF_2019_login(格式字符串偏移bss段)

    题目的例行检查我就不放了,将程序放入ida中 很明显的值放入了bss段的格式字符串,所以我们动态调试一下程序 可以看到ebp这个地方0xffd0dd17-->0xffd0dd38-->0x ...

  10. 联盛德 HLK-W806 (十): 在 CDK IDE开发环境中使用WM-SDK-W806

    目录 联盛德 HLK-W806 (一): Ubuntu20.04下的开发环境配置, 编译和烧录说明 联盛德 HLK-W806 (二): Win10下的开发环境配置, 编译和烧录说明 联盛德 HLK-W ...