Kerberos概述Kerberos是一种计算机网络授权协议,是一套应用对称密钥的管理系统,并需要一个值得信赖的第三方,它使用一个由两个独立的逻辑部分:认证服务器AS和票据授权服务器TGS组成的可信赖第三方KDC,KDC持有所有的无论是客户还是服务器共享的一套只有实体本身和KDC知道的密钥,密钥用于证实实体身份,KDC会在实体间交互信息中产生一个会话密钥来加密这些交互信息。在winserver2003中它扮演的是一个安全支持提供方的角色(ssp),可用于在非安全网络中对客户端和服务器端进行身份验证的一个机制,也就是说为互相不认识的通讯双方提供安全认证工作,并且可以相互认证,即客户端和服务端,客户和客户间或服务端与服务端之间,当有N个用户在使用该系统时,任意两人间的对话都有共享密码,所以所需的最少会话密钥数为N*(N-1)/2个。它对防止窃听,replay攻击,和保护数据的完整性提供保护。KerberosV5中还有许多新特性。用户可以在另一个网络中安全的提交他们的票;并且,用户可以把他们的一部分认证权转给服务器,这样服务器就可以作为用户的代理proxy。其它的新特性包括:用更好的加密算法替换了DES加密算法,三重DES-CBC-MD5加密。Kerberos交互流程第一步kerberos认证服务请求:用户登陆后,发送票据请求到KDC请求一个短周期票据叫做TGT(包含用户身份信息)。第二步Kerberos认证服务响应:AS构造TGT并创建一个会话密钥用于加密客户和TGS通讯。TGT的生命周期是有限的。当客户收到TGT时,他还没有被授予使用任何资源,哪怕是本地计算机上的资源。为何要使用一个TGT,可以让AS直接发布票据给目标服务器吗?是可以,但是如果AS直接发布票据,那用户每请求新服务或者服务器的时候需要输入一次登陆密码。发布一个短周期的(10hours)TGT给予用户一个有效的票据用于票据授予服务TGS,可以依次发布目标服务器的票据。TGT最主要的好处是用户只需在登陆时输入一次用户密码。第三步kerberos票据授予服务请求:客户想要访问本地和网络资源时,他需要先发送票据请求道TGS。这个票据可以被看作是服务票据和绘画票据。取票时,客户需出示TGT,authenticator,和目标服务器名(ServerPrincipalName)。第四步kerberos票据授予服务响应:TGS会检验TGT和authenticator,如果他们被接受,TGS会提供一个serviceticket。客户身份是从TGT处提取,并且复制到serviceticket上。然后该票据发回客户端。TGS只负责认证客户,并不意味着客户最终能否访问到目标服务器。第五步应用服务请求:客户拿到服务票据后,发送票据还有一个新的认证证书到目标服务器,请求服务。服务器会解密票据,验证认证信息,windows服务会创建一个token给用户基于在票据中的SID信息。第六步kerberos应用服务响应:客户可选择目标服务验证它自己的身份,这就是所谓的相互认证。如果被客户要求,目标服务器将从认证器中提取客户端计算机中的时间戳,用TGS提供用于客户端/目标服务器端的会话密钥加密时间戳,发送回给客户端。认证后双方开始通讯,提供服务。缺陷单点失败:K需要KDC服务器的持续响应,当K的服务结束前,没人可以连接到服务器,该缺陷可以通过使用复合Kerberos服务器和缺陷认证机制弥补。K要求参与通讯的实体主机时钟同步,因为票据具有时间戳,因此如果主机与K服务器的时钟不同步,认证将失败,默认时钟差不超过10分钟,实践中通过网络时间协议的后台程序来保持同步。所有用户的密钥都储存于KDC服务器中,如果有服务器安全问题将印象所有用户的密钥。KerberosSecuritySupportProvider构架Winserver2003把kerberos协议实现为一个能够通过SSPI的SSP,winserver2003还可通过smartcard的公共密钥证书进行身份验证来扩展kerberos协议。在WindowsServer2003中提供了一个通过认证令牌在现有的通信信道的客户端和服务器之间的机制。当双方需要认证以便他们能安全地进行通信,用于身份验证的请求路由到SSPI,完成认证过程,无论网络协议正在使用。SSPI返回透明二进制大对象,然后由应用程序传递到连接的另一边,在这一点上,他们可以通过sspi层在那边。因此,SSPI使应用程序能够使用各种安全模型在计算机或网络不改变接口的安全系统。下表描述了插入SSPISSP组件。表中每个协议是用不同的方式在WindowsServer2003促进不安全的网络环境中的安全通信。KerberosV5身份验证一个用口令或者智能卡交互登录的工业标准。它也是Windows2000andWindowsServer2003首选身份验证的方式。NTLM身份验证一个质询回应(challenge-response)协议使用来提供比Windows2000更早的系统的兼容性Digest身份验证用于WindowsServer2003LDAP和web身份认证的工业标准,摘要身份的信任凭证被MD5散列后在网上传输。Schannel一个实现安全套接层(SSL)和传输层安全(TLS)因特网标准身份验证协议的SSP。Schannel被用于基于web的服务器身份验证,象当一个用户试图访问一个安全的web服务器。Negotiate被用于协商使用哪个特定协议的SSP。当一个应用通过SSPI登录到网络,它能够指定一个SSP处理这个登录请求,当应用指定Negotiate,Negotiate分析这个请求并选取对客户端配置的安全策略来说最好的SSP处理这个请求.WindowsServer2003实现了KerberosV5认证协议作为一个SSP,DLL提供的操作系统。该系统使用KerberosSSP,kerberos.dll,作为其认证的第一选择。在LSA建立交互式用户的安全上下文,对KerberosSSP的另一个实例可以由一个程序运行在用户的安全上下文支持封签信息加载。由于Kerberos协议是用于WindowsServer2003首选的认证协议,所有域名服务支持KerberosSSP,包括:使用轻量级目录访问协议(LDAP)目录查询远程服务器或工作站管理使用RPC调用打印服务客户机服务器身份验证使用通用互联网文件系统/服务器消息块的远程文件访问(CIFS/SMB)分布式文件系统管理和转介网络认证的Internet信息服务(IIS)Internet协议安全(IPSec)的安全权限认证证书请求的证书服务域的用户和计算机Kerberos的物理结构Kerberos身份验证提供了一种机制的相互认证客户端和服务器之间的一个开放的网络,网络中传输的数据包在网络可以监控和将来修改。为了提供安全认证,Kerberos身份验证使用对称密钥,加密的对象,和Kerberos服务。用于认证密钥为什么需要钥匙?Kerberos协议在很大程度上依赖于一个涉及共享密钥认证技术。基本共享秘密的概念很简单:如果一个秘密是由只有两个人知道,然后或者个人可以通过确认其他人知道秘密核实对方身份。例如,假设爱丽丝经常把消息发送给鲍勃,鲍勃,需要确保爱丽丝的话真的有来自爱丽丝在他作为其信息。他们决定选择一个密码,同意分享他们两个之间的秘密密码解决他们的问题,但不与其他任何人。如果消息声称是从爱丽丝能证明发送者知道密码,鲍勃可以验证发送方确实是爱丽丝。唯一的问题留给爱丽丝和Bob解决了爱丽丝是如何将表明她知道密码。她能将它包括在她的消息的某个地方,也许在一个签名块结束时,爱丽丝,这是我们的秘密。这将是简单而有效的,如果爱丽丝和Bob可以确保没有人读他们的邮件的话将是有效的。不幸的是,他们的信息通过使用网络的人比如卡罗尔,他使用网络分析仪的扫描流量,她可能有机会会看到这个密码。因此,爱丽丝不能证明她知道这个秘密被包括在她发的消息。保持密码的秘密性,她必须表明她知道密码是被加密的。Kerberos协议的加密密钥体制解决了这个问题。它不是共享一个密码,通信合作伙伴共享密钥,他们利用这一关键点验证一个人的身份。共享密钥必须是对称的,这是一个关键,必须能够加密和解密。一方通过加密一段信息证明知到的关键;其他关键证明通过解密信息得到。Kerberos认证依赖于加密几个密钥和密钥类型。关键类型可以包括长期的对称密钥,长期的非对称密钥,和短期对称密钥。认证协议的设计使用对称加密,这意味着相同的共享密钥由发件人和收件人使用加密和解密。长期的对称密钥:用户,系统,服务,和域的钥匙长期的对称密钥是来自一个密码。明文密码是通过密码文本通过加密函数转化为一个密钥。(所有的Kerberos版本5的认证协议的实现必须支持des-cbc-md5。其他的算法是允许的。)的加密函数的结果是关键。用户密钥在创建用户时,密码是用于创建用户密钥。在ActiveDirectory域,用户密钥存储在ActiveDirectory的用户对象。在工作站,用户密钥是创建在用户登录时。系统的钥匙当一个工作站或服务器加入一个Windows域,它接收一个密码。以同样的方式作为一个用户帐户,该帐户的密码系统是用于创建系统的关键。服务的钥匙服务使用密钥基于他们所使用的登录帐户密码。在同一领域所有的KDC使用相同的服务的关键。这主要是基于分配给krbtgt账户密码。每一个活动目录域都会有一个内置帐户。KerberosSSP加密密钥长度KerberosSSP支持不同的加密类型和密钥长度取决于要完成的任务和指定的选项。虽然关键的大小决定了保护程度的关键是,关键尺寸的影响不显著,票据的大小。下表列出了密钥长度,KerberosSSP支持加密的各种类型。长期的非对称密钥:公钥目前,在微软实施的Kerberos认证中公钥证书存储在智能卡是唯一的长期非对称密钥。短期的对称密钥:会话密钥用于票据授予票的会话密钥(tgts)和服务票是短暂的,只要会话或服务票有效期。Kerberos票证Kerberos认证的主要成分是票。Kerberos消息用于请求和提供票据。有两种类型的使用Kerberos身份验证票,TGTs服务票。Kerberos票证请求Kerberos客户端发送请求KDC票:RequestedTicketTypeKDCServiceThatReceivesRequestTGTAuthenticationserviceServiceticketTicket-grantingservice票的要求包括:请求属性(flag),如是否票是可再生的。请求的加密方法。票据授予票KDC响应通过返回一个服务票给客户端的认证服务请求。这种特殊的服务被称为票据授予票(TGT)。一个TGT确保了认证服务安全的运送了请求者的凭证给票据授予服务TGS。TGT:用户的初始票据从认证服务得到。用于请求服务的票。只是用于票据授予服务。KDC分享了一个由密钥加密过的TGTs。客户端不能读票。只有KDC服务器能读取TGT获取用户凭据,会话密钥,和其他信息。像一个普通的服务票,TGT包含一份会话密钥的服务(在这种情况下,KDC)将使用与客户沟通。TGT与KDC的长期密钥加密。从客户端的角度来看,一个TGT只是另一张票。它试图连接到任何服务之前,客户端首先检查到一个服务票凭据缓存。如果它没有,它检查缓存再次为TGT。如果它找到一个TGT,客户端获取相应的TGS密钥从缓存中,用这钥匙准备一个验证器(本文档中描述的后),并发送的认证和TGTKDC,以及一个用于服务服务请求。换句话说,进入KDC与进入任何其他服务领域中没有什么不同它需要一个会话密钥,验证器,和一张票。从KDC来看,使它能避免随后给出查找用户的长期密钥每次用户请求服务的性能损失。KDC查找用户的长期密钥只有一次,当它授予的初始目标。与所有其他客户交流,KDC可以有自己的长期密钥TGT会话密钥解密,提取物,用以验证客户端的身份验证。服务的票一个服务票使票据授予服务(TGS)安全运输请求者的凭据到目标服