Kerberos认证协议

来源:互联网 发布:淘宝什么时候优惠最大 编辑:程序博客网 时间:2024/06/07 06:45

序言:近几天学习了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,实在是不想看了……

0 0
原创粉丝点击