Kerberos 概述:介绍网络身份验证

本文涉及的产品
密钥管理服务KMS,1000个密钥,100个凭据,1个月
简介: Kerberos 概述:介绍网络身份验证

什么是 Kerberos?

Kerberos 是一种计算机网络身份验证协议,旨在简化和保护身份验证。

Kerberos 的中心思想围绕着使用一种本地形式的个人标识,称为由身份验证服务器授予的票据。 每张票都属于特定的领域,这些领域决定了票授予访问的服务。这些票是加密的,需要多级解密才能使用。该票证系统确保永远不会通过网络发送密码等敏感信息。

自 1980 年代在麻省理工学院创建以来,Kerberos 已得到广泛应用。现在,它被构建到网络上无数依赖于安全的实现中,几乎所有公司每天都至少与一个 Kerberos 系统进行交互。

Kerberos 最广为人知的用途是用于 Microsoft 的 Active Directory,它是 Windows 2000 及更高版本中包含的默认目录服务,用于控制域和验证用户。

苹果、美国国家航空航天局、谷歌、美国国防部和美国各地的大学也有其他突出用途。

网络异常,图片无法展示
|

Kerberos 的好处

Kerberos 因其简便性和无与伦比的数据安全性而得到如此广泛的应用。这里只是它的一些好处:

  • 安全:  Kerberos 从不通过网络传输密码。相反,Kerberos 通过发送限时加密消息来证明用户身份,这些消息在设定的时间段后失效。就算信息被截获解密,分分钟也没用!
  • 单点登录:  Kerberos 仅要求用户在首次验证客户端时输入一次密码。从那时起,用户可以访问 Kerberos 领域内的所有 Kerberos 化服务,而无需重新输入密码。单点登录通过消除多个登录要求的麻烦简化了使用多个服务的过程。

受信任的第三方:  Kerberos 使用称为密钥分发中心 (KDC) 的集中式身份验证服务器,默认情况下网络中的所有其他设备都信任该服务器。所有身份验证请求(例如加密消息)都通过此服务器进行路由。这种外包确保敏感信息不会存储在本地机器上。

  • 相互身份验证: 在 Kerberos 中,通信的两端都必须经过身份验证才能允许通信。相互身份验证极大地降低了欺诈行为者欺骗系统发送机密信息的能力。

相互认证的例子:

使用 Kerberos 的网络中的用户可以向邮件服务器进行身份验证,以证明他们是他们声称的人。另一方面,邮件服务器还必须验证它是真正的邮件服务器,而不是网络中伪装成邮件服务器的其他服务。如果双方都通过了身份验证,则建立连接。

[]Kerberos 的核心组件

[]密钥分发中心

密钥分发中心 (KDC) 是 Kerberos 的中央进程,包含身份验证服务器 (AS) 和票证授予服务 (TGS)。它的主要功能是作为这两者之间的中介,中继来自 AS 的消息,授予票证授予票证 (TGT),然后将其传递给 TGS 进行加密。在这个 pass-off 之后,KDC 在身份验证过程中几乎没有影响。

[]票证授予票证

此票证是在客户端成功通过身份验证后由 KDC 授予的。TGT 是加密的,包含有关客户端可以访问哪些服务、授予访问权限多长时间以及用于与客户端通信的会话密钥的权限。

客户端无法解密 TGT,因为他们没有 TGS 密钥。因此,他们必须盲目地将 TGT 呈现给所需的服务(可以访问 TGS)并允许服务决定客户端是否可以访问它。

通过对客户端隐藏 TGT,Kerberos 可防止客户端以欺诈方式复制或更改权限。

认证服务器

身份验证服务器是使用 Kerberos 进行身份验证的第一站。客户端首先必须使用用户名和密码登录向 AS 验证自己。

完成后,AS 将用户名转发给 KDC,KDC 进而授予 TGT。如果不完成这第一步,客户端就无法与 Kerberos 系统的任何其他部分进行交互。

