这篇文章将会带大家详细梳理和理解Kerberos的设计思路。

Basic

为了减轻服务器的负担,我们需要设计一个专门的认证服务器AS,储存所有用户的口令,认证了用户身份之后再通知应用服务器

引入ticket:客户把自己的ID(IDc),要访问的服务器的ID (IDv) 和自己的口令 (Pc) 发给AS,AS查验用户和口令是否合法,是否有权访问V,都符合就给客户发一张ticket,客户凭借ticket和IDc去访问V

$ticket=E_{Kv}[IDc, ADc(用户网络地址), IDv] $,ticket中包含的信息,谁的票,访问哪儿的票,这些信息用V与AS之间的共享密钥Kv加密,加密的同时也认证了AS(避免敌手假扮AS)

上述机制中还存在4个问题

Q1:访问多个服务器需要多次申请票据,多次输入口令会造成不安全

solution:

  1. 引入票据许可服务器(TGS,类似售票处),AS只认证,认证之后发放票据许可票据(类似允许你买票的身份证明)\(Ticket_{tgs}\),用来访问V的服务许可票据\(TicketV\)由TGS来发。这样ID和password就只在认证时使用1次
  2. 一类V之间可以共享Kv和票据

Q2:口令明文传送(C->AS)

solution: AS与C之间共享用户口令Pc->Kc,AS与TGS之间共享Ktgs,TGS和V之间共享Kv,不用再发送口令

Q3:票据重用

solution:引入时间戳(TS,消息发送时间)和有效期(LT)

PS:时间戳和序列号可以保证消息的新鲜性,但很容易被预测,可以使用挑战-响应协议,用随机数来防止重用,但复杂度比较高

Q4:票据冒领

solution:给谁的信息就用谁的密钥来加密,防止被冒领

但是TGS没有Kc,C也没有Kv,于是就由AS来帮TGS和C之间生成\(K_{c,tgs}\),TGS帮C和V生成\(K_{c,v}\),同时,这两个密钥也要放到票据中,用来身份认证,防止敌手等到用户退出之后使用窃听到的票据备份进行重用

AS为TGS和C生成了\(K_{c,tgs}\)后,就连同\(Ticket_{tgs}\)一起发给C,TGS收到\(Ticket_{tgs}\)后,解密得到里面的\(K_{c,tgs}\),然后回复C的消息就用\(K_{c,tgs}\)加密。

现在我们解决了以上四个问题,来梳理一下,现在的票据长啥样?

票据包含双方的ID,为双方生成的共享密钥,TS,TL,给谁的票据就用谁的密钥加密

\(Ticket_{tgs}=E_{Ktgs}\{Kc,tgs, IDc, ADc, IDtgs, TS_2, LT_2\}\)

更近一步的优化:C和V之间也要改成双向认证,C也要确认V的身份,TGS、V回复C的时候最外层就用会话密钥加密(信任第三方)

V回复C{\(TS_5\)+1} ,用\(TS_5\)(用户发送消息的时戳)可以保证每次都不一样,类似TCP的序列号,+1可以记录交互了多少次

最后我们就得到了Kerberos的整个流程:

