【网络安全】图解 Kerberos:身份认证

图解 Kerberos:身份认证

  • 1.什么是 Kerberos ?
  • 2.Kerberos 基本概念
    • 2.1 基本概念
    • 2.2 KDC
  • 3.Kerberos 原理
    • 3.1 客户端与 Authentication Service
    • 3.2 客户端与 Ticket Granting Service
    • 3.3 客户端与 HTTP Service

Kerberos 是一种身份认证协议,被广泛运用在大数据生态中,甚至可以说是大数据身份认证的事实标准。本文将详细说明 Kerberos 原理。

1.什么是 Kerberos ?

Kerberos 一词来源于古希腊神话中的 Cerberus —— 守护地狱之门的三头犬。下图是 Kerberos 的 LOGO。

在这里插入图片描述
一句话来说,Kerberos 是一种基于加密 Ticket 的身份认证协议。Kerberos 主要由三个部分组成:Key Distribution Center(KDC)ClientService。 大致关系如下图所示:

在这里插入图片描述
客户端会先访问两次 KDC,然后再访问目标 Service,如:HTTP 服务。

2.Kerberos 基本概念

2.1 基本概念

(1)Principal:大致可以认为是 Kerberos 世界的用户名,用于标识身份。Principal 主要由三部分构成:primaryinstance(可选)和 realm

  • 包含 instancePrincipal,一般会作为 Server 端的 Principal,如:NameNode,HiverServer2,Presto Coordinator 等。
  • 不含有 instancePrincipal,一般会作为 Client 端的 Principal,用于身份认证。

在这里插入图片描述
(2)Keytab:密码本。包含了多个 principal 与密码的文件,用户可以利用该文件进行身份认证。

(3)Ticket Cache:客户端与 KDC 交互完成后,包含身份认证信息的文件,短期有效,需要不断 renew

(4)Realm:Kerberos 系统中的一个 namespace。不同 Kerberos 环境,可以通过 realm 进行区分。

2.2 KDC

Key Distribution Center(KDC),是 Kerberos 的核心组件,主要由三个部分组成:

  • Kerberos Database:包含了一个 Realm 中所有的 Principal、密码与其他信息。(默认:Berkeley DB)
  • Authentication Service(AS):进行用户信息认证,为客户端提供 Ticket Granting TicketsTGT)。
  • Ticket Granting Service(TGS):验证 TGT 与 Authenticator,为客户端提供 Service Tickets

3.Kerberos 原理

在深入了解 Kerberos 原理之前,先介绍一下 Kerberos 协议的几个大前提,帮助大家理解:

  • Kerberos 基于 Ticket 实现身份认证,而非密码。如果客户端无法利用本地密钥,解密出 KDC 返回的加密 Ticket,认证将无法通过。
  • 客户端将依次与 Authentication Service,Ticket Granting Service 以及目标 Service 进行交互,共三次交互。
  • 客户端与其他组件交互都将获取到两条信息,其中一条可以通过本地密钥解密出,另外一条将无法解密出。
  • 户端想要访问的目标服务,将不会直接与 KDC 交互,而是通过能否正确解密出客户端的请求来进行认证。
  • KDC Database 包含有所有 Principal 对应的密码。
  • Kerberos 中信息加密方式一般是对称加密(可配置成非对称加密)。

下面,我们将以客户端访问 HTTP 服务为例,解释整个认证过程。

3.1 客户端与 Authentication Service

第一步,客户端通过 kinit USERNAME 或其他方式,将 客户端 ID目标 HTTP 服务 ID网络地址(可能是多个机器的 IP 地址列表,如果想在任何机器上使用,则可能为空),以及 TGT 有效期的寿命 等信息发送给 Authentication Service。

在这里插入图片描述
第二步,Authentication Server 将检查客户端 ID 是否在 KDC 数据库中。

在这里插入图片描述
如果 Authentication Server 检查操作没有异常,那么 KDC 将随机生成一个 Key,用于客户端与 Ticket Granting Service(TGS)通信。这个 Key,一般被称为 TGS Session Key。随后 Authentication Server 将发送 两条信息 给客户端。示意图如下:

