• Kerberos协议


    闪电先讲述一个大家都熟识的故事。

    话说,孙悟空受蛰,在亭子里懊恼,碰到毗蓝婆菩萨在烧纸,触景生情,想到师傅被抓,自己没能救他出来,也黯然伤神,抢纸烧起来。

    毗蓝婆问:小和尚所谓何事?

    悟空答:婆婆所谓何事?

    毗蓝婆答:我哭我丈夫.

    悟空答:我哭我师傅.

    毗蓝婆问其详,悟空述其详。

    毗蓝婆道:这样好了,我给你一个信物,你去找我儿子昴日星官吧,他看到后自会想办法救你师徒。

    昴日星官见到银针,验明小和尚就是去西天取经的悟空。

    于是唐僧脱离蝎子精的魔爪。

    今天说点什么呢?Kerberos协议。为了便于理解,先给出图示。

    Kerberos

    Kerberos协议是什么?

    Kerberos协议主要用于计算机网络的身份鉴别(Authentication), 其特点是用户只需输入一次身份验证信息就可以凭借此验证获得的票据(ticket-granting ticket)访问多个服务,即SSO(Single Sign On)。由于在每个Client和Service之间建立了共享密钥,使得该协议具有相当的安全性。

    主要负责做:

    1. Ticket的安全传递。

    2. Session Key的安全发布。

     

    KDC是什么?

    KDC:(Key Distribution Center)密匙分配中心
    密码学中的密钥分发中心( KDC )是密钥体系的一部分,旨在减少密钥体制所固有的交换密钥时所面临的风险。 KDC应用在这样的系统中:系统内一些用户能够使用某些服务,而其他人不能使用那些服务。
    KDC在kerberos中通常提供两种服务:
    1.Authentication Service (AS):认证服务
    2.Ticket-Granting Service (TGS):授予票据服务

     

    过程解析:

    A

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

    此时只有真正的Client才能利用它与KDC之间的密钥将加密后的TGT解密,从而获得TGT。(此过程避免了Client直接向KDC发送密码,以求通过验证的不安全方式)

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

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

    B

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

    C

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

    D

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

    E

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

      

    结合本文开头举出的故事:

    悟空 ---------------- real Client

    毗蓝婆菩萨 ---------------KDC

    昴日星官 -------------real Service

    银针 session key by passworded

    悟空发送请求(说明自己的身份,经历),毗蓝婆菩萨返回给他一个信物(银针)

    毗蓝婆菩萨与昴日星官存在私钥关係(通过银针)

    昴日星官又认识大圣,同时又看到了私钥(银针),验明正身,同意一起抗妖eq。

    作者:LevinLee
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    JSOI2015 R3 退队滚粗了
    bzoj3774
    bzoj1426
    bzoj3294
    java 位向量
    java 移位操作
    java 枚举类型的使用
    mysql 修改 root 用户密码
    几种数据库连接池的比较
    linux python 安装 pip出现 No module named 'setuptools'
  • 原文地址:https://www.cnblogs.com/levinlee/p/1636334.html
Copyright © 2020-2023  润新知