序言:近几天学习了Kerberos认证协议,觉得有必要把学习过程和学习心得记录一下,文章内容有William Stallings编著的《网络安全基础》中的部分内容,也有自己的理解和思考。我希望能用自己的理解来解释出Kerberos认证协议的工作过程。由于Kerberos比较复杂,所以需要通过多个假设会话来理解协议,对于有哪些不妥之处还请前辈批评指正。


1.一个简单的会话

(1)C—>AS: IDc || Pc || IDv
(2)AS—>C: Ticket
(3)C—>V: IDc || Ticket,Ticket=E(Kv,[IDc || ADc || IDv])

C=客户端
AS=认证服务器
V=认证服务器
IDc=客户端上用户的身份标识
IDv=服务器端的身份标识
Pc=客户端上用户的口令
ADc=客户端的网络地址
Kv=认证服务器和服务器间共享的加密密钥


根据图中所示:

  • AS作为认证服务器与C(客户端)共享了Pc(用户口令)。C想要访问V,首先需要得到AS的认证。于是C向AS发出请求,C需要告诉AS自己是C( IDc || Pc)现在想要访问V( IDv)。
  • AS得到C的请求以后在自己的数据库中查找信息验证C的身份,同时查看C是否拥有访问V的权限。如果知道C的身份合法,要求合理,AS会发一张去往V的通行证(Ticket)。这一张通行证至关重要,所以必须加密,而Kerberos采用的对称加密算法(例:E(K,M),指的是用密钥K去加密M。)加密票据信息。对于这张票据上含有最基本的信息,类比于我们的车票,它包括“我是谁”(IDc)、“我从哪里来”( ADc)、“我要到哪里去”( IDv)。
  • C拿着AS发放的票据,告诉自己是C,就能成功的访问V。

回顾这个会话方法可以明显的发现两个问题:1、每一次C想要访问V都需要先向AS发出请求,这就意味着每一次都要输入密码,这对用户来说是极不方便的。2、在C访问AS的过程中竟然使用了 Pc 明文传输!!!


2.一个更加安全的认证会话

每次用户登陆会话就执行一次:
(1)C—>AS: IDc || IDtgs
(2)AS—>C:E(Kc,Ticket tgs)
每种类型的服务就会执行一次:
(3)C—>TGS: IDc || IDv || Ticket tgs
(4)TGS—>C: Ticket v
每个服务会话就会执行一次:
(5)C—>V: IDc || Ticket v
Ticket tgs=E(Ktgs,[IDc || ADc || ID tgs || TS1 || Lifetime1])
Ticket v=E(Kv,[IDc || ADc || IDv || TS2 || Lifetime2])