在这里插入图片描述
其中一条信息被称为 TGT,由 TGS 的密钥加密,客户端无法解密,包含 客户端 IDTGS Session Key 等信息。

另一条信息由客户端密钥加密,客户端可以正常解密,包含 目标 HTTP 服务 IDTGS Session Key 等信息。

第三步,客户端利用本地的密钥解密出第二条信息。如果本地密钥无法解密出信息,那么认证失败。示意图如下:

在这里插入图片描述

3.2 客户端与 Ticket Granting Service

这时候,客户端有了 TGT(由于本地没有 TGS 的密钥,导致无法解密出其数据)与 TGS Session Key

第四步,客户端将:

  • 将 AS 发送过来的 TGT(由 TGS 密钥加密)转发给 TGS。
  • 将包含自身信息的 Authenticator (由 TGS Session Key 加密)发送给 TGS。

在这里插入图片描述
第五步,TGS 将利用自身的密钥从 TGT 中解密出 TGS Session Key,然后利用 TGS Session Key 从 Authenticator 中解密出客户端的信息。

在这里插入图片描述
TGS 解密出所有信息后,将进行身份检查,进行认证:

  • 将客户端 ID 与 TGT 的客户端 ID 进行比较。
  • 比较来自 Authenticator 的时间戳和 TGT 的时间戳(典型的 Kerberos 系统的容忍度是 2 2 2 分钟,但也可以另行配置)。
  • 检查 TGT 是否过期。
  • 检查 Authenticator 是否已经在 TGS 的缓存中(为了避免重放攻击)。

当所有检查都通过后, TGS 随机生成一个 Key 用于后续客户端与 HTTP 服务交互时进行通信加密使用,即 HTTP Session Key。同样地,TGS 将发送 两条信息 给客户端:其中一条是 HTTP Ticket,由 HTTP 服务的密钥进行加密;另一条则由 TGS Session Key 加密,包含了客户端信息与时间戳。

在这里插入图片描述
第六步,客户端将利用 TGS Session Key 解密出其中一条信息,另一条信息由于是由目标 HTTP 服务加密,无法解密。

在这里插入图片描述

3.3 客户端与 HTTP Service

这时候,客户端有了 HTTP Ticket(由于本地没有 HTTP 服务的密钥,导致无法解密出其数据)与 HTTP Service Session Key

第七步,客户端将:

  • 将 TGS 发送过来的 HTTP Ticket(由 HTTP 密钥加密)转发给目标 HTTP 服务。
  • 将包含自身信息的 Authenticator(由 HTTP Service Session Key 加密)发送给 HTTP 服务。

在这里插入图片描述
:上图中 Ticket for HTTP Service 中装的应该是 HTTP Service Session Key,而不是 TGS Session Key,有一点小错误,注意甄别。

第八步,HTTP 服务首先利用自身的密钥解密出 HTTP Ticket 的信息,得到 HTTP Service Session Key;随后,利用 HTTP Service Session Key 解密出用户的 Authenticator 信息。

在这里插入图片描述

信息解密完成后,HTTP 服务同样需要做一些信息检查:

  • 将 Authenticator 中的客户端 ID 与 HTTP Ticket 中的客户端 ID 进行比较。
  • 比较来自 Authenticator 的时间戳和 HTTP Ticket 的时间戳(典型的 Kerberos 系统对差异的容忍度是 2 2 2 分钟,但也可以另行配置)。
  • 检查 Ticket 是否过期。
  • 检查 Authenticator 是否已经在 HTTP 服务器的缓存中(为了避免重放攻击)。

然后,HTTP 服务会发送包含其 ID 和时间戳的身份验证器消息,以便向您确认其身份,并使用 HTTP Service Session Key 进行加密。

在这里插入图片描述
您的机器通过使用缓存的 HTTP Service Session Key 解密来读取身份验证器消息,并知道它必须接收带有 HTTP 服务 ID 和时间戳的消息。

