Kerberos 协议:
Kerberos 协议主要用于计算机网络的身份鉴别 (Authentication), 其特点是用户只需输入一次身份验证信息就可以凭借此验证获得的票据 (ticket-granting ticket) 访问多个服务,即 SSO(Single Sign On) 。由于在每个 Client 和 Service 之间建立了共享密钥,使得该协议具有相当的安全性。
条件
先来看看 Kerberos 协议的前提条件:
如下图所示, Client 与 KDC , KDC 与 Service 在协议工作前已经有了各自的共享密钥,并且由于协议中的消息无法穿透防火墙,这些条件就限制了 Kerberos 协议往往用于一个组织的内部, 使其应用场景不同于 X.509 PKI 。
过程
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 协议的重点在于第二部分,简介如下:
1. Client 将之前获得 TGT 和要请求的服务信息 ( 服务名等 ) 发送给 KDC , KDC中的Ticket Granting Service 将为 Client 和 Service 之间生成一个 Session Key 用于 Service 对 Client 的身份鉴别。然后 KDC 将这个 Session Key 和用户名,用户地址( IP ),服务名,有效期 , 时间戳一起包装成一个 Ticket( 这些信息最终用于 Service 对 Client 的身份鉴别 ) 发送给 Service , 不过 Kerberos 协议并没有直接将 Ticket 发送给 Service ,而是通过 Client 转发给 Service. 所以有了第二步。
2. 此时 KDC 将刚才的 Ticket转发 给 Client 。由于这个 Ticket 是要给 Service 的,不能让 Client 看到,所以 KDC 用协议开始前 KDC 与 Service 之间的密钥将 Ticket 加密后再发送给 Client 。同时为了让 Client 和 Service 之间共享那个秘密 (KDC 在第一步为它们创建的 Session Key) , KDC 用 Client 与它之间的密钥将 Session Key 加密随加密的 Ticket 一起返回给 Client 。
3. 为了完成 Ticket 的传递, Client 将刚才收到的 Ticket 转发到 Service. 由于 Client 不知道 KDC 与 Service 之间的密钥,所以它无法算改Ticket中的信息。同时 Client 将收到的 Session Key 解密出来,然后将自己的用户名,用户地址( IP )打包成 Authenticator 用 Session Key 加密也发送给 Service 。
4. Service 收到 Ticket 后利用它与 KDC 之间的密钥将 Ticket 中的信息解密出来,从而获得 Session Key 和用户名,用户地址( IP ),服务名,有效期。然后再用 Session Key 将 Authenticator 解密从而获得用户名,用户地址( IP )将其与之前 Ticket 中解密出来的用户名,用户地址( IP )做比较从而验证 Client 的身份。
5. 如果 Service 有返回结果,将其返回给 Client 。
总结
概括起来说 Kerberos 协议主要做了两件事
1. Ticket 的安全传递。
2. Session Key 的安全发布。
再加上时间戳的使用就很大程度上的保证了用户鉴别的安全性。并且利用 Session Key,在通过鉴别之后 Client 和 Service 之间传递的消息也可以获得 Confidentiality(机密性), Integrity(完整性) 的保证。不过由于没有使用非对称密钥自然也就无法具有抗否认性,这也限制了它的应用。不过相对而言它比 X.509 PKI 的身份鉴别方式实施起来要简单多了。
推荐资料:
Kerberos: An Authentication Service for Computer Networks
Web Services Security系列文章