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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python爬虫抓取微博数据及热度预测

首先我们需要安装 requests 和 BeautifulSoup 库,可以使用以下命令进行安装: pip install requests pip install beautifulsoup4然后,我们需要导入 requests 和 BeautifulSoup 库: import requests from bs4 import BeautifulSou…

No203.精选前端面试题,享受每天的挑战和学习

🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云课上架的前后端实战课程《Vue.js 和 Egg.js 开发企业级健康管理项目》、《带你从入…

小H靶场学习笔记:DC-2

DC-2 Created: November 10, 2023 3:01 PM Tags: WordPress, git提权, rbash逃逸 Owner: 只会摸鱼 靶场过程 信息收集 扫描存活主机,找到靶机ip:192.168.199.131(本机是192.168.199.129) 扫描端口开放协议 发现有80端口和77…

2023nacos源码解读第3集——nacos-client核心功能之微服务调用和配置管理测试

文章目录 1、测试项目2、项目注意事项3、 测试核心功能3.1 测试服务调用与负载均衡3.2 测试配置监听 4、参考文档 1、测试项目 项目地址 nacos-service-a nacos-service-b 2、项目注意事项 项目初始化可以使用aliyun spring initializer ,以更方便的使用springcloud alibaba…

hive里因为列名用了关键字导致建表失败

代码 现象 ParseException line 6:4 cannot recognize input near percent String COMMENT in column name or primary key or foreign key 23/11/13 11:52:57 ERROR org.apache.hadoop.hive.ql.Driver: FAILED: ParseException line 6:4 cannot recognize input near percent …

雷达测角原理、测角精度、测角分辨率以及3DFFT角度估计算法汇总

1.角度测量方法 依据:电磁波的直线传播和雷达天线的方向性。 分类:振幅法测角、相位法测角 1.1 相位法测角 相位法测角利用多个天线所接收回波信号之间的相位差进行测角。如下图所示; 图 1 设在θ方向有一远区目标,则到达接收点…

一个破单机,也要用远程缓存?

大家好,豆小匠终于开始Coding了,这期来聊聊实战相关的杂谈。 正文开始! 作为编程萌新的时候,总想着把程序做复杂,堆技术栈。 但是程序是为场景服务的,比如,我想提高接口的响应速度&#xff0c…

Linux应用层点亮硬件的LED灯

一 应用层操作硬件的两种方法 应用层想要对底层硬件进行操控,通常可以通过两种方式: /dev/目录下的设备文件(设备节点);/sys/目录下设备的属性文件。 具体使用哪种方式需要根据不同功能类型设备进行选择,通…

vscode设置vue3代码格式化

vscode设置vue3代码格式化 vscode设置vue3代码格式化 下载插件设置格式化时选用的插件实际使用 使用Prettier默认配置使用Prettier添加自定义配置使用Volar 完整配置文件参考链接 下载插件 可以使用Volar或Prettier 设置格式化时选用的插件 mac:【shift】【op…

【C++】类与对象 I

类与对象 I : 前言:(C)面向过程 和(C)面向对象 初步认识前言:类的引入一、类的介绍二、类的定义(一)class 语法(二)类的两种定义方式:…

【MySql系列】深入解析数据库索引

写在前面 MySQL索引是数据库中一个关键的概念,它可以极大地提高查询性能,加快数据检索速度。但是,要充分发挥索引的作用,需要深入理解它们的工作原理和使用方式。 在本文中,我们将深入解析MySQL索引,探讨它…

JavaWeb——CSS3的使用

目录 1. CSS概述 2. CSS引入方式 3. CSS颜色显示 4. CSS选择器 4.1. 元素(标签)选择器 4.2. id选择器 4.3. 类选择器 4.4. 三者优先级 5. 盒子模型 1. CSS概述 CSS,全称为“Cascading Style Sheets”,中文译为“层叠样式…

OpenMediaVault控制台web页面密码重置

要重置 OpenMediaVault(OMV)Web 控制台的密码,可以使用 omv-firstaid 命令行工具中的相应选项。按照以下步骤进行操作: 以管理员权限登录到 OMV 的命令行界面(通过 SSH 或直接登录)。 ssh登陆到root用户 运…

【数据仓库】数仓分层方法详解与层次调用规范

文章目录 一. 数仓分层的意义1. 清晰数据结构。2. 减少重复开发3. 方便数据血缘追踪4. 把复杂问题简单化5. 屏蔽原始数据的异常6. 数据仓库的可维护性 二. 如何进行数仓分层?1. ODS层2. DW层2.1. DW层分类2.2. DWD层2.3. DWS 3. ADS层 4、层次调用规范 一. 数仓分层…

25.4 MySQL 函数

1. 函数的介绍 1.1 函数简介 在编程中, 函数是一种组织代码的方式, 用于执行特定任务. 它是一段可以被重复使用的代码块, 通常接受一些输入(参数)然后返回一个输出. 函数可以帮助开发者将大型程序分解为更小的, 更易于管理的部分, 提高代码的可读性和可维护性.函数在编程语言…

[01]汇川IMC30G-E系列运动控制卡应用笔记

简介 IMC30G-E系列产品是汇川技术自主研制的高性能EtherCAT网络型运动控制器(卡),同时兼容脉冲轴的控制;IMC30G-E支持点位/JOG、插补、多轴同步、高速位置比较输出、PWM等全面的运动控制功能,具备高同步控制精度。 开发…

修改Openwrt软路由的web端口

如何修改openwrt路由器的web访问端口号? 在OpenWrt路由器上,如何修改Web访问端口号,通常涉及到修改HTTP服务器的配置文件。默认情况下,OpenWrt使用的HTTP服务器是uHTTPd。 以下是修改Web访问端口号的步骤: 一、通过…

Linux编辑器:vim的简单介绍及使用

目录 1.什么是vim 2.vim的基本概念 3.vim 的基本操作 4. 各模式下的命令集 4.1 正常模式命令集 4.2 末行模式命令集 5.补充 5.1 vim支持多文件编辑 5.2 vim 的配置 1.vim 配置原理 2. 常用简单配置选项: 3. 使用插件 1.什么是vim Vim 是从 vi 发展出…

Easyui DataGrid combobox联动下拉框内容

发票信息下拉框联动,更具不同的发票类型,显示不同的税率 专票 普票 下拉框选择事件 function onSelectType(rec){//选中值if (rec2){//普通发票对应税率pmsPlanList.pmsInvoiceTaxRatepmsPlanList.pmsInvoiceTaxRateT}else {//专用发票对应税率pmsPlan…

nmap原理与使用

kali的命令行中可以直接使用 nmap 命令,打开一个「终端」,输入 nmap 后回车,可以看到 nmap 的版本,证明 nmap 可用。 一、端口扫描 扫描主机的「开放端口」,在nmap后面直接跟主机IP(默认扫描1000个端口&am…