在这里插入图片描述
现在,您已通过身份验证,可以使用 HTTP 服务。未来的请求将使用缓存的 HTTP Service Ticket,只要它没有按照生命周期属性中的定义过期即可。

在这里插入图片描述


参考如下:

  • Explain like I’m 5: Kerberos
  • Introduction To Kerberos
  • 一文搞定 Kerberos

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

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

相关文章

Java事件机制简介 内含面试题

面试题分享 云数据解决事务回滚问题 点我直达 2023最新面试合集链接 2023大厂面试题PDF 面试题PDF版本 java、python面试题 项目实战:AI文本 OCR识别最佳实践 AI Gamma一键生成PPT工具直达链接 玩转cloud Studio 在线编码神器 玩转 GPU AI绘画、AI讲话、翻译,GPU点亮…

预推免,保研------长安大学保内,附加分面试准备【记录帖】

🚀长安大学——人工智能系——程惠泽 🚌前六学期专业排名:9/82 🚌信息门户GPA:3.94 🚌平均成绩:89.83 🚌加权成绩:89.15 / ☁️本人比较菜,只能保研本校&…

centos 端口被占用的快速排查方式

问题笔记 centos 端口被占用的快速排查方式 centos 端口被占用的快速排查方式 这里说一个我刚刚遇到的问题,解决步骤用来记录,方便以后自己查询。 nginx配置完index.html测试文件,发现一直显示的404页面。 我跑到服务器上想重启一下nginx …

强大易用的开源 建站工具Halo

特点 可插拔架构 Halo 采用可插拔架构,功能模块之间耦合度低、灵活性提高。支持用户按需安装、卸载插件,操作便捷。同时提供插件开发接口以确保较高扩展性和可维护性。 ☑ 支持在运行时安装和卸载插件 ☑ 更加方便地集成三方平台 ☑ 统一的可配置设置表…

《自然语言处理(NLP)的最新进展:Transformers与GPT-4的浅析》

🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁 🦄 博客首页——🐅🐾猫头虎的博客🎐 🐳 《面试题大全专栏》 🦕 文章图文…

2023年9月11日-9月16日(上午熟悉公司代码,周一到周五晚上优先工作所急视频教程,其他业余时间进行ue视频教程,为独立游戏做准备)

按照规划,上午熟悉公司源码,下午进行filament和ue渲染,晚上写工作代码。回家后泛读pbrt或者其他书籍催眠。 业余学习ue的各种视频教程,为独立游戏做准备(公司也实行末位淘汰,给自己留条后路)。累…

openGauss学习笔记-65 openGauss 数据库管理-创建和管理数据库

文章目录 openGauss学习笔记-65 openGauss 数据库管理-创建和管理数据库65.1 前提条件65.2 背景信息65.3 注意事项65.4 操作步骤65.4.1 创建数据库65.4.2 查看数据库65.4.3 修改数据库65.4.4 删除数据库 openGauss学习笔记-65 openGauss 数据库管理-创建和管理数据库 65.1 前提…

解决deepspeed框架的bug:不保存调度器状态,模型训练重启时学习率从头开始

deepspeed存在一个bug,即在训练时不保存调度器状态,因此如果训练中断后再重新开始训练,调度器还是会从头开始而不是接着上一个checkpoint的调度器状态来训练。这个bug在deepspeed的github中也有其他人提出:https://github.com/mic…

k8s中的容器

目录 容器容器的状态容器的重启策略pause容器init容器 容器 容器的状态 Running(运行中):容器正在运行并且正常工作。Waiting(等待中):容器正在等待某些条件满足,例如等待其他容器就绪、等待网…

微信小程序——如何获取到输入框的值

在微信小程序中&#xff0c;可以通过以下几种方式来获取输入框的值&#xff1a; 使用 bindinput 绑定输入事件&#xff0c;通过 event.detail.value 获取输入框的值。具体操作如下&#xff1a; <input bindinput"onInput" placeholder"请输入内容">…

Google 开源库Guava详解(集合工具类)—Maps、Multisets、Multimaps