票据授予服务

票证授予服务充当持有 TGT 的客户端和网络上各种服务之间的看门人。当客户端想要访问服务时,他们必须向 TGS 出示他们的 TGT。

然后 TGS 对 TGT 进行身份验证并建立服务器和客户端共享的会话密钥。如果 TGS 确认客户端 TGT 包括对所需服务的访问权限,则客户端被授予请求服务的访问权限。

Kerberos 是如何工作的?

网络异常,图片无法展示
|

Kerberos 身份验证分为 4 个阶段,根据交互的组件进行区分:

  • 用户/客户登录: 此阶段的交互发生在用户和客户之间。用户将他们的用户名和密码信息输入客户端。然后客户端将该密码转换为本地存储的密钥。如果正确完成,客户端可以开始使用 AS 进行身份验证。
  • 客户端/AS 身份验证: 在此阶段,客户端和身份验证服务器连接以验证用户的用户名并确保他们是系统的一部分。AS 然后检查用户名是否已记录在系统中。如果是,Client 和 AS 交换加密的验证消息以相互验证。到最后,两者都通过了身份验证,建立了连接,客户端可以转向使用服务进行身份验证。
  • 客户端/服务身份验证: 在此阶段,客户端和服务器必须相互进行身份验证,与相互身份验证实践保持一致。客户端和服务器交换加密的验证消息,类似于上一阶段。如果这些都通过,则客户端和服务通过身份验证,并且客户端可以请求他们的服务。
  • 客户端/服务请求: 最后,客户端可以向服务服务器请求命名服务。服务服务器然后验证它是否具有可用的请求服务。如果是,则服务服务器将服务授予客户端。由于客户端已通过此过程的所有步骤进行身份验证,因此他们可以继续使用该服务,直到他们的权限到期。

Kerberos 进程示例

这些阶段中的每一个都需要几个步骤,但在实时过程中,这个过程非常快。为了将我们上面学到的内容融入上下文,让我们看一个现实生活中的例子。

在工作日开始时,您将密码输入客户端。密码由 AS 验证,然后由 KDC 授予您 TGT。这张票有一组通往dataScience领域的钥匙。

TGT 然后缓存在您的计算机上供以后使用。此访问权限允许您使用dataScience领域内的任何服务,例如访问客户购买行为。

然后,您可以随时访问此服务,而无需每次都验证您的权限。

但是,如果您尝试从该领域访问任何服务finances,您将被拒绝,因为您的 TGT 没有该领域的密钥。

在您的工作日结束时,您的 TGT 将过期,您将无法再次访问这些服务,直到您在第二天登录时获得新票证。

Kerberos 进程分解(16 个步骤)

现在我们将分解流程的每个步骤,让您更好地了解幕后发生的事情:

1. 登入

用户输入他们的用户名和密码。支持 Kerberos 的客户端随后将该密码转换为客户端密钥。

2. 客户端请求票据授权服务器

客户端然后向身份验证服务器发送明文消息,其中包含:

  • 输入的用户名
  • 请求的服务名称
  • 用户的网络地址
  • 他们请求访问多长时间了

3.服务器验证用户名

根据存储在 KDC 中的经过验证的用户名检查用户名。如果用户名熟悉,程序将继续。

4. Ticket Granting Ticket 返回给客户端

身份验证服务器向客户端发回两条加密消息:

  • Message A可以使用在步骤 1 中创建的客户端密钥进行解密。它包含 TGS 名称、时间戳、票证生命周期和新授予的票证授予服务器会话密钥。
  • Message B是Ticket Granting Ticket,只能用持有的TGS秘钥解密。这包含您的用户名、TGS 名称、时间戳、您的网络地址、票证有效期和相同的 TGS 会话密钥。

5. Client获取TGS会话密钥

客户端现在message A使用客户端密钥进行解密,从而使客户端能够访问 TGS 会话密钥。Message B以加密状态存储在本地。

