Kerberos一词来源于古希腊神话中的Cerberus——守护地狱之门的三头犬,Kerberos是为TCP/IP 网络设计的可信第三方鉴别协议,最初是在麻省理工学院(MIT)为Athena 项目而开发的。Kerberos服务起着可信仲裁者的作用,可提供安全的网络鉴别,允许个人访问网络中不同的机器。
1. Kerberos 模型
Kerberos模型基于Needham-Schroeder的可信第三方协议,采用DES加密(也可用其他算法替代),它与网络上的每个实体分别共享一个不同的秘密密钥,知道该秘密密钥就是身份的证明。
首先以吃饭为例,阐述Client与Kerbros、TGS及Server之间的关系如下:
Kerberos有一个所有客户和秘密密钥的数据库,由于Kerberos知道每个人的秘密密钥,所以它能产生一个实体证实另一个实体身份的消息。Kerberos还能产生会话密钥,只供一个客户机和一个服务器(或两个客户机)使用。会话密钥用来加密双方间的通信消息,通信完毕,即销毁会话密钥。
Kerberos 协议如下:
-
客户从Kerberos 请求一张票据许可票据(TGT,Ticket Granting Ticket)作为票据许可服务(TGS,Ticket-Granting Service),该票据用用户的秘密密钥加密后发送给用户;
-
为了使用特定的服务器,客户需要从TGS中请求一张票据,TGS 将票据发回给客户;
-
客户将此票据提交给服务器和鉴别器,如果客户的身份没有问题,服务器就会让客户访问该服务。
(1) 请求票据许可票据
客户到Kerberos: c c c,tgs。
(2)票据许可票据
Kerberos到客户: { K c , t g s } K c \{K_{c,tgs}\}K_c {Kc,tgs}Kc, { T c , t g s } K t g s \{T_{c,tgs}\}K_{tgs} {Tc,tgs}Ktgs
(3)请求服务器票据
客户到TGS: { A c , s } K c , t g s \{A_{c,s}\}K_{c,tgs} {Ac,s}Kc,tgs, { T c , t g s } K t g s \{T_{c,tgs}\}K_{tgs} {Tc,tgs}Ktgs
(4)服务器票据
TGS到客户: { K c , s } K c , t g s \{K_{c,s}\}K_{c,tgs} {Kc,s}Kc,tgs, { T c , s } K s \{T_{c,s}\}K_s {Tc,s}Ks
(5)请求服务
客户到服务器: { A c , s } K c , s \{A_{c,s}\}K_{c,s} {Ac,s}Kc,s, { T c , s } K s \{T_{c,s}\}K_s {Tc,s}Ks,
相关缩写表示如下
c c c | 客户(机) |
s s s | 服务器 |
a a a | 客户的网络地址 |
v v v | 票据的有效起止时间 |
t t t | 时间标记 |
K x K_x Kx | x x x的秘密密钥 |
K x , y K_{x,y} Kx,y | x x x与 y y y的会话密钥 |
{ m } K x \{m\}K_x {m}Kx | 以 x x x的秘密密钥加密的 m m m |
T x , y T_{x,y} Tx,y | 使用 y y y的 x x x的票据 |
A x , y A_{x,y} Ax,y | 从 x x x到 y y y的鉴别码 |
2. 凭证
Kerberos使用两类凭证:票据(ticket)和鉴别码(authenticator)。
(1)票据
票据用于秘密地向服务器发送持有票据用户的身份识别,票据中还包括有一些信息,服务器能够用这些信息来确认使用票据的客户与发给票据的客户是同一个客户。
Kerberos票据的格式如下: T c , s = s , { c , a , v , K c , s } K s T_{c,s} = s,\{c,a,v,K_{c,s}\} K_s Tc,s=s,{c,a,v,Kc,s}Ks对单个的服务器和客户而言,票据很有用。它包括客户名、服务器名、网络地址、时间标记和会话密钥。这些信息用服务器的秘密密钥加密。
客户一旦获得该票据,他便可以多次使用它来访问服务器,直到票据过期。客户无法解密票据(她不知道服务器的秘密密钥),但她可以以其加密的形式呈递给服务器。票据在网络上传送时,任何在网上窃听的人都无法阅读或修改它。
(2)鉴别码
Kerberos鉴别码的格式如下: A c , s = { c , t , k e y } K c , s A_{c,s}=\{c,t,key\}K_{c,s} Ac,s={c,t,key}Kc,s客户在每次需要使用服务器上的服务时,都要产生一个鉴别码。该鉴别码包括用户名、时间际记和一个可选的附加会话密钥,它们用服务器与客户共享的会话密钥加密。与票据不同的是,鉴别码只能使用一次。客户可以根据需要产生鉴别码(它知道共享的秘密密钥)。
鉴别码可达到两个目的:
- 首先,它包括一些以会话密钥加密的明文,这表明鉴别码的发送者也知道密钥。
- 更重要的是,加封的明文包括时间标记,即使记录票据和鉴别码的窃听者无法重放它们。
3. 协议
(1)初始票据获取
- 客户给Kerberos 鉴别服务器发送一个消息,该消息包括客户名 c c c及其TGS服务器名。实际中,客户一般只是将其名字输人系统,注册程序发送该请求。
- Kerberos鉴别服务器在其数据库中查找客户。如果客户在数据库中,Kerberos便产生一个在客户和TGS之间使用的会话密钥( { K c , t g s } \{K_{c,tgs}\} {Kc,tgs}),这叫做票据许可票据。
- Kerberos 利用客户的秘密密钥加密会话密钥 { K c , t g s } K c \{K_{c,tgs}\}K_c {Kc,tgs}Kc。然后为客户产生一个TGT向TGS证她的身份,并用TGS的秘密密钥对其加密 { T c , t g s } K t g s \{T_{c,tgs}\}K_{tgs} {Tc,tgs}Ktgs。鉴别服务器将这两种加密的消息发送给客户。
- 客户解密第一个消息,并恢复会话密钥。客户现在可在TGT的有效期内向TGS证实她的身份。
(2)服务器票据的获取
- 客户必须为他想使用的每一项业务获得不同的票据,TGS给每个服务器分配票据。客户向TGS发送一个请求。
- TGS接收到请求后,用自己的秘密密钥解密此TGT,然后再用TGT中的会话密钥解密密鉴别码。
- TGS比较鉴别码中的信息与票据中的信息、客户的网络地址与发送的求地址,以及时间标记与当前时间。如果每一项都匹配,便允许处理该请求。
- TGS通过将客户有效的票据返回给服务器的方式来响应一个有效请求 { T c , s } K s \{T_{c,s}\}K_s {Tc,s}Ks。TGS 还为客户和服务器产生一个新的会话密钥 { K c , s } \{K_{c,s}\} {Kc,s},此密钥由客户和TGS共享的会话密钥加密 { K c , s } K c , t g s \{K_{c,s}\}K_{c,tgs} {Kc,s}Kc,tgs。然后将这两种消息返回给客户。
- 客户解密消息,同时得到会话密钥 { K c , s } \{K_{c,s}\} {Kc,s}。
(3)服务请求
- 客户向服务器鉴别自己的身份。客户产生一个鉴别码,鉴别码由客户名、客户网络地址和时间标记组成,用TGS为客户和服务器产生的会话密钥加密得到 { A c , s } K c , s \{A_{c,s}\}K_{c,s} {Ac,s}Kc,s。
- 客户的服务请求由从Kerberos接收到的票据 { T c , s } K s \{T_{c,s}\}K_s {Tc,s}Ks和加密的鉴别码 { A c , s } K c , s \{A_{c,s}\}K_{c,s} {Ac,s}Kc,s组成。
- 服务器解密并检查票据和鉴别码,以及客户地址和时间标记。需要相互鉴别的应用中,服务器给客户返回一个包含时间标记的消息,该消息由会话密钥加密。这证明服务器知道客户的秘密密钥而且能解密票据和鉴别码。
- 客户和服务器可以用共享的密钥加密信息。