Kerberos解决的问题:分布式用户身份认证。主要是在分布式的网络环境中,工作站(客户端,client)请求访问分布在网络各处的服务器上的服务。
基本思路:利用集中的认证服务器,实现用户和服务器之间的双向认证。基于票据的认证服务:认证服务器提供一种不能伪造、不能重放、已经鉴别的票据对象。基于对称秘钥的加密体系。 术语:
域:域是一种计算网络形式,域中的主体(主要是用户的账户、计算机、打印机等)被注册到域控制器(Domain Controller)中的数据库中(Account Database)。域控制器可以被部署到一台活多态域内的计算机中。委托人(principal):通过KDC颁发的票据来进行通信的主体,具有唯一的标识,分为两类用户和服务。
用户的标识通过:UserName@REALM(大写)来表示。如:cx@ALIBABA.COM表示alibaba.com域中的cx用户。 永久密钥(Long-term key):能够被长期保存的密钥,不会轻易改变,一般是用户的登陆密码。由于密码学的算法不能保证100%安全,基于暴力破解的方法破解的密钥只是时间问题,因此,长期密钥加密的数据不宜在网络上传输。主密钥(Master key
):主密钥是长期密钥的派生物,一般有永久密钥经过单向散列函数得到。
主密钥的两个特性:
单向性:确保在知道主密钥的情况下不能计算得到其对应的长期密钥,这样可以保证长期密码的机密性对应性:良好的哈希算法保证了永久密钥及其派生的主密钥间是一一对应的关系,这确保了长期密钥及其对应的主密钥具有同等的效力。 会话密钥(Session key):用于某次会话的密钥,属于短期密钥(short-term key)。会话密钥在一次会话结束后将作废,因此,其加密的数据适合在网络上传输。
kerboers中的会话密钥包括:
KDC与客户端的会话密钥(本文中记做:S[KDC-Client])KDC与服务器的会话密钥(S[KDC-Server
])客户端与服务器的会话密钥(S[Client-Server]) 会话票据(Session ticket):由KDC颁发给客户端的,用服务器与KDC之间的会话密钥加密的关于客户端的信息的票据。KDC(Key Distribution Center):客户端(Client)和服务器(Server)共同信任的第三方。
KDC包含两个部分:
认证服务(Authentication Service,简写成:AS):向客户端发放Session Ticket。票据授权服务(Ticket Granting Service):向AS认证客户端的身份。 Account Database:存放Domain中客户端的账号和
主密码(Master key)。 kerboers认证过程:
主要分成4个子协议:
Authentication Service Exchange:这个协议实现了KDC的身份认证,并颁发TGT。过程如下:
①、KRB_AS_REQ:Client向AS请求TGTc,主要的内容包括:
IDc:客户端的标示。IDtgs:服务器的标示。这里的服务器是指KDC的TGS.IPc:客户端的IP地址Lifetime:请求的TGT的生命期。 ⑵、KRB_AS_REP
:
用TGS的主密钥加码的TGTc,主要包含Client Info以及KDC和Client间的会话密钥:
IDcIDtgsTS:时间戳IPc
Lifetime2:是TGT实际的生存周期S[KDC-Client] 用Client的主密钥加密的Client Info信息:
IDtgsTSLifetime2:同上
S[KDC-Client] TGS Exchange:这个协议为客户端颁发其向服务器验证自己身份的会话票据。过程如下:
③、KRB_TGS_REQ:Client向TGS请求S[Client-Server]
TGTc
Authenticator:
用S[KDC-Client]加密的IDc和TS以明文形式发送的IDs(请求的服务器) TGS用自己的Ktgs解密TGTc,获取S[KDC-Client]并解密Authenticator。然后检查:
IDc是否一致TGT是否过期(通过TGTc的Lifetime)
Authenticator中的时间戳是否有效 ④KRB_TGS_REP:TGS向Client发送Session Ticket:
用S[KDC-Server]加密的会话票据,主要包含Client Info以及Server和Client间的会话密钥:
IDcIDsIPcTS
S[Server-Client] 用S[KDC-Client]加密的S[Server-Client] CS Exchange:
Client向Server发送Session Ticket以及Authenticator。Server验证Client的身份:
Server通过S[KDC-Server]密钥对Ticketc,s进行解密,得到Client Info以及Session Key。Server通过Session Ticket解密Client的Authenticator,比较两处获得的Client Info,并且检查时间戳是否要有效。 Mutual Authentication(双向验证)
Server用Session Key加密从Authenticator中解密得到的时间戳,并发送给Client做身份验证。 User2User:
Client向Server请求Server相对于KDC的TGT(KRB_TGT_REQ)Server向Client发送TGT(KRB_TGT_REP)
若Server中存在相应的TGT则直接发送否则Server向KDC请求TGT Kerboers的优势:
能够防止暴力破解:用于认证的Session key是short term key,只在一次会话中有效。防止重放攻击:每个请求都以时间戳进行标记。双向鉴别:Kerboers支持双向鉴别,这也是Kerboers优于NTLM之处。Kerboers的Server端通过返回Client发送的时间戳,向Client提供验证自己身份的手段。较高的性能:
从KRB_AS_REP以及KRB_TGS_REP看到,KDC把认证Client身份的相关信息,主要是会话密钥和被加密的Client身份信息(TGTc和Session Ticket)都发送给了Client,由Client进行保管。这样做减少了Server和KDC的存储压力。由Client统一发送Authenticator和Session Ticket而不是由KDC代为发送,减少了KDC压力并且可以防止两者不能同步到达Server而引起的认证失败。 Kerboers存在的缺陷:
AS Exchange过程中,AS向Client响应请求时仍然用客户端的Master key进行加密了。因此,客户端的Master Key依然被用于加密并传输。由于AS授予Client的TGTc是由生命期的,所以TGT的生命期结束,Client势必要向AS重新发送KRB_AS_REQ,造成Master key在网络中被多次传输。KDC要保存大量的密钥,维护KDC的Account database开销很大。Kerboers防止重放攻击的手段是时间戳。然而,在分布式系统中,严格的时间同步是困难的,错误的时间同步导致认证的失败。因此攻击者可以通过干扰时间系统来达到攻击的目的。Kerboers在认证过程中一般认为,时间差在5分钟内就为新的消息,这也为重放攻击提供了条件。
转载请注明原文地址: https://ju.6miu.com/read-1297113.html