6.客户端向服务器请求服务访问

客户端现在发回两条消息:

  • Message C是一条未加密的消息,其中包含所请求服务的名称、生命周期和仍然加密的message B.
  • Message D是使用 TGS 会话密钥加密的身份验证器,包含您的姓名和时间戳

7.服务器验证服务

TGS 然后检查请求的服务是否存在于 KDC 中。如果是,则程序继续。

8、Server获取TGS Session Key

服务器现在提取仍然加密message B发送的message C. Message B(TGT)然后使用服务器的 TGS 密钥解密,为服务器提供 TGS 会话密钥。

使用此 TGS 会话密钥,服务器现在可以解密message D.

message B现在服务器具有来自两者的时间戳和名称message D(身份验证器消息)。服务器确保名称和时间戳相同以防止欺诈性消息。它还根据票证的生命周期检查时间戳,以确保它没有超时。

9. 服务器生成服务会话密钥

服务器随后生成一个随机服务会话密钥和另外两条消息。

  • Message E使用服务密钥加密,包含您的姓名、请求的服务名称、时间戳、您的网络地址、票证有效期和服务会话密钥。
  • Message F使用客户端和服务器持有的 TGS 会话密钥加密。除了您的用户名和网络地址之外,此消息包含所有相同的信息message E

10.客户端获取服务会话密钥

客户端使用第5步缓存的TGS会话密钥,解密message F得到服务会话密钥。

11.客户联系服务

客户端现在再发送两条消息,这次是发送给服务:

  • Message G是另一个身份验证器消息,这次使用服务会话密钥加密。它包含您的姓名和时间戳。
  • Message H是 的副本message E,仍然使用服务密钥加密。

12.服务解密Message G

然后,该服务message H使用其服务密钥进行解密,以从内部获取服务会话密钥。使用此密钥,服务解密message G.

13.服务验证请求

messages G然后,该服务通过比较来自和的用户名、时间戳和生命周期来验证请求H

14.服务被客户端认证

然后,服务message I使用服务和客户端持有的服务会话密钥加密发送。Message I是包含服务 ID 和时间戳的验证器。

15.客户验证服务

然后,客户端message I使用从第 10 步缓存的服务会话密钥进行解密。然后,客户端检查其中包含的 ID 和时间戳。如果两者都符合预期结果,则该服务被认为是安全的。

16. 客户和服务自由沟通

Kerberos 确信客户端和服务已相互验证,因此允许客户端与服务进行通信。

网络异常,图片无法展示
|

Kerberos 是否可破解?

虽然仍然是最安全的协议,但 Kerberos 与其他协议一样容易被黑客攻击。Kerberos 长期以来一直作为行业标准协议,为黑客提供了充足的时间来攻克系统。

黑客发现了 5 种击败 Kerberos 系统的主要方法,主要针对易受攻击的系统设置、弱密码或传播有害恶意软件。让我们看看这 5 种攻击类型中的每一种:

  • Pass-the-ticket: 此方法通过伪造虚假的 TGT 创建虚假的会话密钥。然后,黑客可以将 TGT 作为有效凭证提供给服务。拥有会话密钥允许此伪造绕过会话密钥授予步骤之前的所有 Kerberos 验证步骤。
  • Golden Ticket: 这种方法伪造一张具有管理员身份的票。黑客在使用这张票时可以无限制地访问整个域;个人设备、服务器、数据和设置都可以访问。如果黑客通常通过安装的恶意软件访问管理员的机器,他们只能创建一张“金票”。
  • 银票: 与金票攻击类似,银票是伪造的服务身份验证票,用于授予对服务的访问权限。此方法授予的访问权限低于金票攻击,但也更难检测。此阶段的所有交互都是客户端/服务交互,允许黑客避开 KDC 中的安全措施。
  • 蛮力: 最明显的方法,蛮力涉及使用自动密码猜测器输入数千个密码,直到找到正确的密码。暴力破解不需要窃取凭据,但由于其非人为的进入行为,很容易被检测到。
  • Backdoor Skeleton Key Malware: 在这种方法中,黑客在系统中植入一个隐藏的后门访问万能密钥,以允许他们在未来任何时候以任何用户身份登录。此方法需要先前成功的金票攻击,因为这些万能钥匙只能通过管理权限植入。这些是一些最难检测的攻击,因为破坏和攻击可能相隔数年。


