这篇文章将会带大家详细梳理和理解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. DL账号密码生命周期信息流图

  2. minio API demo

    package mainimport ( "context" "fmt" "github.com/minio/minio-go/v7" &q ...

  3. docker中php xdebug调试开发

    docker-compose环境来自:https://github.com/zhaojunlik...原文:http://blog.oeynet.com/post/9... 说明 在开发中,断点调试是 ...

  4. 【DL论文精读笔记】AlexNet

    1.1引言 1.2数据集 就是ImageNet,当时计算机视觉最大的数据集 1.3结构 采用双GPU结构实现,并行处理图像,2-3,5-全连接部分中间还将特征图共享 最后全连接层输出的4096的语义信 ...

  5. 第2-3-8章 分片上传和分片合并的接口开发-文件存储服务系统-nginx/fastDFS/minio/阿里云oss/七牛云oss

    目录 5.10 接口开发-分片上传 5.10.1 分片上传介绍 5.10.2 前端分片上传插件webuploader 5.10.3 后端代码实现 5.10.3.1 接口文档 5.10.3.2 代码开发 ...

  6. Mybatis下的SQL注入漏洞原理及防护方法

    目录 一.前言 二.SQL 注入漏洞原理 1.概述 2.漏洞复现 3.修复建议 三.Mybatis 框架简介 1.参数符号的两种方式 2.漏洞复现 四.Mybatis 框架下的 SQL 注入问题及防护 ...

  7. 进军东南亚市场,腾讯云数据库 TDSQL 助力印尼 BNC 银行数字化转型

    腾讯云数据库在助力金融核心系统分布式替换上,已经辐射到了东南亚市场. 东南亚最大的银行之一印尼BNC银行(Bank Neo Commerce)已正式完成新核心分布式迁移,使用腾讯云数据库TDSQL后, ...

  8. python关于error: invalid command 'bdist_wheel报错的解决

    看了很多解决办法,大部分在扯去下载一个 .whl 源文件然后在pip 安装,经过我亲自测试执行完这句即可解决! pip3 install wheel

  9. 【翻译】rocksdb调试指引

    rocksdb调试指引 翻译自官方wiki:https://github.com/facebook/rocksdb/wiki/RocksDB-Tuning-Guide 转载请注明出处:https:// ...

  10. Linux通过脚本实现多台主机统一部署

    该脚本分成三部分,一部分是获取信息的脚本:getInfo.sh 一个是main脚本:main.sh.一个是ssh连接主机脚本:sshing.sh main.sh #是否检查主机是否存活host_che ...