身份与访问控制之Kerberos认证过程和SESAME
Kerberos 是一种网络认证协议,其设计目标是通过密钥系统为客户机 / 服务器应用程序提供强大的认证服务。该认证过程的实现不依赖于主机操作系统的认证,无需基于主机地址的信任,不要求网络上所有主机的物理安全,并假定网络上传送的数据包可以被任意地读取、修改和插入数据。在以上情况下, Kerberos 作为一种可信任的第三方认证服务,是通过传统的密码技术(如:共享密钥)执行认证服务的。
在kerberos认证过程中,会有以下几个角色:
- KAS(Kerberos Authentication Server)= 认证服务器
- KDC(Key Distribution Center)= 密钥分发中心
- TGT(Ticket Granting Ticket)= 票据授权票据,票据的票据
- TGS(Ticket Granting Server)= 票据授权服务器
- SS(Service Server)= 特定服务提供端
第一步:用户向KAS发送 用户名和用户加密的请求信息的Request消息
1.5 KAS查找对应用户的密码,后生成一个hash,生成一个秘钥(用密码生成hash )对Authenticator进行解密。如果解密后的内容和已知的内容一致,则证明请求者提供的密码正确,即确定了登录者的真实身份。注意,仅仅是验证是否存在,不会验证对错。
TGT的有效时间,有的地方叫Timestamp ,KAS同当前的时间进行比较,如果他们之间的偏差超出一个可以接受的时间范围(一般是5mins),AS 会直接拒绝该 Client 的请求。当AS Request中的 Timestamp 早于上次认证时间点,也是直接拒绝。
第二步:提供给合法请求用户TGT和使用用户加密的TGS session key
如果你的密码是正确的,你就能解密第二部分信息,获取到TGS session key。如果,密码不正确,无法解密,则认证失败。
第一部分信息TGT,你是无法解密的,但需要暂时缓存起来。
注:有的地方会将TGS session key定义为Logon Session Key
TGT的生命周期一般为10-8小时
第三步:用户向TGS发送HTTP请求和KAS给的TGT和使用TGS session key加密的用户信息
TGS检查过程:
1)检查数据库中是否包含有你请求的Http服务名。如果无,直接返回错误信息。
2)通过KDC的密码解密TGT,获打开TGT取到TGS Session key。
3)通过TGS Session key解密你传输的第一部分认证器,获取到你的用户名和时间戳。
4)验证加密认证器中的信息是否正确。
- 对比TGT中的用户名与认证器中的用户名
- 比较时间戳,不能超过一定范围
- 检查是否过期
- 检查IP地址是否一致
- 检查认证器是否已在TGS缓存中(避免应答攻击)
- 可以在这部分添加权限认证服务
第四步:TGS向用户发送ST和TGS session key加密的Http Service Session Key信息
你收到信息后,通过TGS Session Key解密,获取到了Http Service Session Key,但是你无法解密ST。
第五步:用户发送请求到具体要访问的应用
Http服务端通过自己的密码解压ST(KDC是用Http服务的密码加密的),这样就能够获取到Http Service Session Key,解密第一部分。
使用Http Service Session Key服务端解密好ST,对比如下信息:
- ST中的用户名(KDC给的)与认证器中的用户名
- 比较时间戳,不能超过一定范围
- 检查是否过期
- 检查IP地址是否一致
- 检查认证器是否已在HTTP服务端的缓存中(避免应答攻击)
第六步:访问的应用返回值,用户验证服务是否合法
你在通过缓存的Http Service Session Key解密这部分信息,然后验证是否是你想要的服务器发送给你的信息。完成你的服务器的验证。
至此,整个过程全部完成。全过程利用的对称加密技术。时间戳是为了解决重放攻击的问题
缺点
- KDC可能成为单一故障
- 秘密密钥存储在用户的工作站上
- 会话密钥存储在用户的缓存或密钥表中
- 所有客户端必须时间同步
SESAME(多厂商环境下欧洲安全应用系统)被开发解决kerberos中的一些弱点,使用公钥密码学进行密钥分配,并提供额外的访问控制支持
SESAME解决了时隙重放的问题,kerberos和SESAME存在一个共同的问题是对静态空口令猜测
使用PAS和PAC的身份验证协议,基于对称和非对称密码
Kerberos使用票证来验证用户身份,SESAME使用特权属性证书(PAC)验证,PAC包括主体的身份、访问的客体的功能、访问时限和PAC的生命周期
PAC使用数字签名技术,因此客体可以验证它是否来自可信任的验证服务器,即特权服务器(PAS)
PAS和kerberos内的密钥分发中心(KDC)承担相似的角色。在用户验证服务处成功验证了身份后,他便被授予一个令牌再发送给PAS
PAS创建一个PAC以供用户出示给他访问的资源
SESAME验证过程:
1)用户发起请求到AS(认证服务器)
2)AS发送一个token给用户,用于与PAS通信
3)用户发起访问请求,并将token发送给PAS
4)PAS创建会话,并发送PAC给用户
5)用户发送PAC去认证访问资源
特别声明:
1.以上所有描述内容部分参考链接/文献未逐一列出,若有侵权,请及时告知,有则改之无则加勉。
2.以上仅是学习过程的总结,相信有很多理解偏差的地方,特别希望指出,给予帮助,更新知识体系,共同进步。
参考链接:
https://blog.csdn.net/wy_97/article/details/87649262 windows 域认证 Kerberos详解
https://www.cnblogs.com/zhaojonjon/p/5967281.html ldap + kerberos 整合
<wiz_tmp_tag id="wiz-table-range-border" contenteditable="false" style="display: none;">