kerberos
Kerberos
在希腊神话中Kerberos是守护地狱之门的一条凶猛的三头神犬,而我们在本文中所要介绍的Kerberos认证协议是由美国麻省理工学院(MIT)首先提出并实现的,是该校雅典娜计划的一部分。这个定名是贴切的,因为Kerberos认证是一个三路处理过程,依赖称为密钥分发中心(KDC)的第三方服务来验证计算机相互的身份,并建立密钥以保证计算机间安全连接。本质上每台计算机分享KDC一个秘钥,而KDC有两个部件:一个Kerberos 认证服务器和一个票据授权服务器。如果KDC不知道被请求目标服务器,则会求助于另一个KDC来完成认证。它允许在网络上通讯的实体互相证明彼此的身份,并且能够阻止窃听和重放等攻击手段。不仅如此,它还能够提供对通讯数据保密性和完整性的保护。
Kerberos从提出到今天,共经历了五个版本的发展。其中第一版到第三版主要由该校内部使用。当发展到第四版的时候,已经取得了在MIT校外的广泛认同和应用。由于第四版的传播,人们逐渐发现了它的一些局限性和缺点,例如适用网络环境有限、加密过程存在冗余等等。MIT充分吸取了这些意见,对第四版进行了修改和扩充,形成了今天非常完善的第五版。第五版由John Kohl和Clifford Neuman设计,在1993年作为RFC 1510颁布,在2005年由RFC 4120取代,目的在于克服第四版的局限性和安全问题,用更细化和明确的解释说明了协议的一些细节和使用方法。
http://web.mit.edu/kerberos/www/
https://blog.csdn.net/neao32101/article/details/52203671
Kerberos认证流程详解
https://blog.csdn.net/neao32101/article/details/52203671
利用kerberos 提供票据加密
Kerberos是守卫在地狱门口的那只三头犬。Kerberos协议也具有三个头:客户端、服务器和一个代理(KDC密钥分发中心)。
相关关键字:TGS票据授权服务/认证服务AS principal 票据授权票据TGT
- 客户端向AS发起请求,请求内容是:我是谁(客户端的principal),我要和票据授权服务通信(TGS的principal)等
- AS收到请求后,随机生成一个密码Session Key(Kc,tgs),并生成以下两个Ticket返回给客户端: Tc,tgs={Kc,tgs; tgs_principal; …} Kc - 该票据是给客户端的,大括号里面为票据中的内容,后面的Kc为客户端的密码,表示该票据用客户端的密码加密了。 Ttgs,c={Kc,tgs; client_principal;…} Ktgs - 该票据是给TGS,大括号里面为票据中的内容,后面的Ktgs为TGS的密码,表示该票据用TGS的密码加密了,只有TGS能解开。 上述两步和上面简化的认证流程的前两步是一致的,唯一不一样的是与客户端通信的另一端是票据授权服务(TGS)。该步骤中得到的Tgs,c就类似于例子中的联票,后面将会通过它来得到一张和其他服务器通信认证的票据。
- 客户端用自己的密码解开Tc,tgs,得到Kc,tgs,生成一个Authenticator,并给TGS发起请求,请求内容是包括: Authenticator = {time_stamp, checksum, …}Kc,tgs Ttgs,c - 第二步从AS返回的票据 server_principal, … 在这个步骤中,Authenticator和Ttgs,c是用于客户端向TGS证明自己身份的,server_principal是客户端需要访问的服务器的名字。
- TGS收到客户端发送的Authenticator和Ttgs,c后,先用自己的密码解开Ttgs,c,得到SessionKey Kc,tgs,然后解开Authenticator,对客户端进行认证,这与简化的认证流程的第4步是一致的。如果客户端通过了认证,TGS生成一个客户端和服务器的SessionKey(Kc,s),同时将组装下面两个票据返回给客户端: Tc,s={Kc,s, server_principal,…}Kc,tgs - 这是给客户端的票据,Kc,s是客户端与服务器之间的SessionKey,用客户端和TGS之间的SessionKey(Kc,tgs)加密。区别就在这里了,给客户端的票据不再用客户端的密码加密,而是用客户端和Tgs之间的SessionKey加密。 Ts,c={Kc,s, client_principal,…}Ks - 这是给服务器的票据,用服务器的密码加密。
- 客户端收到上述两个票据后,用Kc,tgs解开Tc,s得到Kc,s,然后生成一个Authenticator并发送请求给服务器,内容包括: Authenticator={time_stamp, Ts,c_checksum,…}Kc,s Ts,c={Kc,s, client_principal,…}Ks。
- 服务器收到请求后,用自己的密码解开Ts得到Kc,s,然后用Kc,s解开Authenticator对客户端进行认证。
这是客户端首次认证的流程,通常客户端会在第2步的时候把相应的票据保存下来,在以后客户端需要认证别的服务器的时候就不需要前面两步,直接从第3步开始。