Kerberos

维基百科,自由的百科全书
跳转至: 导航搜索

Kerberos协议是一种计算机网络授权协议,用来在非安全网络中,对个人通信以安全的手段进行身份认证。这个词又指麻省理工学院为这个协议开发的一套计算机软件。软件设计上采用客户端/服务器结构,并且能够进行相互认证,即客户端和服务器端均可对对方进行身份认证。可以用于防止窃听、防止重放攻击、保护数据完整性等场合,是一种应用对称密钥体制进行密钥管理的系统。Kerberos的扩展产品也使用公开密钥加密方法进行认证。

当有N个人使用该系统时,为确保在任意两个人之间进行秘密对话,系统至少保存有它与每个人的共享密钥,所需的最少会话密钥数为N个。

概述[编辑]

Kerberos是一种计算机网络认证协议,它允许某实体在非安全网络环境下通信,向另一个实体以一种安全的方式证明自己的身份。它也指由麻省理工实现此协议,并发布的一套免费软件。它的设计主要针对客户-服务器模型,并提供了一系列交互认证——用户和服务器都能验证对方的身份。Kerberos协议可以保护网络实体免受窃听和重复攻击。

Kerberos协议基于对称密码学,并需要一个值得信赖的第三方。Kerberos协议的扩展可以为认证的某些阶段提供公钥密码学支持。

历史[编辑]

麻省理工研发了Kerberos协议来保护Project Athena提供的网络服务器。这个协议以希腊神话中的人物Kerberos(或者Cerberus)命名,他在希腊神话中是Hades的一条凶猛的三头保卫神犬。目前该协议存在一些版本,版本1-3都只有麻省理工内部发行。

Kerberos版本4的主要设计者Steve Miller和Clifford Neuman,在1980年末发布了这个版本。这个版本主要针对Project Athena。版本5由John Kohl和Clifford Neuman设计,在1993年作为RFC 1510颁布(在2005年由RFC 4120取代),目的在于克服版本4的局限性和安全问题。

麻省理工在版权许可的情况下,制作了一个Kerberos的免费实现工具,这种情况类似于BSD。在2007年,麻省理工组成了一个Kerberos协会,以此推动Kerberos的持续发展。

因为使用了DES加密算法(用56 bit的密钥),美国出口管制当局把Kerberos归类为军需品,并禁止其出口。一个非美国设计的Kerberos版本4的实现工具KTH-KRB由瑞典皇家理工研制,它使得这套系统在美国更改密码出口管理条例(2000年)前,在美国境外就可以使用。瑞典的实现工具基于一个叫做eBones的版本,而eBones基于麻省理工对外发行的基于Kerberos版本4的补丁9的Bones(跳过了加密公式和对它们的函数调用)。这些在一定程度上决定了Kerberos为什么没有被叫做eBones版。Kerbberos版本5的实现工具,Heimdal,基本上也是由发布KTH-KRB的同一组人发布。

  • Windows2000和后续的操作系统都默认Kerberos为其默认认证方法。RFC 3244记录整理了微软的一些对Kerberos协议软件包的添加。RFC4757"微软Windows2000Kerberos修改密码并设定密码协议"记录整理了微软用RC4密码的使用。虽然微软使用了Kerberos协议,却并没有用麻省理工的软件。
  • 苹果的Mac OS X也使用了Kerberos的客户和服务器版本。
  • Red Hat Enterprise Linux4和后续的操作系统使用了Kerberos的客户和服务器版本。

