前提知识

  • KDC:由AS、TGS,还有一个Kerberos Database组成。
    Kerberos Database用来存储用户的密码或者其他所有信息,请求的时候需要到数据库中查找。

    • AS为客户端提供TGT票据,同时进行信息验证。

      • TGT(Ticket Granting Tickets):一个信息票据,可以看做是一种入场票
    • TGS(Ticket Granting Server) : 一个服务器,验证 TGTAuthenticator(密码证明信息),为客户端提供 Service Tickets(票证服务)。
    • Kerberos Database:是一个数据库,当我们请求的时候会发送自己的用户ID/NAME,会来到数据库中查找是否存在…

Session表示会话,在kerberos中KDC会随机生成两种重要的会话钥匙:

  • TGS Session Key
  • 请求的服务 Server Session Key

原理

第一次对话


Client 发送信息包到AS中:(明文发送)

  • 自身的 ID/NAME(用户名)
  • 自身 IP地址
  • 当前时间戳
    上述信息发过去的时候全是明文,即我们发出去之前不进行信息加密

AS 收到后,首先去到数据库中查看是否有该用户名,存在才继续响应答复以下信息两种,在这个时候KDC随机生成了一个TGS Session Key一并发送过去

  • 第一份信息包(用客户端密钥加密发送)

    • 当前时间戳
    • 客户端即将访问的 TGS 服务器的 NAME
    • TGS 的有效时间(一般是八小时)
    • TGS Session Key

上述↑↑↑第一份信息包使用客户端对应的密钥进行加密然后传输
(非明文传输,同时KDC拥有密码表,使用密码表与客户端进行身份认证)

  • 第二份信息包(TGT票据):这一份就是 TGT(用TGS密钥加密发送)

    • 客户端 NAME
    • 客户端 IP
    • 当前时间戳
    • 客户端即将访问的 TGS 服务器的 NAME
    • TGT 的有效时间(一般是八小时)
    • TGS Session Key

上述↑↑↑第二份信息包使用TGS的个人密钥进行加密后传输
(这一份发过去后客户端无法解密,因为他不拥有TGS的密钥,所以这也说明了为什么后面客户端需要原封不断的将TGT发回来再次验证)

第二次对话

客户端收到了来自KDC发来的信息
首先客户端能够解密的信息包就只有第一份,因为是用客户端自己的密钥加密发过来的,所以解开后就能够获得里面的信息,其实主要是要获得TGS Session Key,客户端在第二次对话中需要通过该Key进行加密发送过去信息包


Client发送在本次发送的信息有三种

  • 第一份信息包(明文发送)

    • 发送客户端要访问的Service服务NAME/ID
  • 第二份信息包(用我们解出来拿到的TGS Session Key 密钥加密发送)
    • 客户端 NAME
    • 客户端 IP
    • 当前时间戳
  • 第三份信息包(TGT原本就加密了)
    • 原封不动的发送TGT票据回去

