Kerberos协议工作原理

1、kerberos(Secure network authentication system)中文叫网络安全认证系统。


kerberos在进行认证过程中并不会传输用户的密码,而是通过传输tickets进行认证登陆到LDAP server。Kerberos协议主要用于计算机网络的身份鉴别,其特点是用户只需输入一次身份验证信息就可以凭借此验证获得的票据(ticket-granting-ticket)访问多个服务,即SSO(Single Sign On)。由于在每个Client和Service之间建立了共享秘钥,使得该协议具有相当的安全性。

2、条件

先来看看Kerberos协议的前提条件:

如下图所示,ClientKDCKDCService在协议工作前已经有了各自的共享密钥,并且由于协议中的消息无法穿透防火墙,这些条件就限制了Kerberos协议往往用于一个组织的内部, 使其应用场景不同于X.509 PKI

 Kerberos协议工作原理_第1张图片

3、过程


Kerberos 协议分为两个部分:

1 . Client KDC 发送自己的身份信息, KDC Ticket Granting Service 得到 TGT(ticket-granting ticket) , 并用协议开始前 Client KDC 之间的密钥将 TGT 加密回复给 Client

此时只有真正的Client 才能利用它与 KDC 之间的密钥将加密后的 TGT 解密,从而获得 TGT

(此过程避免了Client 直接向 KDC 发送密码,以求通过验证的不安全方式)

2. Client 利用之前获得的 TGT KDC 请求其他 Service Ticket ,从而通过其他 Service 的身份鉴别。

Kerberos 协议的重点在于第二部分,简介如下:

 Kerberos协议工作原理_第2张图片

1Client将之前获得TGT和要请求的服务信息(服务名等)发送给KDCKDC中的Ticket Granting Service将为ClientService之间生成一个Session Key用于ServiceClient的身份鉴别。然后KDC将这个Session Key和用户名,用户地址(IP),服务名,有效期,时间戳一起包装成一个Ticket(这些信息最终用于ServiceClient的身份鉴别)发送给Service, 不过Kerberos协议并没有直接将Ticket发送给Service,而是通过Client转发给Service.所以有了第二步。

2. 此时KDC将刚才的Ticket转发给Client。由于这个Ticket是要给Service的,不能让Client看到,所以KDC用协议开始前KDCService之间的密钥将Ticket加密后再发送给Client。同时为了让ClientService之间共享那个秘密(KDC在第一步为它们创建的Session Key)KDCClient与它之间的密钥将Session Key加密随加密的Ticket一起返回给Client

3. 为了完成Ticket的传递,Client将刚才收到的Ticket转发到Service.由于Client不知道KDCService之间的密钥,所以它无法算改Ticket中的信息。同时Client将收到的Session Key解密出来,然后将自己的用户名,用户地址(IP)打包成AuthenticatorSession Key加密也发送给Service

4Service 收到Ticket后利用它与KDC之间的密钥将Ticket中的信息解密出来,从而获得Session Key和用户名,用户地址(IP),服务名,有效期。然后再用Session KeyAuthenticator解密从而获得用户名,用户地址(IP)将其与之前Ticket中解密出来的用户名,用户地址(IP)做比较从而验证Client的身份。

5. 如果Service有返回结果,将其返回给Client

总结

概括起来说Kerberos协议主要做了两件事

1Ticket的安全传递。

2Session Key的安全发布。

再加上时间戳的使用就很大程度上的保证了用户鉴别的安全性。并且利用Session Key,在通过鉴别之后ClientService之间传递的消息也可以获得Confidentiality(机密性), Integrity(完整性)的保证。不过由于没有使用非对称密钥自然也就无法具有抗否认性,这也限制了它的应用。不过相对而言它比X.509 PKI的身份鉴别方式实施起来要简单多了。

你可能感兴趣的:(Kerberos协议工作原理)