| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 开发工具 -> NTLM及Kerberos认证流程 -> 正文阅读 |
|
[开发工具]NTLM及Kerberos认证流程 |
NTLM及Kerberos认证流程NTLM认证1.概念NTLM是NT LAN Manager的缩写,NTLM 是指 telnet 的一种验证身份方式,即问询/应答身份验证协议,是 Windows NT 早期版本的标准安全协议,Windows 2000 支持 NTLM 是为了保持向后兼容。Windows 2000内置三种基本安全协议之一。 2.认证流程①使用用户名和密码登录客户端,进行本地认证 ②客户端首先在本地加密当前用户的密码为密码散列,即NTLM Hash1 ③确认双方协议版本,客户端向服务器明文发送自己的账号 ④服务器生成一个16位的随机数字发送给客户端,即challenge ⑤客户端使用NTLM Hash来加密challenge,生成的结果即response ⑥服务器将明文的用户名、challenge、response发给域控制器(DC) ⑦域控制器用这个用户名在SAM密码管理库2中找到此用户对应的NTLM Hash,并使用这个值来加密challenge,生成的结果记为response2 ⑧域控制器对response和response2进行比较,如果一样则认证成功,反之则失败 本地认证Windows不会储存用户的明文密码,而是将明文密码加密后储存在SAM中 本地认证的过程中,用户登录时,系统会将用户输入的明文密码加密成NTLM Hash,然后和SAM中的NTLM Hash进行比较从而完成认证 用户进行任何注销操作(注销登录,重启,锁屏等),winlogon进程会显示密码输入界面,接受用户输入密码后交给lsass进程,这个进程中会保存一份明文密码,然后加密成NTLM Hash
NTLM Hash的生成
Kerberos认证1.概念Kerberos 是一种由 MIT(麻省理工大学)提出的一种网络身份验证协议。它旨在通过使用密钥加密技术为客户端/服务器应用程序提供强身份验证。 Kerberos 主要是用在域环境下的身份认证协议。 2.认证流程Kerberos 协议中主要有四个角色的存在:
KDC的构成Authentication Service:认证服务器,以下简称AS,作用就是验证 Client 端的身份,验证通过会发送一张TGT(Ticket Granting Ticket)4票据给 Client Ticket Granting Service:票据分发服务器,以下简称TGS,作用是通过 AS 发送给 Client 的票据(TGT)换取ST(ServiceTicket)5,也被称为TGS Ticket Kerberos认证大体上分为三个流程:
一、Authentication Service ExchangeKRB_AS_REQ(请求) Client --> AS:客户端向KDC的AS发送Authenticator1,内容包含:
KRB_AS_REP(响应) AS --> Client:AS根据用户名在AD中判断是否在白名单中,接着进行验证发送方是否为Client name中声称的用户 也就是需要验证发送方是否知道该用户名的密码,此时只需要从AD中使用相应的NTLM Hash对请求包中的Pre-authentication data进行解密,如果是一个合法的时间戳,则说明提供的密钥无误 验证成功后提取相应的NTLM Hash1,此时会生成一个随机数SessionKey,然后使用提取的NTLM Hash来加密SessionKey,生成SessionKey-as作为AS数据,再返回一个TGT4
Client收到KRB_AS_REP,通过自己的NTLM Hash对返回的SessionKey-as进行解密得到SessionKey后,即可携带TGT进入下一步骤 二、Ticket-Granting Service (TGS) ExchangeKRB_TGS_REQ(请求) Client --> TGS:Client向KDC的TGS发送Authenticator2,内容包含:
KRB_TGS_REP(响应) TGS --> Client:TGS首先通过自己的NTLM Hash(krbtgt账户的NTLM Hash)对Client提供的TGT进行解密,即可得到SessionKey,再通过这个SessionKey解密Client提供的Authenticator来进行验证,此时生成一个SessionKey-tgs 验证成功后向对方发送两个数据:
Client收到KRB_TGS_REP,使用SessionKey对返回的SessionKey-tgs-encrypt进行解密得到SessionKey-tgs,有了SessionKey-tgs和ST,Client就可以和Server交互了,至此TGS的任务完成 三、Client/Server Authentication ExchangeKRB_AP_REQ(请求) Client --> Server:Client向Server发送Authenticator3,内容包含:
KRB_AP_REP(响应) Server --> Client:Server首先通过自己的NTLM Hash对收到的ST进行解密,即可得到SessionKey-tgs,再通过这个SessionKey-tgs解密收到的Authenticator即可验证身份,原理同上 此时连接建立成功。
|
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/16 5:31:42- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |