草庐IT

一文搞懂Kerberos

机器学习Zero 2023-04-20 原文

Kerberos

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组成。
  • 服务器解密并检查票据和鉴别码,以及客户地址和时间标记。需要相互鉴别的应用中,服务器给客户返回一个包含时间标记的消息,该消息由会话密钥加密。这证明服务器知道客户的秘密密钥而且能解密票据和鉴别码。
  • 客户和服务器可以用共享的密钥加密信息。

有关一文搞懂Kerberos的更多相关文章

  1. 一文解决关于VLAN所有的疑惑 - 2

    一文解决关于VLAN所有的疑惑VLAN基本概念为什么需要VLAN?怎么在交换机上划分VLAN,VLAN的工作原理有了子网,已经隔离了广播,还需要VLAN干啥?只进行子网划分,不进行VLAN划分VLAN划分与子网划分附加VLAN信息的方法VLAN划分交换机的端口类型(Access和Trunk)一、访问链接二、汇聚链接汇聚链接VLAN间通信为什么要进行VLAN间通信?路由器实现VLAN间通信路由器和交换机的连接方式通信细节三层交换机实现VLAN间通信加速VLAN间通信三层交换机与路由器三层交换机路由器路由器和交换机配合构建LAN的实例使用VLAN设计局域网的特点VLAN增加网络的灵活性不使用VLA

  2. 一文让你彻底掌握操作符(超详细教程) - 2

    ✅作者简介:大家好,我是小杨📃个人主页:「小杨」的csdn博客🔥系列专栏:小杨带你玩转C语言【初阶】🐳希望大家多多支持🥰一起进步呀!大家好呀!我是小杨。小杨花几天的时间将C语言中的操作符这部分知识做了一个大总结,在方便自己复习的同时也能够帮助到大家。通篇字数在一万字左右,可以算作是非常详细了,一文就可以带领大家彻底掌握操作符这部分内容,文章很长建议先收藏再看,防止下次想看就找不到啦。文章目录✍1,算术操作符✍2,移位操作符    🔍2.1,左移操作符    🔍2.2,右移操作符       ✨2.2.1,算术移位       ✨2.2.2,逻辑移位✍3,位操作符    🔍3.1,按位与&   

  3. 一文掌握软件项目成本预算、估算的方法和成本控制的秘籍 - 2

    每个企业都希望在完成项目后获得盈利,但不少企业到了年终后才发现项目做了不少,公司却并没能达到预期,甚至还出现了亏损。那么钱究竟去了哪里?很多公司都搞不清楚原因,出现糊涂账较多的状况,这将会造成严重的后果,尤其在疫情影响下,大环境很恶劣,如果是大公司的事业部门出现亏损,就可能会导致事业部门解散;如果是小公司出现亏损,就很容易导致公司倒闭;怎样做才能确保我们所完成的项目都能获利?从财务角度看,要确保盈利必须做到合理估算成本,只有这样才能在对外签订合约时做出合理报价,在对内在开始项目前做出充分评估投入代价,同时在实施过程中还要控制成本得当,最后项目结束时才会有可能获得盈利。那么我们怎样才能准确的判断

  4. 一文详解COINDAO是什么? - 2

    COINDAO旨在重建社区信任和安全。基于皖北基因的强烈共识,COINDAO自发产生了一个共创、共建、共治、共享的协作组织。它专注于DAO投资管理协议,为新的优质项目创造增长技术和资金。COINDAO的使命就是为真正的优质项目打造一个去中心化、公开透明的平台,让各个赛道上的优质项目能够以更低的成本快速募集资金并向公众开放.打破头部垄断。让真正的爱好者直接获得早期参与优质项目的资格,不再遥不可及,构建生态应用的可信体系,打造人人参与共建、人人共享的去中心化DAO好处。生态系统,我们称之为COINDAO生态系统。COINDAO国内各大财经网站宣发如下:COINDAO国外各大财经网站宣发: COIN

  5. 一文吃透前端低代码的 “神仙生活” - 2

    今天来说说前端低代码有多幸福?低代码是啥?顾名思义少写代码……这种情况下带来的幸福有:代码写得少,bug也就越少(所谓“少做少错”),因此开发环节的两大支柱性工作“赶需求”和“修bug”就都少了;要测的代码少了,那么测试用例也可以少写了。所以,总结低代码带来的幸福感有这三大点:开发效率提高开发成本减少维护性更高针对上述三点,我们展开说说。01、开发效率提高对于低代码的理解,个人认为可以通过配置化的低成本交互方式(主流是拖拽)加上少量的胶水代码,去满足一类应用的需求。这就说明,基于低代码,开发人员无需代码或说只需少量代码就可以开发出各类应用管理系统,如:OA协同办公、KM知识管理、CRM客户关系

  6. 【C语言进阶】还说不会?一文带你全面掌握计算机预处理操作 - 2

    目录🍊前言🍊:🍈一、宏与函数🍈:        1.宏与函数对比:    2.宏与函数的命名约定:🍓二、预处理操作符🍓:    1.预处理操作符"#":    2.预处理操作符"##":🥝三、条件编译🥝:    1.简述条件编译指令:    2.常见条件编译指令:🍒总结🍒:🛰️博客主页:✈️銮同学的干货分享基地🛰️欢迎关注:👍点赞🙌收藏✍️留言🛰️系列专栏:💐【进阶】C语言学习            🧧  C语言学习🛰️代码仓库:🎉VS2022_C语言仓库    家人们更新不易,你们的👍点赞👍和⭐关注⭐真的对我真重要,各位路过的友友麻烦多多点赞关注,欢迎你们的私信提问,感谢你们的转发!    

  7. 一文带你通俗理解23种软件设计模式(推荐收藏,适合小白学习,附带C++例程完整源码) - 2

    作者:翟天保Steven版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处一、设计模式是什么?    设计模式是为了解决在软件开发过程中遇到的某些问题而形成的思想。同一场景有多种设计模式可以应用,不同的模式有各自的优缺点,开发者可以基于自身需求选择合适的设计模式,去解决相应的工程难题。    良好的软件设计和架构,可以让代码具备良好的可读性、可维护性、可扩展性、可复用性,让整个系统具备较强的鲁棒性和性能,减少屎山代码出现的概率。    想要熟练运用设计模式,提高自己的编程能力和架构能力,只有在自己工作中,结合自身工作内容,多思考多实践。本文只能通过举一些通俗的例子,来

  8. 一文读懂Elephant Swap,为何为ePLATO带来如此高的溢价? - 2

    自今年4月以来,在经历了UST脱锚,所引发的头部投资机构、独角兽CeFi平台的相继“破产”,加密行业迎来了前所未有的发展危机,一方面在于市场信心不足甚至恐慌,导致的资金加速出逃,另一方面市场整体增速缓慢导致各个板块收益疲软,导致投资者们难以获得可观的收益回报,市场进一步陷入新一轮的恶性循环。当然,即便是市场整体处于下行周期,但加密市场仍旧存在诸多的获利机会,新型LaaS协议ElephantSwap正在通过其独特的LaaS方案,来为DeFi市场恢复流动性注入信心,同时为投资者带来十分可观的套利空间。目前,PlatoFarm是首个使用ElephantSwap流动性服务的项目,投资可以通过将手中的P

  9. Android: 彻底搞懂Lifecycle——使用篇 - 2

    系列文章目录第一章Android:彻底搞懂Lifecycle——使用篇第二章Android:彻底搞懂Lifcycle——原理篇文章目录系列文章目录前言一、Lifecycle是什么?1.应用场景2.示例二、Lifecycle使用1.泳(用)裤(库)第一步是什么?——先引入2.Lifecycle类3.LifecycleOwner接口3.1.自定义类实现LifecycleOwner接口总结前言你真的了解lifecycle吗?本文的目标就是要“打破砂锅问到底”,带你真真切切了解它。一、Lifecycle是什么?lifecycle是属于AndroidJetpack(官方开发工具包)——Architect

  10. Flyway详解(使用说明及避坑指南、一文搞懂flyway) - 2

    一、简介1.1Flyway是什么?Flyway是一款开源的数据库版本管理工具,可以实现管理并跟踪数据库变更,支持数据库版本自动升级,而且不需要复杂的配置,能够帮助团队更加方便、合理的管理数据库变更。例:创建两个sql变更文件,项目启动后会将两个文件中的sql语句全部执行。1.2为什么使用Flyway?简单举个例子:开发时,如果A开发和B开发都对同一数据库进行了修改,那么如何进行数据同步呢?假如多个开发人员都修改了sql脚本,怎么同步到测试环境和生产环境?类似于以上的情况在日常开发中不胜枚举,在最开始的单体架构中,我们公司采用了通过校验数据库版本号来实现sql的变更,这虽然能够解决大部分问题,但

随机推荐