KDC收到信息包后首先使用自身密钥对TGT进行解密,他需要拿到里面的TGS Session Key,拿出来后将客户端的第二份信息包进行解密,拿到里面的客户端信息与当前收到的第一份信息包里面的客户端信息是否一致。
其中时间戳不是比较,而是通过客户端发送过来的时间,与我生成TGT时间相差是否超过可容忍的时间段,超过了就表示可能存在别修改的风险,就会考虑是否废弃掉本次对话以及废弃票据(有内鬼终止交易

只有当所有信息都没有问题的时候才进行回应下一步操作:
在这个时候KDC又随机生成了一个客户端请求的服务 Server Session Key

  • 第一份信息包(使用TGS Session Key密钥加密发送)

    • 当前时间戳
    • ticket ST票据的有效时间
    • 请求的服务 Server Session Key
  • 第二份信息包(ST票据)(使用请求的服务 Server自身的密钥加密发送)
    • 客户端 NAME
    • 客户端 IP
    • 服务器的IP地址(认证服务器)
    • ticket ST票据的有效时间
    • 请求的服务 Server Session Key
      (重点是这一份数据要发过去)

第三次对话

这时候客户端收到了TGS发来的最后一条数据,客户端使用之前缓存的TGS Session Key 对第一份信息包进行解密,最重要的是解密后拿到里面的请求的服务 Server Session Key密码,但是第二份信息包无法解密,是因为这是我们请求的Server的密钥加密的,我们无法得知。

这时候我们检查时间戳是否超时,无误就开始想最终Server发起最后的请求:

  • 第一份信息包(使用请求的服务 Server Session Key密钥加密发送)

    • 客户端 NAME
    • 客户端 IP
    • 当前时间戳
    • ticket ST票据有效时间
  • 第二份信息包(ST票据)
    • 原封不动的发送我们无法解密的ST票据信息包

Server 收到客户端发来的信息包后,首先只能解密的只有用自己Server密钥对第二份信息包进行解密,主要是为了拿出ST票据里面的请求的服务Server Session Key,核对时间戳没有超时后,取出这一份密钥就可以解密第一份信息包,取出里面的客户端信息,然后再与我们解出来的ST票据里面的信息与之比较是否一致

信息核对没问题后开始确定身份了,服务端发送确认通信消息

  • 第一份信息包(使用请求的服务 Server Session Key密钥加密发送)

    • 请求的服务 NAME/ID
    • 当前时间戳

客户端接收到信息包后,使用缓存下来的请求的服务 Server Session Key进行解密,解密出来必须要包含请求的服务 NAME/ID 和 时间戳,通过检查时间戳没有超市和正确的服务就表示认证成功了。然后再有效时间内都是使用Server Session Key进行双方的通讯。

总结发现

  • 首先在其中生成的Session都是作下一次通话是否正确为目的,也就是为了保证认证过程双方身份都是正确的
  • 除了客户端不知道KDC的密钥之外,我们在本地使用密钥加密发送过去KDC是知道如何解密的,利用这个特性,KDC就可以使用他自己内部的密钥进行信息加密作为票据,我们无法解密,但是我们发过去响应的时候总是带有时间戳或者客户端信息,我们票据中也带有这些信息,然而这些信息都是KDC才能解密, 所以票据就代表了对方发过来的信息是否有误,可以知道是否疑似超时被截获信息了。
  • 在客户端主要是通过自身密钥获取会话的Session密钥,通过Session密钥就可以解密信息包了解到是否在传输过程中信息包被修改,或者发过来的信息包根本就不是KDC发来的。即使我们没有发现,那么黑客也也不会解密到我们的Session对话,即使解密了我们的Session密钥,时间也会超时,我们客户端很容易察觉该信息包不安全了。
  • 由于所有的信息传输都没有在传输我们双方各自的密钥,所以黑客没有机会获取到我们的密钥,只要暴力破解,但是由于暴力破解需要时间,即使破解出来我们时间戳超时了也会将其丢弃信息包。
  • 每一次的对话都是为下一次对话做准备,比如第二次KDC使用客户端请求的服务的那一个服务器的密钥进行加密发过去给客户端即:ST票据,客户端是无法解密的,需要他自己封装一份信息包,然后把ST也一起发过去给最后的Server,Server端用自己的密钥解密第二份信息包,然后与第一份客户端自己封装加密的信息包信息进行对比,确认无误就认证成功。
  • 很容易发现这个过程中,每一次对话都会使用不同的密钥进行加密,并且产生会话密钥,同时含有时间戳,即使密钥被暴力破解了,也会超过对应的忍受时间,即会话时间结束额。kerberos认证系统总体还是很安全的,主要是要选择信任的KDC,如果我们的KDC被攻陷了,那就没办法了,裤衩都被骗走了。

网络安全—Kerberos认证系统的更多相关文章

  1. Kerberos认证浅析

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

  2. Kerberos认证原理及基于Kerberos认证的NFS文件共享

    目录 Kerberos认证原理 简介 client访问server过程 一.Authentication Service Exchange (AS Exchange) 二.Ticket Grantin ...

  3. hadoop的kerberos认证

    言归正传,介绍过hadoop的simple认证和kerberos后,我们在这一章介绍hadoop的kerberos认证 我们还使用hadoop集群的机器. OS 版本: Centos6.4 Kerbe ...

  4. Kerberos认证流程详解

    Kerberos是诞生于上个世纪90年代的计算机认证协议,被广泛应用于各大操作系统和Hadoop生态系统中.了解Kerberos认证的流程将有助于解决Hadoop集群中的安全配置过程中的问题.为此,本 ...

  5. 01: kerberos认证原理

    1.1 kerberos认证浅析 1.kerberos定义 1. Kerberos 是一种网络认证协议,其设计目标是通过密钥系统为客户机 / 服务器应用程序提供强大的认证服务. 2. Kerberos ...

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

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

  7. yarn 用户导致的被挖矿 启用Kerberos认证功能,禁止匿名访问修改8088端口

    用户为dr.who,问下内部使用人员,都没有任务在跑: 结论: 恭喜你,你中毒了,攻击者利用Hadoop Yarn资源管理系统REST API未授权漏洞对服务器进行攻击,攻击者可以在未授权的情况下远程 ...

  8. spark 2.x在windows环境使用idea本地调试启动了kerberos认证的hive

    1 概述 开发调试spark程序时,因为要访问开启kerberos认证的hive/hbase/hdfs等组件,每次调试都需要打jar包,上传到服务器执行特别影响工作效率,所以调研了下如何在window ...

  9. 域渗透基础之Kerberos认证协议

     本来昨晚就该总结整理,又拖到今天早上..6点起来赶可还行 0x01 Kerberos前言 Kerberos 是一种由 MIT(麻省理工大学)提出的一种网络身份验证协议.它旨在通过使用密钥加密技术为客 ...

  10. CDH构建大数据平台-配置集群的Kerberos认证安全

     CDH构建大数据平台-配置集群的Kerberos认证安全 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 当平台用户使用量少的时候我们可能不会在一集群安全功能的缺失,因为用户少,团 ...

随机推荐

  1. #分治#洛谷 5502 [JSOI2015]最大公约数

    题目 分析 又是一道思维题,考虑用分治,选取左边或右边的基准尽量扩展长度,时间复杂度\(O(nlog_2n)\) 代码 #include <cstdio> #include <cct ...

  2. #链表#洛谷 3794 签到题IV

    题目 给出一个长度为\(n\)的数列\(a\),求 \[\sum_{i=1}^n\sum_{j=i}^n[\gcd(a_{i\sim j})\;xor\;or(a_{i\sim j})=k] \] 分 ...

  3. GitHub互赞快速涨星,最简单的涨星方法

    ​各位代码们,是不是厌倦了在GitHub上孤独地刷着自己的项目页面,眼巴巴地等待那星星数的涨幅?今天给大家安利一个超级实用的新玩意儿--涨星互助平台,一个让你的GitHub项目星星数飞起来的秘密基地! ...

  4. 如何使用DevEco Studio创建Native C++应用

    简介 本篇主要介绍如何使用DevEco Studio for OpenAtom OpenHarmony (以下简称"OpenHarmony")创建一个Native C++应用.应用 ...

  5. [原创工具] 病毒整理器V0.98

    最近由于各种需要,所以开发了一个. RT,下载地址: 链接:https://pan.baidu.com/s/1Kxd77-n3fbPZQm_CIH6LTA 提取码:xq8f 很简单的一个小工具,以后还 ...

  6. 最全能的AI换脸软件,FaceFusion下载介绍(可直播)

    FaceFusion是一款多功能的AI换脸软件,它不仅能图片.视频换脸,还可以直播换脸,换脸效果真实.自然 与大多数换脸软件不同的是,FaceFusion不仅支持N卡处理程序(Azure),还额外提供 ...

  7. 重新点亮linux 命令树————文本查看vi和vim[五]

    前言 简单整理一下vi和vim,主要介绍一下四种模式. 正文 四种模式分别是: 正常模式(normal-mode) 插入模式(insert-mode) 命令模式(command-mode) 可视模式( ...

  8. 第四章:if else switch使用

    /* * @Issue: 输入整数a和b,若a²+b²大于100,则输出a²+b²之和的百位以上的数字,否则直接输出a²+b²的和 * @Author: 一届书生 * @LastEditTime : ...

  9. Mui 消息推送

    一.push通过H5+实现 简单实现方式:通过轮询服务器是否有新消息推送过来 mui.plusReady(function() {plus.navigator.closeSplashscreen(); ...

  10. c#程序员必学清单

    必读书目:1. "Effective C#: 50 Specific Ways to Improve Your C#" by Bill Wagner2. "CLR via ...