KERBEROS协议要解决的问题:

1.认证

2.完整性

3.保密性

KERBEROS协议,是在分布式环境下,为了解决互联网通信的(基于C/S模型)协议,该环境下有客户机(C)和(应用)服务器(V)。

该协议要实现双向认证,从C到V的认证,也要实现V到C的认证。

原来的场景:有很多个用户,比如C1,C2,C3 还有很多个服务器,比如V1,V2,V3

C1要请求V1的服务,就要验证V1,然后V1要验证C1;C1要请求V2的服务,还要重复上面繁琐的过程。不具有可扩展性,诸多C和诸多V要进行相互验证(如果是基于对称密钥的验证,又要完成对称密钥的共享)

KERBEROS的核心思想: 首先基于一个可信第三方AS(Authentication Server),然后把其他各个服务器的认证服务汇聚到这个AS上。

这样我们的认证就可以简化成一步,本来是C1去V1登录,验证。现在改到去AS上验证,如果验证通过,那么AS会给C1发一张“票”,通过这张票,C1可以访问V1、V2......(这个过程叫做单点登录) 

这里的密钥交换,密钥协商用的都是对称密钥,没有使用公开密钥。

例子:我们如果在电脑上登录了QQ,我们就可以通过快速登录从而登上QQ音乐,QQ游戏等一系列腾讯产品,不需要繁琐的多次输入密码验证登录。

 

KERBEROS协议解决的问题是:在一个分布式环境中,用户希望获取服务器上提供的服务,服务器能限制授权用户的访问,并能对服务请求进行验证

KERBEROS面临的挑战:

·用户伪装成另一个用户(要完成对用户的验证)

·假冒网络地址(用户把自己的地址(IP/MAS)改成服务器的地址,所以不能用地址来验证用户)

·用户窃听报文交换过程,利用重放攻击进入服务器

 

KERBEROS协议中用到的符号:

C=客户

AS=认证服务器(存放着所有用户口令和用户口令信息)

V=服务器

IDc=在C上的用户标识符

IDv=V的标识符

Pc=在C上的用户口令

ADc=C的网络地址

Kv=AS和V共享的加密密钥

 

KERBEROS协议,是在分布式环境下,为了解决互联网通信的(基于C/S模型)协议。

KERBEROS协议要解决的问题:

1.认证 2.完整性 3.保密性

KERBEROS协议解决的问题是:在一个分布式环境中,用户希望获取服务器上提供的服务,服务器能限制授权用户的访问,并能对服务请求进行验证。

KERBEROS协议要实现双向认证,从C到V的认证,也要实现V到C的认证。

 

原来的互联网通信场景:有很多个用户,比如C1,C2,C3,有很多个服务器,比如V1,V2,V3,C1客户机要访问V1,V2等服务器端取得服务。

首先,C1要请求V1的服务,就要验证V1,然后V1要验证C1;C1要请求V2的服务,还要重复上面繁琐的过程。不具有可扩展性,诸多C和诸多V要进行相互验证(如果是基于对称密钥的验证,又要完成对称密钥的共享)

KERBEROS的核心思想: 首先基于一个可信第三方AS(Authentication Server),然后把其他各个服务器的认证服务汇聚到这个AS上。

这样就可以把认证过程就简化成一步,本来是C1去V1上验证。现在改到去AS上验证,如果验证通过,那么AS会给C1发一张“票”,通过这张票,C1可以访问V1、V2......(这个过程叫做单点登录) 

(这里的密钥交换,密钥协商用的都是对称密钥,没有使用公开密钥)

例子:我们如果在电脑上登录了QQ,我们就可以通过快速登录从而登上QQ音乐,QQ游戏等一系列腾讯产品,不需要繁琐的多次输入密码验证登录。

 

KERBEROS面临的挑战:

·用户伪装成另一个用户(要完成对用户的验证)

·假冒网络地址(用户把自己的地址(IP/MAS)改成服务器的地址,所以不能用地址来验证用户)

·用户窃听报文交换过程,利用重放攻击进入服务器

 

KERBEROS协议中用到的符号:

C=客户

