一篇文章带你弄懂Kerberos的设计思路
这篇文章将会带大家详细梳理和理解Kerberos的设计思路。
Basic
为了减轻服务器的负担,我们需要设计一个专门的认证服务器AS,储存所有用户的口令,认证了用户身份之后再通知应用服务器
引入ticket:客户把自己的ID(IDc),要访问的服务器的ID (IDv) 和自己的口令 (Pc) 发给AS,AS查验用户和口令是否合法,是否有权访问V,都符合就给客户发一张ticket,客户凭借ticket和IDc去访问V
上述机制中还存在4个问题
Q1:访问多个服务器需要多次申请票据,多次输入口令会造成不安全
solution:
- 引入票据许可服务器(TGS,类似售票处),AS只认证,认证之后发放票据许可票据(类似允许你买票的身份证明)
,用来访问V的服务许可票据 由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之间生成
AS为TGS和C生成了
现在我们解决了以上四个问题,来梳理一下,现在的票据长啥样?
票据包含双方的ID,为双方生成的共享密钥,TS,TL,给谁的票据就用谁的密钥加密
更近一步的优化:C和V之间也要改成双向认证,C也要确认V的身份,TGS、V回复C的时候最外层就用会话密钥加密(信任第三方)
V回复C{
最后我们就得到了Kerberos的整个流程:
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Deepseek官网太卡,教你白嫖阿里云的Deepseek-R1满血版
· 2分钟学会 DeepSeek API,竟然比官方更好用!
· .NET 使用 DeepSeek R1 开发智能 AI 客户端
· DeepSeek本地性能调优
· 一文掌握DeepSeek本地部署+Page Assist浏览器插件+C#接口调用+局域网访问!全攻略