IETF Kerberos的工作小组在2005年更新了说明规范,最近的更新包括:

  • "加密和校验和细则"(RFC 3961
  • "针对Kerberos版本5的高级加密算法(AES)加密"(RFC 3962
  • Kerberos版本5说明规范的新版本"Kerberos网络认证服务(版本5)"(RFC 4120)。这个版本废弃了早先的RFC 1510,用更细化和明确的解释说明了协议的一些细节和使用方法。
  • GSS-API的一个新版本"Kerberos版本5普通的安全服务应用软件交互机制:版本2"(RFC 4121

基本描述[编辑]

Kerberos使用Needha-Schroeder协议作为它的基础。它使用了一个由两个独立的逻辑部分:认证服务器和票据授权服务器组成的"可信赖的第三方",术语称为密钥分发中心(KDC)。Kerberos工作在用于证明用户身份的"票据"的基础上。

KDC持有一个密钥数据库;每个网络实体——无论是客户还是服务器——共享了一套只有他自己和KDC知道的密钥。密钥的内容用于证明实体的身份。对于两个实体间的通信,KDC产生一个会话密钥,用来加密他们之间的交互信息。

协议内容[编辑]

协议的安全主要依赖于参加者对时间的松散同步和短周期的叫做Kerberos票据的认证声明。 下面是对这个协议的一个简化描述,将使用以下缩写:

  • AS(Authentication Server)= 认证服务器
    • TGT(Ticket Granting Ticket)= 票据授权票据,票据的票据
  • TGS(Ticket Granting Server)= 票据授权服务器
  • SS(Service Server)= 服务器

其在網路通訊協定中屬於顯示層。

简单地说,用户先用共享密钥从某认证服务器得到一个身份证明。随后,用户使用这个身份证明与SS通信,而不使用共享密钥。

具体流程[1][编辑]

(注意:此流程使用了对称加密;此流程发生在某一个Kerberos领域中;小写字母c,d,e是客户机发出的消息,大写字母A,B,E,F,G,H是各个服务器发回的消息。)

首先,用户使用客户机(用户自己的机器)上的程序登录:

  1. 用户输入用户ID和密码到客户机。
  2. 客户机程序运行一个单向函数(大多数为杂凑)把密码转换成密钥,这个就是客户机(用户)的"用户密钥"(K_client)。受信任的AS通过某些安全的途径也获取了与此密钥相同的密钥。

随后,客户机认证(客户机从AS获取票据的票据(TGT)):

  1. 客户机向AS发送1条消息(注意:用户不向AS发送密钥(K_client),也不发送密码):
    • 包含用户ID的明文消息,例如"用户Sunny想请求服务"(Sunny是用户ID)
  2. AS检查用户ID有效性,而后返回2条消息:
    • 消息A:用户密钥(K_client)加密后的"客户机-TGS会话密钥"(K_TGS-session)(会话密钥用在将来客户机与TGS的通信(会话)上)
    • 消息B:TGS密钥(K_TGS)加密后的"票据授权票据"(TGT)(TGT包括:客户机-TGS会话密钥(K_TGS-session),用户ID,用户网址,TGT有效期)
  3. 客户机用自己的密钥(K_client)解密A,得到客户机-TGS会话密钥(K_TGS-session)。(注意:客户机不能解密消息B,因为B是用TGS密钥(K_TGS)加密的)。

然后,服务授权(客户机从TGS获取票据(T)):

  1. 客户机向TGS发送以下2条消息:
    • 消息c:即消息B(K_TGS加密后的TGT),和想获取的服务的服务ID(注意:不是用户ID)
    • 消息d:客户机-TGS会话密钥(K_TGS-session)加密后的"认证符"(认证符包括:用户ID,时间戳)
  2. TGS用自己的密钥(K_TGS)解密c中的B得到TGT,从而得到AS提供的客户机-TGS会话密钥(K_TGS-session)。再用这个会话密钥解密d得到用户ID(认证),而后返回2条消息:
    • 消息E:服务器密钥(K_SS)加密后的"客户机-服务器票据"(T)(T包括:客户机-SS会话密钥(K_SS-session),用户ID,用户网址,T有效期)
    • 消息F:客户机-TGS会话密钥(K_TGS-session)加密后的"客户机-SS会话密钥"(K_SS_session)
  3. 客户机用客户机-TGS会话密钥(K_TGS-session)解密F,得到客户机-SS会话密钥(K_SS_session)。(注意:客户机不能解密消息E,因为E是用SS密钥(K_SS)加密的)。

最后,服务请求(客户机从SS获取服务):

  1. 客户机向SS发出2条消息:
    • 消息e:即消息E
    • 消息g:客户机-服务器会话密钥(K_SS_session)加密后的"新认证符"(新认证符包括:用户ID,时间戳)
  2. SS用自己的密钥(K_SS)解密e/E得到T,从而得到TGS提供的客户机-服务器会话密钥(K_SS_session)。再用这个会话密钥解密g得到用户ID(认证),而后返回1条消息(确认函:确证身份真实,乐于提供服务):
    • 消息H:客户机-服务器会话密钥(K_SS_session)加密后的"新时间戳"(新时间戳是:客户机发送的时间戳加1)
  3. 客户机用客户机-服务器会话密钥(K_SS_session)解密H,得到新时间戳。
  4. 客户机检查时间戳被正确地更新,则客户机可以信赖服务器,并向服务器(SS)发送服务请求。
  5. 服务器(SS)提供服务。

缺陷[编辑]

  • 失败于单点:它需要中心服务器的持续响应。当Kerberos服务结束前,没有人可以连接到服务器。这个缺陷可以通过使用复合Kerberos服务器和缺陷认证机制弥补。
  • Kerberos要求参与通信的主机的时钟同步。票据具有一定有效期,因此,如果主机的时钟与Kerberos服务器的时钟不同步,认证会失败。默认设置要求时钟的时间相差不超过10分钟。在实践中,通常用网络时间协议后台程序来保持主机时钟同步。
  • 管理协议并没有标准化,在服务器实现工具中有一些差别。RFC 3244描述了密码更改。
  • 因为所有用户使用的密钥都存储于中心服务器中,危及服务器的安全的行为将危及所有用户的密钥。
  • 一个危险客户机将危及用户密码。

参考资料[编辑]

  1. ^ William Stallings, Network Security Essentials: Application and Standards(Fourth Edition), Pearson Education, Inc. (Chapter 4 pp. 99-114)