AS=认证服务器(存放着所有用户口令和用户口令信息)

V=服务器

IDc=在C上的用户标识符

IDv=V的标识符

Pc=在C上的用户口令

ADc=C的网络地址

Kv=AS和V共享的加密密钥

 

一个简单的基于可信第三方的认证对话:    (在这里第三方只完成了认证,授权还在应用服务器上完成)

(1)C->AS:IDc||Pc||IDv 客户机c的ID 客户机的用户口令 想要访问的服务器V的标识符

(2)AS->C:Ticket

(3)C->V:IDc||Ticket 客户机的ID 票

Ticket=Ekv[IDc||ADc||IDv] 票里的数据:客户机的ID 客户机的网络地址 服务器V的ID

 

上述协议存在的问题:

要求用户频繁输入口令

申请不同的服务,用户需要新的票据 

口令明文发,可能被窃取

对手窃听到Ticket,模仿C进行重放攻击 (攻击者只需把网络地址改成C的网络地址)

 

简单的协议改进                            (这里,认证和授权都在AS上了)

增加票据许可服务器TGS(进一步剥离应用服务器上的授权功能,汇集到TGS服务器上)

Java Kerberos 协议 kerberos协议的原理_Java Kerberos 协议

---做认证

Java Kerberos 协议 kerberos协议的原理_Java Kerberos 协议_02

---(3)C去TGS请求授权          (4)TGS服务器给C发张票 

Java Kerberos 协议 kerberos协议的原理_重放攻击_03

      TS时间戳(发票时间)      Lifetime有效期          保证Ticket鲜活性

一般Ticket tgs的时间一般长一点

Ticket V的时间稍短

 

Java Kerberos 协议 kerberos协议的原理_网络地址_04

先认证 认证只做一次,以后访问应用服务器时 在授权,不需要在认证了,完成了单点登录

 

 

 注意:重放攻击没有解决

上述协议存在的问题:

每一张ticket的有效期限设置:如果太短,要求用户频繁认证  如果太长,存在较大风险遭受重放攻击

攻击者可能偷窃Ticket,在过期之前使用

服务器如何向用户认证自己

 

TGS服务器和V服务器都缺乏对客户C的认证

 

真正的KERBEROS协议

 

前设条件

术语:

・AS=认证服务器(存放着所有用户及用户口令信息)

・Kv=TGS和V共享的加密密钥

・Ktgs=AS和TGS共享的加密密钥

客户机的密钥可以通过计算客户机口令的单向函数来得到

每个客户机与AS有共享的秘密一客户机的密钥

TGS与AS有共享的对称密钥Ktgs

每个应用服务器都与TGS有共享的对称密钥Kv

 

KERBEROS V4对话

Java Kerberos 协议 kerberos协议的原理_服务器_05

Kc,tgs 是会  话密钥 是AS服务器给客户C和tgs服务器协商的会话密钥         没有这个K c,tgs  那么客户机和tgs服务器就不能进行身份认证了

 

 

Java Kerberos 协议 kerberos协议的原理_重放攻击_06

 

 TS3 (认证字)用来认证 用本地时间戳减去TS3 在合理误差之内 就承认他   可以抵挡重放攻击

 (这个协议要求机器的时间同步,主要应用在局域网环境下,互联网环境不好用,因为时间误差可能比较大)

 

 

 

 

Java Kerberos 协议 kerberos协议的原理_服务器_07

TS5 也是认证字 防止重放攻击

 

 

 

 

注意:1.AS帮助C和tgs之间写上了一个对称秘钥叫做Kc,tgs 可以实现tgs服务器和客户C之间的双向认证

同样 tgs服务器 也为C和V服务器协商了一个会话密钥 叫做Kc,v 由此c和v能实现双向的身份认证

2.该协议使用时间戳 作为随机数 进行身份认证 所以适用范围首先(参与通信的主机之间能够精确同步时钟是才能用)

3.质询和应答 使用认证字 (时间戳) 第三步 第四步 第五步 第六步      (随机数+1 也是常见的质询与应答)

 

Java Kerberos 协议 kerberos协议的原理_服务器_08

 

 KERBEROS会话全过程