一篇文章带你弄懂Kerberos的设计思路的更多相关文章

  1. 五分钟学Java:一篇文章带你搞懂spring全家桶套餐

    原创声明 本文首发于微信公众号[程序员黄小斜] 本文作者:黄小斜 转载请务必在文章开头注明出处和作者. 本文思维导图 什么是Spring,为什么你要学习spring? 你第一次接触spring框架是在 ...

  2. 一篇文章带你搞懂DEX文件的结构

    *本篇文章已授权微信公众号 guolin_blog (郭霖)独家发布 DEX文件就是Android Dalvik虚拟机运行的程序,关于DEX文件的结构的重要性我就不多说了.下面,开练! 建议:不要只看 ...

  3. 一篇文章带你搞懂InnoDB的索引|结合样例

    关注公众号[程序员白泽],带你走进一个不一样的程序员/学生党 前言 前阵子面试的时候,在第三面问到了MySQL索引相关的知识点,并且给出了一些SQL语句分析索引的执行情况.所以今天这篇文章给大家讲讲索 ...

  4. 一篇文章带你看懂AWS re:Invent 2018大会,揭秘Amazon Aurora

    本文由云+社区发表 | 本文作者: 刘峰,腾讯云NewSQL数据库产品负责人.曾职于联想研究院,Teradata北京研发中心,从事数据库相关工作8年.2017年加入腾讯数据库产品中心,担任NewSQL ...

  5. 一篇文章带你看懂Cloudflare信息泄露事件

    版权声明:本文由贺嘉  原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/753847001488039974 来源:腾云阁  ...

  6. 一篇文章带你搞懂 SpringBoot与Swagger整合

    Swagger使用由于不喜欢csdn的markwoen编辑器,对代码样式支持不好,看着不舒服,对审美要求比较高的同学移步github:https://github.com/itguang/swagge ...

  7. 一篇文章带您读懂List集合(源码分析)

    今天要分享的Java集合是List,主要是针对它的常见实现类ArrayList进行讲解 内容目录 什么是List核心方法源码剖析1.文档注释2.构造方法3.add()3.remove()如何提升Arr ...

  8. 一篇文章带您读懂Map集合(源码分析)

    今天要分享的Java集合是Map,主要是针对它的常见实现类HashMap进行讲解(jdk1.8) 什么是Map核心方法源码剖析1.文档注释2.成员变量3.构造方法4.put()5.get() 什么是M ...

  9. 一篇文章带你搞懂 etcd 3.5 的核心特性

    作者 唐聪,腾讯云资深工程师,极客时间专栏<etcd实战课>作者,etcd活跃贡献者,主要负责腾讯云大规模k8s/etcd平台.有状态服务容器化.在离线混部等产品研发设计工作. etcd ...

  10. 一篇文章让你读懂Pivotal的GemFire家族产品

    一篇文章让你读懂Pivotal的GemFire家族产品 学习了:https://www.sohu.com/a/217157517_747818

随机推荐

  1. 在链表上实现 Partition 以及荷兰国旗问题

    在链表上实现 Partition 以及荷兰国旗问题 作者:Grey 原文地址: 博客园:在链表上实现 Partition 以及荷兰国旗问题 CSDN:在链表上实现 Partition 以及荷兰国旗问题 ...

  2. win7使用onedrive右键托盘图标中文不显示问题

    前言 win7 用的 onedrive不能在微软官网下载,用不了,所以需要下载 win7可以使用的版本. onedrive_for_win7.exe 解决问题 重启电脑解决 其他 我看贴吧说是文本放大 ...

  3. ArcObjects SDK开发 002 写第一个ArcObjects SDK程序

    1.开发环境 基于ArcObjects SDK开发,开发环境一般选用Visual Studio,开发语言使用C#,开发包使用ArcObjects SDK for .Net.UI有的使用Winform, ...

  4. 【JVM】经典垃圾回收器

    本文已收录至Github,推荐阅读 Java随想录 微信公众号:Java随想录 CSDN: 码农BookSea 转载请在文首注明出处,如发现恶意抄袭/搬运,会动用法律武器维护自己的权益.让我们一起维护 ...

  5. java后端整合极光消息推送

    目录 1.简介 2.极光Demo 2.1.进入极光官网--应用管理 2.2.快速集成一个Android/iOS的SDK​ 2.3.java服务端代码 3.参考资料 1.简介 简单来说,就是androi ...

  6. day12-功能实现11

    家居网购项目实现011 以下皆为部分代码,详见 https://github.com/liyuelian/furniture_mall.git 27.功能25-事务管理 27.1下订单问题思考 在生成 ...

  7. 使用 Bitnami Helm 安装 Kafka

    服务器端 K3S 上部署 Kafka Server Kafka 安装 ️ Quote: charts/bitnami/kafka at master · bitnami/charts (github. ...

  8. [Python]Python调用Matlab (Pycharm版本)

    目录 第一步:生成Build文件夹 第二步: 复制build文件夹到Pycharm下 第三步:调用代码 第一步:生成Build文件夹 C:\Program Files\MATLAB\R2016a\ex ...

  9. 期望与概率 dp

    期望与概率 dp \(\text{By DaiRuiChen007}\) I. [洛谷4316] - 绿豆蛙的归宿 \(\text{Link}\) 思路分析 DAG 上做期望 dp,可以爆搜,也可以拓 ...

  10. 标准&有效的项目开发流程

    代码版本管理 在项目中,代码的版本管理非常重要.每个需求版本的代码开发在版本控制里都应该经过以下几个步骤. 在master分支中拉取该需求版本的两个分支,一个feature分支,一个release分支 ...