Kerberos认证系统

文章目录

  • 前提知识
  • 原理
    • 第一次对话
    • 第二次对话
    • 第三次对话
  • 总结发现

前提知识

  • 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被攻陷了,那就没办法了,裤衩都被骗走了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/145165.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

一文搞定接口自动化测试框架搭建orPytest_知识点总结

pytest编写的规则: 1、测试文件以test_开头(以_test结尾也可以) 2、测试类以Test开头,并且不能带有__init__方法 3、测试函数以test_开头 4、断言必须使用assert pytest.main([-s,-v]) :用来执行测试用例 -s 打印prin…

【JUC】五、线程的第三种创建方式 Callable

文章目录 1、Callable概述2、FutureTask Java基础中,了解到的创建线程的两种方式为: 继承Thread类实现Runnable接口 除了以上两种,还可以通过: Callable接口(since JDK1.5)线程池方式 1、Callable概述 …

JavaScript_表单校验用户名和密码

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>注册页面</title><style>*{margin: 0px;padding: 0px;box-sizing: border-box;}body{background: url("img/register_bg.png") …

1m照片尺寸怎么调?三个方法解决!

为了满足不同的需求&#xff0c;比如上传到网站、存储在移动设备上或传输给他人等&#xff0c;将照片尺寸调整到1M可以有效地减少照片占用的存储空间&#xff0c;同时保持相对较高的图像质量。下面三种好用的方法。 方法一&#xff1a;使用嗨格式压缩大师 1、打开软件&#xf…

thinkphp5 原生sql查询及取返回值

刚接触php&#xff0c;以前大量数据库都是直接写sql的&#xff0c;方便&#xff0c;好管理&#xff0c; 用thinkphp后&#xff0c;发现没有sql&#xff0c;对mvc模式还没深入了解&#xff0c;但这边要在上面写一些接口&#xff0c;有涉及数据库查询&#xff0c;修改等&#xf…

map\set封装

目录 1. set和map的底层结构1.1 红黑树1.2 set1.3 map 2. 模拟实现2.1 红黑树2.1 map和set以及仿函数2.3 迭代器2.3.1 const迭代器 2.3 set和map封装 1. set和map的底层结构 1.1 红黑树 这两个容器底层都是对红黑树的封装&#xff0c;因此需要先看一下红黑树结构部分的底层源…

基于免费敏捷工具Leangoo领歌的Scrum敏捷管理实践

Leangoo领歌是一款永久免费的专业的敏捷开发管理工具&#xff0c;提供端到端敏捷研发管理解决方案&#xff0c;涵盖敏捷需求管理、任务协同、进展跟踪、统计度量等。 Leangoo领歌上手快、实施成本低&#xff0c;可帮助企业快速落地敏捷&#xff0c;提质增效、缩短周期、加速创新…

医学生画图ppt

微信回复&#xff1a;素材 领取

中睿天下Coremail | 2023年Q3企业邮箱安全态势观察报告

10月25日&#xff0c;北京中睿天下信息技术有限公司联合Coremail邮件安全发布《2023年第三季度企业邮箱安全性研究报告》。2023年第三季度企业邮箱安全呈现出何种态势&#xff1f;作为邮箱管理员&#xff0c;我们又该如何做好防护&#xff1f; 以下为精华版阅读&#xff0c;如需…

Java日志规范总结

打印异常错误 正确应该是&#xff1a; 或者带上入参异常 没有意义的日志 最好带上参数&#xff0c;否则不知道这条日志代表什么意义。 日志不全 这种返回值日志尽量带上全部信息&#xff0c;排查的时候&#xff0c;只用错误信息是排查不出来问题的&#xff0c;顺丰那边…

【10套模拟】【3】

关键字&#xff1a; 物理存储、完全二叉树、出栈入栈时间复杂度、线索二叉树

数据同步工具调研选型:SeaTunnel 与 DataX 、Sqoop、Flume、Flink CDC 对比

产品概述 Apache SeaTunnel 是一个非常易用的超高性能分布式数据集成产品&#xff0c;支持海量数据的离线及实时同步。每天可稳定高效同步万亿级数据&#xff0c;已应用于数百家企业生产&#xff0c;也是首个由国人主导贡献到 Apache 基金会的数据集成顶级项目。 SeaTunnel 主…

跨境国际快递物流API:加速全球贸易的关键

引言 全球贸易的蓬勃发展在今日商业中扮演着至关重要的角色。而随着全球市场的扩大和商业界的日益复杂化&#xff0c;跨境国际快递物流API正成为推动全球贸易加速发展的关键因素。 为何说跨境国际快递物流API是加速全球贸易的关键&#xff1f; 连接全球商业网络 跨境国际快…

算法训练 第七周

一、最小栈 本题要求我们实现一个最小栈数据结构&#xff0c;要求它可以实现栈的基本功能&#xff0c;并且还能使用常数时间复杂度来获取栈中的最小值。 1.辅助栈 我们可以在普通栈的基础上再添加一个维护最小值的辅助栈来实现这个数据结构&#xff0c;我们先创建一个普通的栈…

【蓝桥杯选拔赛真题68】Scratch打地鼠游戏 少儿编程scratch图形化编程 蓝桥杯创意编程选拔赛真题解析

目录 scratch打地鼠游戏 一、题目要求 编程实现 二、案例分析 1、角色分析

目标检测,行人检测,出现了检测框和人物不在一起的情况,怎么解决---一定是配置文件的原因

今天测试发现人物检测有结果输出&#xff0c;但是发现检测出来的检测框和人物不匹配 但是奇怪的的是在orin中可以 再nx中就不行 结局复制所有orin的程序到nx就可以运行&#xff0c;最后对比配置文件发现是配置文件里不一样 dstest3_config.xml里的tiler不一样 orin中的 tiler: …

SAP ABAP 主动调用外部系统的REST接口(x-www-form-urlencoded)

如何在SAP ECC中调用外部系统提供的REST接口地址&#xff1f; Postman中使用Body中参数情况&#xff0c;使用链接的情况 x-www-form-urlencoded POST成功调用样例如下&#xff1a; SAP中实现如下&#xff1a; 1. 事务码STRUST,导入对方系统证书 2. 事务码SM59配置destinati…

接口测试需要验证数据库么?

&#x1f4e2;专注于分享软件测试干货内容&#xff0c;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff01;&#x1f4e2;交流讨论&#xff1a;欢迎加入我们一起学习&#xff01;&#x1f4e2;资源分享&#xff1a;耗时200小时精选的「软件测试」资…

一篇美创科技“中国政务云数据安全领导者实践”案例,分享给大家

政务云作为数字政府建设的底座和基石&#xff0c;经过多年高速建设&#xff0c;已覆盖了我国80%以上地市及经济发达的县域。政务云的业务承载率、数据汇聚率不断提升&#xff0c;对数据安全的需求也进一步提高。加强政务云数据安全建设&#xff0c;成为政务云建设中不可绕过的关…

SpringBoot项目集成发邮件功能

1&#xff1a;引入依赖2&#xff1a;配置设置3&#xff1a;授权码获取&#xff1a;4&#xff1a;核心代码5&#xff1a;postman模拟验证6&#xff1a;安全注意 1&#xff1a;引入依赖 <dependency><groupId>org.apache.commons</groupId><artifactId>c…