一篇文章带你弄懂Kerberos的设计思路

这篇文章将会带大家详细梳理和理解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:
- 引入票据许可服务器(TGS,类似售票处),AS只认证,认证之后发放票据许可票据(类似允许你买票的身份证明)\(Ticket_{tgs}\),用来访问V的服务许可票据\(TicketV\)由TGS来发。这样ID和password就只在认证时使用1次
- 一类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的设计思路的更多相关文章
- 五分钟学Java:一篇文章带你搞懂spring全家桶套餐
原创声明 本文首发于微信公众号[程序员黄小斜] 本文作者:黄小斜 转载请务必在文章开头注明出处和作者. 本文思维导图 什么是Spring,为什么你要学习spring? 你第一次接触spring框架是在 ...
- 一篇文章带你搞懂DEX文件的结构
*本篇文章已授权微信公众号 guolin_blog (郭霖)独家发布 DEX文件就是Android Dalvik虚拟机运行的程序,关于DEX文件的结构的重要性我就不多说了.下面,开练! 建议:不要只看 ...
- 一篇文章带你搞懂InnoDB的索引|结合样例
关注公众号[程序员白泽],带你走进一个不一样的程序员/学生党 前言 前阵子面试的时候,在第三面问到了MySQL索引相关的知识点,并且给出了一些SQL语句分析索引的执行情况.所以今天这篇文章给大家讲讲索 ...
- 一篇文章带你看懂AWS re:Invent 2018大会,揭秘Amazon Aurora
本文由云+社区发表 | 本文作者: 刘峰,腾讯云NewSQL数据库产品负责人.曾职于联想研究院,Teradata北京研发中心,从事数据库相关工作8年.2017年加入腾讯数据库产品中心,担任NewSQL ...
- 一篇文章带你看懂Cloudflare信息泄露事件
版权声明:本文由贺嘉 原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/753847001488039974 来源:腾云阁 ...
- 一篇文章带你搞懂 SpringBoot与Swagger整合
Swagger使用由于不喜欢csdn的markwoen编辑器,对代码样式支持不好,看着不舒服,对审美要求比较高的同学移步github:https://github.com/itguang/swagge ...
- 一篇文章带您读懂List集合(源码分析)
今天要分享的Java集合是List,主要是针对它的常见实现类ArrayList进行讲解 内容目录 什么是List核心方法源码剖析1.文档注释2.构造方法3.add()3.remove()如何提升Arr ...
- 一篇文章带您读懂Map集合(源码分析)
今天要分享的Java集合是Map,主要是针对它的常见实现类HashMap进行讲解(jdk1.8) 什么是Map核心方法源码剖析1.文档注释2.成员变量3.构造方法4.put()5.get() 什么是M ...
- 一篇文章带你搞懂 etcd 3.5 的核心特性
作者 唐聪,腾讯云资深工程师,极客时间专栏<etcd实战课>作者,etcd活跃贡献者,主要负责腾讯云大规模k8s/etcd平台.有状态服务容器化.在离线混部等产品研发设计工作. etcd ...
- 一篇文章让你读懂Pivotal的GemFire家族产品
一篇文章让你读懂Pivotal的GemFire家族产品 学习了:https://www.sohu.com/a/217157517_747818
随机推荐
- 视觉享受,兼顾人文观感和几何特征的字体「GitHub 热点速览 v.22.46」
GitHub 上开源的字体不在少数,但是支持汉字以及其他非英文语言的字体少之又少,记得上一个字体还是 霞鹜文楷,本周 B 站知名设计 UP 主开源了的得意黑体在人文观感和几何特征之间找到了美的平衡. ...
- Devexpress 图表显示数据标签
dev的图标功能非常强大其中有一些设置可以更好的展现出数据 设置Series的标签 series.LabelsVisibility = DevExpress.Utils.DefaultBoolean. ...
- 命令查询职责分离 - CQRS
概念 CQRS是一种与领域驱动设计和事件溯源相关的架构模式, 它的全称是Command Query Responsibility Segregation, 又叫命令查询职责分离, Greg Young ...
- 【文档资料】Linux、Vi/Vim常用命令、文件夹和文件介绍
一.Linux 1.系统信息[左1] 查看磁盘空间使用情况:df+参数 查看当前指定文件或目录的大小:du 查看不同硬件信息:cat/proc/xxx 查看系统和空闲内存:free +参数 SSH退出 ...
- OpenJudge 1.8.11 图像旋转
11:图像旋转 总时间限制: 1000ms 内存限制: 65536kB 描述 输入一个n行m列的黑白图像,将它顺时针旋转90度后输出. 输入 第一行包含两个整数n和m,表示图像包含像素点的行数和列数. ...
- MongoDB从入门到实战之MongoDB简介
前言 相信很多同学对MongoDB这个非关系型数据库都应该挺熟悉的,在一些高性能.动态扩缩容.高可用.海量数据存储.数据价值较低.高扩展的业务场景下MongoDB可能是我们的首选,因为MongoDB通 ...
- 记一次 .NET 某安全生产信息系统 CPU爆高分析
一:背景 1.讲故事 今天是的第四天,头终于不巨疼了,写文章已经没什么问题,赶紧爬起来写. 这个月初有位朋友找到我,说他的程序出现了CPU爆高,让我帮忙看下怎么回事,简单分析了下有两点比较有意思. 这 ...
- Jmeter 模拟http发送zip文件
发送zip文件的接口配置如下: 1. 在不知参数情况下使用fidder进行抓包操作,查看参数与MiME类型 2. 新建http取样器,并设置接口地址,进入文件上传设置参数与MIME类型 appli ...
- 【Redis技术探索】「数据迁移实战」手把手教你如何实现在线+离线模式进行迁移Redis数据实战指南(在线同步数据)
从实战出发使用RedisShake进行Redis数据在线+离线模式迁移指南 RedisShake基本介绍 RedisShake是基于redis-port基础上进行改进的是一款开源的Redis迁移工具, ...
- 如何在Github上创建一个新仓库
Hi,欢迎大家在有空的时候做客[江涛学编程],这里是2023年的第6篇原创文章,新年新气象,在这里我祝读者朋友们都好好的, 老规矩,拍拍手,上菜. 今天没有啥东西要跟家人们分享,就两个字,看图!!! ...