下载安卓APP箭头
箭头给我发消息

客服QQ:3315713922

图解身份认证协议——Kerberos

作者:课课家教育     来源: http://www.kokojia.com点击数:1256发布时间: 2018-01-10 09:00:09

标签: 通信安全服务器

软考,您想通过吗?一次通过才是硬道理

  Kerberos是MIT开发的一种身份鉴别服务。“Kerberos”的本意是希腊神话中守护地狱之门的守护者。
  Kerberos提供了一个集中式的认证服务器结构,认证服务器的功能是实现用户与其访问的服务器间的相互鉴别。其实现采用的是对称密钥加密技术。
  Kerberos协议的重要组成部分也是三个:client,server,KDC(密钥分发中心),下面了解Kerberos协议的工作过程吧。
  1. 简单的相互身份验证
  A向B发送信息时,会附加一个Authenticator(认证码,该数据结构=身份信息+时间戳)来进行彼此的身份验证。开始验证之前,A和B已经有一个有且只有二人知晓的密钥。下面是工作流程:
  a. A用密钥加密了【信息+Authenticator(身份信息+时间戳)】,将其发给B
  b. B用密钥解密了A发来的Authenticator,并将其中包含的时间戳记录下来。B将这个时间戳与自己的当前时间进行比较,如果这个时间差大于某个值(Windows下默认是5分钟),B认为信息不是A发来的,拒绝后续验证。如果这个时间差小于设定值,B要检查在过去5分钟内,是否存在含有更早时间戳的Authenticator,如果没有,B认为信息确实是A发来了。至此,完成了B对A的验证。
  c. B用密钥加密Athenticator里的时间戳,然后将其发回给A,以证明自己确实是B.
  d. A收到后,解密出时间戳,经过自己的对比,确认了对方确实是B. 至此,完成了A对B的验证
  图解身份认证协议——Kerberos_通信_安全_服务器_课课家教育
  2. 引入session key和密钥分发中心KDC
  实现简单相互身份验证有一个前提,即,A和B必须有一个有且只有二人知晓的密钥。在2中,我们要设计一个密钥分发机制来完善1的流程。这里引入key distribution center, KDC密钥分发中心。当A尝试向B发信息时,KDC会分别向A、B发放一个加密过的session key,这相当于1中那个有且只有AB双方知晓的密钥(注意,在传输过程中,session key要再包裹一层密钥进行加密,下面将具体说到)。
  3. 引入secret key(密钥的加密)
  session key在传输过程中需要加密。因此我们又引入了一个加密密钥,叫做secret key(或者叫long term key,在用户账号验证中,这个key是衍生自账号密码). 这个key是KDC和A(或B)之间有且只有双方知晓的一个密钥。KDC与A之间进行传输时,是由仅有A与KDC双方知晓的key加密。KDC与B之间进行传输时,是由仅有B与KDC双方知晓的key加密。
  4. 引入session ticket(密钥的识别)
  实际应用中,一个KDC对应着许许多多的客户端和服务端,每个客户端与服务端之间都有一个共享的session key(密钥)。为了区别这些session key,我们引入session ticket的概念,它是一种内嵌了session key和客户端身份信息(原文authorization data for the client)的数据结构。相当于session key与客户端的1对1表。
  下面是具体工作过程:
  a. 客户端向KDC提交客户端身份信息(这个传输过程使用客户端secretkey进行加密),要求与服务端进行相互身份验证。
  b. KDC生成一个仅有客户端与服务端知晓的session key。
  c. KDC将session key附加上客户端身份信息形成了session ticket,并用服务端secret key加密session ticke后传给服务端。服务端收到了KDC回复,使用服务端secret key解密,获得了有且只有客户端和服务端二者知晓的密钥session key。
  d. KDC将【session key+服务端secret key加密后的session ticket】用客户端secret key加密后,传给客户端。客户端收到了KDC的回复,用客户端secret key解密出【session key+服务端secret key加密后的session ticket】。解密出的两部分内容分开地放在一个安全的缓存中(一块隔离的内存空间,而不是硬盘上)。当客户端再次向服务端发送信息时,客户端就可以直接向服务端发送【要发送的信息+服务端secret key加密后的session ticket+用session key加密的Authenticator(身份信息+时间戳)】
  e. 服务端收到了来自客户端的以上凭据,先用服务端secret key将session ticket解密,取得内嵌在session ticket里的session key,用其将Authenticator解密,得到了客户端发送消息的时间戳。之后按照1中简单相互身份验证过程中的步骤b, c, d继续进行。
  Kerberos的工作方式
  Kerberos是基于“共享秘密”的思想而建立的。换句话说,如果只有两个人知道某个秘密,则其中一人就可以通过确认另一个人是否知道这个秘密来鉴别另一个人的身份。在Kerberos中,共享秘密存在于Kerberos和安全主体(security principal,真人用户或设备)之间。
  依此类推,有两个人定期给对方发电子邮件,需要确保每个电子邮件都不被对方否认,或者要确保没有其他人冒充成发送方。为了确定发送方或接收方就是他们自己所说的那个人,于是商议将往来信息中的某些内容作为确定对方就是“那个人”的凭证。但是,如果有人分析了这些电子邮件并发现其字词的排列顺序,不会花费很长时间就能发现隐藏在其中的确认信息。在网络验证机制中,这是一个很大的问题。因为不会花很长时间就可以截取信息,然后欺骗验证服务程序。
  通信双方应该如何设计方案来确定它们的身份呢?答案是对称密钥加密技术。共享密钥必须秘密保存,否则任何人都可以给信息解密。正如前文所述,对称密钥是能够同时加密和解密的单密钥。也就是说,只要通信双方共享同一个密钥,他们就可以给信息加密,而且确保对方能够进行解密。
  注意:保密密钥(secret key)和对称密钥(symmetric key)这两个术语在讨论使用单密钥给文档加密和解密中可以互换。但是,保密密钥完全可能落到错误的人手中。
  密钥加密技术不是什么新技术。它的产生可以追溯到冷战之前,那时就有了比较完善的密钥技术和密码科学。但是在实施Kerberos中,只要信息被解密,或只要双方中的一方首先能够通过拥有解密密钥证明他们是真实的,那么验证就已经完成了。但是如果网络上有人窃取了这个密钥,或者设法复制了以前的验证对话又怎么办呢?Kerberos将会利用那个不可改变的要素--时间,来解决这个问题。
  Kerberos缺陷
  1.失败于单点:它需要中心服务器的持续响应。当Kerberos服务结束前,没有人可以连接到服务器。这个缺陷可以通使用复合Kerberos服务器和缺陷认证机制弥补。
  2.kerberos要求参与通信的主机的时钟同步。票据具有一定有效期,因此,如果主机的时钟与Kerberos服务器的时钟不同步,认证会失败。默认设置要求时钟时间相差不超过10分钟。在实践中,通常用网络时间协议后台程序来保持主机时钟同步。
  3.管理协议并没有标准化,在服务器实现工具中有一定差别。
  4.因为所以用户使用的密钥都存储于中心服务器中,危及服务器的安全行为将危及所有用户的密钥。
  5.一个危险客户机将危及用户密码。
  以上的内容只是简单讲述kerberos,如有错误,还不吝赐教。喜欢我们的分享,欢迎关注课课家教育!

赞(13)
踩(0)
分享到:
推荐查看
华为认证网络工程师 HCIE直播课视频教程