Kerberos原理

Kerberos原理

说明:此文为本人根据http://web.mit.edu/Kerberos/dialogue.html中的对话进行撰写,此对话是为了帮助人们理解kerberos的原理而写的一篇对话集。

对应的中文版本:http://www.cnblogs.com/haogj/archive/2010/10/04/1841715.html

 

Step 1: 系统服务通过单独一台计算机向所有人提供,每个人通过登录工作站获取服务,比如邮箱服务。

           

         Q1: 无认证,你的邮件会被其他人获取。

 

Step 2: 笨办法,通过输入口令

           

         Q1: 用户很多,服务器必须记住所有用户的密码;

         Q2: 一个用户要修改口令,则必须通知所有的服务器;

 

Step 3: 用户有口令,每个服务也有服务口令,再增加一个认证服务charon,知道二者的口令。

           

         说明:1. 所有的用户口令和服务口令,charon都知道。

         描述:1. 用户发送用户口令,并声明需要邮件服务给charon

                     2. charon通过判断你的用户口令,确认是你,发送邮件服务密码给你;

                     3. 你再通过邮件服务密码去向邮件服务获取邮件。

         问题:1. Charon若直接给密码,下次就可以绕过认证,或者被别人假冒。

 

Step 4: charon发送一张邮件服务的票

           

         描述: 1. Charon发回一张票,票中的内容为(username),并且使用服务密码进行加密,表示为:mail_passwd(username),下同。

                    2. 邮件服务收到票后,根据自己的服务密码进行解密,如果能够正确解密,将票中的username和请求服务的username相比较,匹配则通过认证。

         问题: 1. 如何判断服务正常对票进行了解密?

 

Step 5: 票中增加一个“服务名”,服务解密后先匹配服务名。

         描述:票为mail_passwd(username, service_name)

         问题:1. 如果票在charon返回的过程中,被hacker拷贝了一份,就可以进行假冒了。

 

Step 6: 票中再增加一个“IP”,同发来的IP地址进行匹配。

         描述:票为mail_passwd(username, IP, service_name)

         问题:1. 一天可能取服务多次,每次取邮件都要取一张新票?

 

Step 7: 让票可重用,用户得到了一张邮件服务的票,就可以重复使用。

         问题:1. 要使用还没有票的服务时,必须输入密码,导致取文件要输一次密码,看邮件又输一次密码,打印,还要输一次密码。

                     2. 用户要明文向charon发送密码,容易密码被盗。

 

Step 8:

         限制1:只输入一次口令;

         限制2:口令不能在网络上明文传输;

 

         破解限制1:增加新服务,“票据授权”服务,此服务把charon的认证服务的票给用户。

           

         描述:1. 用户发送一次口令,从(Ticket Granting Server: TSG)获得“票据授权的票”(ticket-granting ticket, TGT)

                     2. 用户可以重复使用TGT(Authentication Server: AS)获取其他服务的票。

 

         破解限制2: 只发送用户名去请求TGT

         

         描述:1. Kinit发送user_nameTSG,由于charon端也是有用户密码的,将TGTuser_passwd加密后返回。用户收到后,再利用user_passwd进行解密,这样就可以得到TGT了。

         问题:1. 服务票由于是可重用的,被偷了怎么办?

 

Step 9: 票不能永远合法,必须设定一个有效期限。

         描述:票的内容就变成:[username, IP, service_name, lifespan, timestamp],有效期默认设定为8个小时了。

         问题:票在失效前被盗怎么办?

 

Step 10:

         假设:客户端发送给服务端三样东西:username, IP, service_passwd(ticket[username, IP, service_name, lifespan, timestamp])

         基准:1. 服务能够对票进行解密吗?

                     2. 票在有效期内么?

                     3. 票中的名字和地址是否和请求的usernameIP是否匹配?

         声明:1. 若票能被服务端解密,说明此票真的来自charon,因为除了mail server知道mail的服务密码外,只有charon知道;

                     2. 过期拒绝,防止使用旧的票;

                     3. 不匹配,说明使用其他人的票,要拒绝。

         疑问:用户名和IP匹配证明了什么?什么也无法证明!

         答疑:因为服务无法确定票的发送者是不是合法用户,且可以修改用户名和IP

        

Step 11: charon在用户和服务之间设定一个公共口令。

           

         描述:1. Kinit发送usernameTSGTSG根据username查找user_passwd,然后生成一张TGT,并且生成一个userAS共享的口令。TSG使用user_passwd将票和共享口令加密发送诶kinit

                     2. kinit收到包,使用自己的user_passwd将包解密,正确取出共享口令和TGT

                     3. 这时还没有邮件服务的票,client要先去向AS申请一张邮件服务的票。客户端先生成一个验证器[username, ip],并且使用与AS共享的口令将验证器加密,然后随同TGTusernameipservice_name发送给AS

                     4. AS利用共享口令解密,通过认证检查,AS为用户生成了一张mail_ticket,使用mail_passwd加密;还生成clientmail service共享的口令。然后将这两者使用与AS共享的口令加密打包发送。

          5. client收到包,利用与AS共享的口令解密,这样就取出了与mail service共享的口令,再将username,ipclientmail service共享的口令加密,即变成share_passwd(username, ip), mail_passwd(share_passwd,mail_ticket)

                     6. mail service收到包后,先利用服务密码解密出share_passwd,然后再利用share_passwd解密验证器(username, ip),然后与ticket中的username, ip进行匹配。

 

         问题1:验证器和票一起被盗怎么办?

         答:验证器只能用一次,有效时长2分钟。

 

         问题2:共享口令和验证器,能够防止用户被假冒,但是不能保护用户使用假冒的服务器。

         答:服务程序用口令加密响应包,就靠响应包来证实自己的身份。即client收到响应包,如果能正确解密响应信息,客户端程序就能确定这是正确的服务器。

 

 

对话后记:这个对话时1988年写的了,为了帮助读者理解kerberos V4的运行方式。现在的V5虽然很多东西改变了,但是核心概念没有变。

 

本人后记:上文本人并未经过严格整理,应该有所缺漏、错误,敬请谅解,还请指出!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值