相关文章
|
17天前
|
存储 缓存 Dart
Flutter&鸿蒙next 封装 Dio 网络请求详解:登录身份验证与免登录缓存
本文详细介绍了如何在 Flutter 中使用 Dio 封装网络请求,实现用户登录身份验证及免登录缓存功能。首先在 `pubspec.yaml` 中添加 Dio 和 `shared_preferences` 依赖,然后创建 `NetworkService` 类封装 Dio 的功能,包括请求拦截、响应拦截、Token 存储和登录请求。最后,通过一个登录界面示例展示了如何在实际应用中使用 `NetworkService` 进行身份验证。希望本文能帮助你在 Flutter 中更好地处理网络请求和用户认证。
132 1
|
5月前
|
网络协议 网络安全 网络性能优化
【计算机网络概述】第一章:概论 1.2什么是网络边缘
【计算机网络概述】第一章:概论 1.2什么是网络边缘
|
1月前
|
机器学习/深度学习 存储 自然语言处理
深度学习入门:循环神经网络------RNN概述,词嵌入层,循环网络层及案例实践!(万字详解!)
深度学习入门:循环神经网络------RNN概述,词嵌入层,循环网络层及案例实践!(万字详解!)
|
1月前
|
机器学习/深度学习 PyTorch API
深度学习入门:卷积神经网络 | CNN概述,图像基础知识,卷积层,池化层(超详解!!!)
深度学习入门:卷积神经网络 | CNN概述,图像基础知识,卷积层,池化层(超详解!!!)
|
3月前
|
存储 网络协议 安全
|
3月前
|
数据采集 移动开发 Python
六:《智慧的网络爬虫》— 正则表达式概述
【8月更文挑战第7天】本文介绍了正则表达式的基本概念、用途,如表单验证和爬虫,以及Python中re模块的使用,包括match(),match()函数、元字符、预定义字符集、重复匹配、位置匹配、非贪婪模式和re模块的常用方法如compile(),search(),findall(),split(),sub()等。
73 1
六:《智慧的网络爬虫》— 正则表达式概述
|
2月前
|
Linux 调度 Docker
容器网络概述
【9月更文挑战第9天】容器技术利用如命名空间(namespace)和控制组(cgroup)等技术创建隔离环境,实现资源限制与独立运行。命名空间避免命名冲突,cgroup则能对CPU、内存等资源进行限制。容器状态可通过镜像保存并标准化,确保在任何环境中都能复现相同状态。
|
3月前
|
存储 NoSQL MongoDB
八:《智慧的网络爬虫》— MongoDB概述
【8月更文挑战第14天】本篇文章简单介绍了MongoDB的下载和安装以;其基本的操作语法,并附上每个语法的代码示例,为后续的爬虫学习打下基础
47 0
八:《智慧的网络爬虫》— MongoDB概述
|
3月前
|
SQL 数据采集 关系型数据库
七:《智慧的网络爬虫》— MySQL概述
【8月更文挑战第11天】本篇文章详细的介绍了MySQL数据库的安装与使用;并讲述了MySQL的基本操作及其应用语法
50 0
七:《智慧的网络爬虫》— MySQL概述
|
3月前
|
Linux 调度 Docker
容器网络概述
【8月更文挑战第7天】容器就是 Container,而 Container 的另一个意思是集装箱。其实容器的思想就是要变成软件交付的集装箱。集装箱的特点,一是打包,二是标准。

热门文章

最新文章