一、Maps Maps有许多很酷的实用程序&#xff0c;值得单独解释。 1、uniqueIndex Maps.uniqueIndex&#xff08;Iterable&#xff0c;Function&#xff09;解决了一个常见的情况&#xff0c;即有一堆对象&#xff0c;每个对象都有一些唯一的属性&#xff0c;并希望能够根据该…

Neo4j 基本语法

一、基本语法 1、新建节点 &#xff08;1&#xff09;基本语法&#xff1a; () 代表节点 示例&#xff1a; CREATE (u:User {uid:970939424 }) // 节点类型为User&#xff0c;属性值为uid970939424CREATE (u:Round {rid:7194842697444819113 }) // 节点类型为Rou…

【广州华锐互动】AR技术在配电系统运维中的应用

随着科技的不断发展&#xff0c;AR(增强现实)技术逐渐走进了我们的生活。在电力行业&#xff0c;AR技术的应用也为巡检工作带来了许多新突破&#xff0c;提高了巡检效率和安全性。本文将从以下几个方面探讨AR配电系统运维系统的新突破。 首先&#xff0c;AR技术可以实现虚拟巡检…

数据仓库-核心概念

数据仓库 数据仓库&#xff0c;英文名称为Data Warehouse&#xff0c;可简写为DW或DWH。数据仓库&#xff0c;是为企业所有级别的决策制定过程&#xff0c;提供所有类型数据支持的战略集合。它是单个数据存储&#xff0c;出于分析性报告和决策支持目的而创建。为需要业务智能的…

<图像处理> 空间滤波基础

空间滤波基础 图像滤波是一种常见的图像处理技术&#xff0c;用于平滑图像、去除噪音和边缘检测等任务。图像滤波的基本原理是在进行卷积操作时&#xff0c;通过把每个像素的值替换为该像素及其邻域的设定的函数值来修改图像。 预备知识&#xff1a;可分离滤波核、边缘填充。…

Vue知识系列(1)每天10个小知识点

目录 系列文章目录知识点**1. Vue修饰符**的概念、作用、原理、特性、优点、缺点、区别、使用场景**2. 双向数据绑定**的概念、作用、原理、特性、优点、缺点、区别、使用场景**3. MVVM、MVC、MVP** 的概念、作用、原理、特性、优点、缺点、区别、使用场景**4. slot** 的概念、…

Android Jetpack架构组件库:Hilt

一、开发者官网关于Hilt库使用链接如下 使用 Hilt 实现依赖项注入 Hilt版本说明 二、工程目录图 请点击下面工程名称&#xff0c;跳转到代码的仓库页面&#xff0c;将工程 下载下来 Demo Code 里有详细的注释 代码&#xff1a;LearnJetpack-hilt&#xff1a;hilt版本2.48 代…

Redis集群3.2.11离线安装详细版本(使用Ruby)

1.安装软件准备 1.Redis版本下载 Index of /releases/http://download.redis.io/releases/ 1.2gcc环境准备 GCC(GNU Compiler Collection,GNU编译器套件)是一套用于编译程序代码的开源编译器工具集。它的主要用途是将高级编程语言(如C、C++、Fortran等)编写的源代码转换…

【项目 计网12】4.32UDP通信实现 4.33广播 4.34组播 4.35本地套接字通信

文章目录 4.32UDP通信实现udp_client.cudp_server.c 4.33广播bro_server.cbro_client.c 4.34组播multi_server.cmulti_client.c 4.35本地套接字通信ipc_server.cipc_client.c 4.32UDP通信实现 udp_client.c #include <stdio.h> #include <stdlib.h> #include <…

vmware网卡(网络适配器)桥接、NAT、仅主机3种模式解析

Bridged&#xff08;桥接模式&#xff09;、NAT&#xff08;网络地址转换模式&#xff09;、Host-Only&#xff08;仅主机模式&#xff09; Windows系统安装好vmware后&#xff0c;在网络连接中会生成VMnet1和VMnet8两个虚拟网卡。 VMnet1作用于仅主机模式&#xff0c;VMnet8作…