我们现在来分析这个会话:

  • 为了解决第一种会话方案出现的问题,我们引入一个叫做票据授权服务器的新服务器,同时我们允许票据重用来解决多次输入密码的问题。
  • C希望访问V,但是访问V所需要的票据由TGS发放,所以C需要先访问TGS。可是访问TGS也需要票据,这个票据由AS发放。所以C的访问路程就是先访问AS再访问TGS,然后才能访问V。
  • AS与C共享密钥Kc,AS与TGS共享密钥Ktgs,TGS与V共享密钥Kv。
  • C向AS发出申请:我是C我想要访问TGS。(此使AS并没有要求C来证明他的身份
  • AS交给C一个上了锁的盒子,告诉C说:你要的票在盒子里,如果你真的是C,那你一定有钥匙打开这个盒子拿到里面的票据。(在C与AS的会话过程中并没有出现明文传输
  • 此时C已经成功拿到的去往TGS的票据。于是C来找TGS:我是C我想要访问V,这是来访问你的门票。
  • TGS收到票据后开始检查票据的真实性。他用与AS共享的密钥解密票据,看到票据信息(由于C没有对应密钥Ktgs,所以C无法解密并篡改信息)包含来访者的名字、从哪里来、到哪里去(因为是去访问TGS,自然是写TGS的名字)、票据的生产日期和有效期(为了防止有人冒充C,重用此票据,所以必须加上时间限制)。
  • TGS确认C的身份真实后就向C发放去往V的票据。解析一下票据的内容:访问V的票据和访问TGS的票据内容项目是一样的。由于这张票据由TGS生成,由V来解密,自然使用TGS、V共享的密钥Kv来加密。票据内容需要写上访问者和受访者的信息,还要由有效期。所以要写上“我是谁”、“我从哪里来”、“我要到哪里去”、“票据有效期”。
  • C终于拿着合法票据找到了V,C拿着票告诉V说:你好,我是C……

由于票据有可重用性,所以C拿到去往TGS和V的票后都会存放好,方便下次访问。在票据的有效期内,C想要在此访问V,只要拿着去V的票就好了,因为不用访问TGS,所以不用访问AS,所以就不用输入密码了(客户输入密码是来解密从AS拿到的加密文件的)。C想要访问V2,如果拿着原来的票据去访问显然是不可以的,由于没有去往V2的票据,就需要去找TGS拿票。去找TGS也是需要票的!但是C有票呀,就不用找AS拿这张票啦!就不用输入密码了。很明显,用户输入密码的次数取决于Ticket tgs票据的有效期。除此之外,还有一点就是,在会话过程中从来就没有验证服务器V的真实性。


3.Kerberos 4

Kerberos 4需要解决上一个会话的哪些问题?第一点是“票据授权”票据的有效期。太长不行,可能会被别人窃取,太短也不行,会让用户输入密码的次数增多。其本质是如何向TGS证明自己的身份。第二点是服务器V如何证明自己的身份。
在Kerberos 4中采用了认证符(Authenticator c)来证明C的身份,其中的关键因素是一个叫做会话密钥的东西。


用于获取票据授权票据的认证服务交换

用于获得服务授权票据的票据授权服务交换

为获得服务而进行的客户端/服务器认证交换

协议分析:

  • 对比上一个会话来分析Kerberous 4
  • C向AS发出请求时除了说明自己是谁、自己想要访问谁之外,还加了一个TS1。TS1的作用就是让C和AS同步一下时间,因为AS将要返回一个带有时间戳的信息,如果两者时间不同步,就有可能在C接收到信息后发现它已经过期了!
  • AS仍然不验证C的身份,而是直接给了他一个上了锁的盒子。
  • 盒子里此时放的也不仅仅是一张票了。AS知道C想要访问TGS,但是C与TGS的会话不够安全,于是AS就给了他们一个会话密钥用来加密会话内容。这把钥匙(K c,tgs)其实是AS复制自己与TGS共享的那把K tgs。因为这把钥匙只有AS和TGS拥有,而C经过AS认证后同样拥有了钥匙,所以这把钥匙就足以证明C的身份。AS需要把会话密钥分别秘密的交给C和TGS。交给C很简单,只要用共享密钥加密就好了。如何秘密交给TGS呢?AS把会话密钥放在了加密过的票据里!经过C来秘密交给了TGS。能打开票据的只有AS、TGS和C,因为会话密钥就是为了验证C的身份的,即使C把它打开也没有关系。所以AS返回给C的加密内容里需要有票据和会话密钥,另外还要写上这把会话密钥是访问TGS用的,还要加上本会话的有效期。相对于上一个会话来说,票据内容里加上了会话密钥,其他内容并没有改变。
  • C拿到了访问TGS的票据,并取得了会话密钥就能访问TGS了。相比于上一个会话,C同样需要拿着票告诉TGS自己想要访问谁,同时还要告诉TGS自己是谁。C不再是简单的说自己的名字,而是采用了认证符(Authenticator c)的方式来证明自己的身份。认证符采用会话密钥加密,内容包括C的名字和地址以及一个时间戳,采用会话密钥加密。由于会话密钥和K tgs是一样的,所以TGS可以解密认证符。因为认证符由会话密钥加密,并且有效期很短,只能使用一次。所以访问者一定是C。
  • TGS把认证符和票据解密,比较来访者的信息,认为来访者身份可靠,就会向C返回信息。当然,这个信息也是经过会话密钥加密的。因为TGS知道C想要V,于是就给了C访问V的会话密钥。同理可知,这个会话密钥也是复制来的,是TGS复制了它和V共享的密钥Kv。TGS返回给C的内容与AS返回给C的信息类型相同,包括会话密钥,标明密钥使用对象,时间戳、访问V的票据。访问V的票据相对于上一个会话也同样多了一个会话密钥。
  • C拿到访问V的票据和会话密钥后就能向V发起会话了。就想C访问TGS一样,只是不用再说自己想要访问谁了,因为他就是要访问V。认证符当然要用和V的会话密钥加密了。
  • 相对与上一个会话,Kerberos 4增加了V的应答。V需要向C证明自己就是V。这个其实很简单,会话密钥能证明C的身份就能证明V的身份,所以V只需要返回一个用会话密钥加密的信息。为了防止有人窃取信息用来重放,所以加密的内容每次都不能一样,那就加密C发过来的认证符里的时间戳吧,因为认证符是一次性的,所以这个加密内容就有时效性了。于是,V就加密了“时间戳+1”发给了C,验证了自己的身份。

对于Kerberos 5,实在是不想看了……

Kerberos认证协议相关推荐

  1. Kerberos认证协议中TGS服务器可以去掉吗?

    Kerberos协议最早是由MIT提出的,是一种身份认证协议. 应用场景:在一个开放环境中,一个工作站用户想通过网络对分布在网络中的各种服务提出请求,那么希望服务器能够只对授权用户提供服务,并能够鉴别 ...

  2. Kerberos 认证协议

    Kerberos 认证协议 Kerberos 认证协议是基于对称密钥的认证协议,在详细描述 Kerberos 之前,要先讲两个重要的概念: Master Key:又叫 Long-term Key,这样 ...

  3. 基于对称加密的密钥分配和Kerberos认证

    基于对称加密的密钥分配和Kerberos认证 对于对称加密,加密双方必须共享同一密钥,而且必须保护密钥不被他人读取.此外,常常需要频繁地改变密钥来减少某个攻击者可能知道密钥带来的数据泄露.因此,任何密 ...

  4. 服务器ipv4协议认证,基于TCP/IP应用层密码认证协议的研究

    Internet在全世界盛行,它的基础协议就是传输控制协议/网际协议(TCP/IP).TCP/IP是一种网络通信协议,它规范了网络上的所有通信设备,尤其是一个主机与另一个主机之间的数据往来以及传送方式 ...

  5. Kerberos网络认证协议的理解

    1. Kerberos 1.1. 概念 Kerberos 是一种网络认证协议,其设计目标是通过密钥系统为客户机 / 服务器应用程序提供强大的认证服务.该认证过程的实现不依赖于主机操作系统的认证,无需基 ...

  6. Hadoop平台安全机制Kerberos认证

    日前笔者在使用flume采集数据直接入到Hadoop平台HDFS上时,由于Hadoop平台采用了Kerberos认证机制.flume配置上是致辞kerberos认证的,但由于flume要采集的节点并不 ...

  7. kerberos认证_初识 Windows域认证体系 Kerberos认证

    关键词: Kerberos认证 域控制器(Domain Controller,DC) 密钥分发中心(Key Distribution Center,KDC) 帐户数据库(Account Databas ...

  8. java kerberos认证 过期_定位Kerberos 配置常见问题

    定位Kerberos配置过程中的问题,可尝试如下步骤,也可学习逗点云的<Kerberos调试系列>课程: 1.使用Kerberos Tray或Kerberos List确认有尝试连接的服务 ...

  9. Kerberos认证过程学习理解

    概念: Kerberos服务器:AS认证服务器,TGS服务授权服务器 Client 客户端,代表使用应用的用户 AppServer 服务端,应用提供各种服务的服务器 Client在Kerberos注册 ...

最新文章

  1. 成长轨迹44 【ACM算法之路 百炼poj.grids.cn】【字符串处理】【2799、2976、2975、2742】...
  2. Python培训就业方向有哪些
  3. myeclipse修改编译器版本的方法 .
  4. php中post提交参数_PHP中Http协议post请求参数
  5. 《 廊桥遗梦 》:用我的整个余生和全部的心来爱你 ...
  6. echarts词云图形状_词云图在自然语言中的应用,可以如此炫酷!
  7. bat循环导oracle,Oracle备份恢复与批处理文件实操
  8. mysql的条件语句_mysql条件语句
  9. idea用maven启动zookeeper源码
  10. php和python-php与python谁更适合web开发?为什么?
  11. android JBOX2D粒子碰撞的实例,以达到特殊效果
  12. 2022前端面试笔试题及答案
  13. python3 集体智慧编程第九章advancedclassify.py代码
  14. PDF如何编辑,怎么删除PDF页眉页脚
  15. VMware安装统信UOS
  16. 工程流体力学笔记暂记17(漩涡的基本概念+求解漩涡强度的斯托克斯定理)
  17. DES加密算法(框图流程详细分析)(C++实现)
  18. 概率论在实际生活的例子_概率论在实际生活中的应用
  19. DNSPOD实现DDNS动态域名解析功能
  20. DNS相关知识及其配置

热门文章

  1. 光之盟:从ONA的握手,解锁全光网产业未来
  2. 深信服 星耀前端一面面经+二面凉了
  3. 64位系统编译32位文件 -m32
  4. 【面试题】前端人70%以上 不了解的promise/async await
  5. it培训和自学的优缺点分析
  6. 本站最全-unity常用API大全(万字详解),不信你不收藏
  7. SyntaxError:Non-UTF-8 code starting with ‘\xb6‘ in file E:/...py on line 16, but no encoding declare
  8. CTF比赛(详细介绍)
  9. 网路工程师工作中常用的几款软件
  10. 11月更新!一口气上线20+新功能,3D架构拓扑图更具趣味性~