TOP

认证系统设计经典会话(一)
2020-05-16 18:16:37 】 浏览:30次 本网站的内容取自网络,仅供学习参考之用,绝无侵犯任何人知识产权之意。如有侵犯请您及时与本人取得联系,万分感谢。
Tags:认证 系统 设计 经典 会话

Bill Bryant,首次写与1988年2月
Theodore Ts'o与1997年2月整理并转换成HTML,并且追加了 afterword 章节来描述V5版本的一些变化

前言

本文虚构了一个关于公网认证系统--Charon构建过程的对话,随着对话的进行,Athena和Euripides探讨了公共网络环境里普遍存在安全问题,并在Charon系统设计之初就考虑好了这些问题的解决方式。所以直到对话完成,Athena和Euripides才算真正的把系统设计好。

当系统设计好后,Athena把系统的名字从Charon改成了Kerberos。非常巧合的是,在MIT的一个项目--Athena中,设计和实现的认证系统名称就叫做Kerberos。

对话中的“Kerberos”与1988年发表的“Kerberos:一个公共网络的认证系统“有着惊人的相似之处。

Scene I

在一个小隔间里,Athena和Euripides正在两个相邻的终端上工作

Athena:Rip,你们这个分时共享系统就是个累赘。因为其他人都登陆着,它慢的使我根本没法成我的工作。

Euripides:这个不要向我抱怨,我只是个打工的。

Athena:难道你不知道我们的需求吗?我们真正想要的是给每个人一个自己的工作站,之后再用网络链接所有的工作站,从而使大家能相互通信,这样他们就不用担心共享计算周期的问题。

Euripides:那么我们需要多少工作站呢,1000个?

Athena:差不多

Euripides:哪你有没有调研过普通工作站的磁盘,一般来讲是没有足够的空间来安装你在共享机器上所有的软件的?

Athena:这个我已经想好了,我们可以把所需的软件装在不同的服务器上,当你登陆到自己的工作站后,你可以通过网络向这些服务器发请求来使用那些软件服务。这样还能使所有的工作站都使用相同的软件版本,软件升级也会很便捷,只用把服务器上的软件升级就可以了,不用到每个工作站上面去操作。

Euripides:好吧,但是你怎么管理个人文件呢?在分时共享系统中,我可以通过任意一个和系统连接的终端登陆并访问我自己的文件。你这样设计后,我是否能通过任意工作站来获取我的个人文件,还是说我要随身带个软盘来保存我自己的文件呢?

Athena:我想我们可以用另外一台服务器来存储私有文件,这样你就可以登陆任意的工作站来获取你自己的文件。

Euripides:那打印功能怎么办,难道让每个工作站都要有自己的打印机吗?你用谁的钱来买这些设备呢?还有电子邮件怎么处理,怎么把邮件分发到所有的工作站上呢?

Athena:嗯…,很明显,我们没有钱给每个工作站配置一台打印机,但是我们可以用一台机器专门用来做打印服务。你把你的打印任务发给打印服务机,由它来帮你打印。你也可以用同样的思路来处理电子邮件,由一台机器专门做邮件服务,如果你想要你的邮件,你连接这个服务,由他来把你的邮件挑拣出来。

Euripides:你的工作站系统听起来是很好。当我有了自己的工作站,你知道我会做什么吗,我会找出你的名字,并使我的工作站认为我是你,这样我就可以连接到邮件服务获取你的邮件,我还可以连上文件服务器来删除你的文件,我还可以…

Athena:你真的会这样做吗?

Euripides:是的,那些服务怎么能知道现在是我在操作而不是你呢?

Athena:呃,我不知道,我需要好好想想这个问题。

Euripides:听起来是的。如果你知道怎么做了请一定告诉我。

Scene II

第二天早上,在Euripides 的办公室,Euripides正在他的办公桌前读他的点子邮件,Athena敲门进来

Athena:哈哈,我已经找到一种方式来加密网络环境,从而阻止像你这样调皮的家伙不能伪装成别人来使用那些服务。

Euripides:真的吗,坐下来讲吧。

Athena:在我开始之前,我能不能给我们的讨论定下一个基本准则?

Euripides:什么准则?

Athena:假如我说了下面的话:“我想看我的电子邮件,所以我连接上邮件服务,告诉邮件服务把邮件发到我的工作站。”实际上,并不是我直接连接邮件服务,而是我使用了一个程序去连接邮件服务,一个称作邮件服务客户端的程序。
但是当我每次描述用户和服务交互时,我不会说“客户端做了什么“,而是会说“我做了什么”,所以请记住是客户端作为我的代理做了这些事。我这样讲有没有问题?

Euripides:没有问题。

Athena:针对网络安全问题,最笨的方式是每次邮件服务都让用户提供密码来证明用户身份。

Euripides:这的确是够笨的。在这样一个系统中,需要每一个服务都知道你的密码。如果网络里面有一千个用户,每个服务都要有一千个用户的密码;当你想要修改密码时,你还得联系所有的服务去一个个修改。我想你的系统不会这么笨吧。

Athena:我的系统不笨。他像这样工作:不仅仅是用户有密码,服务也有密码。每个用户知道自己的密码,每个服务也知道自己的密码,并且还有一个认证服务知到所有的密码,包括用户的和服务的。认证服务把这些密码存储在一个中央仓库中。

Euripides:你有给这个认证服务起好名字吗?

Athena:我还没有想好,你有什么想法吗?

Euripides:那个帮助死者过冥河的摆渡人名字怎么样?

Athena:Charon吗?

Euripides:是的,就是他,除非你证明你的真实身份,否则他是不会摆渡你的。

Athena:Rip,你又来这一套,重新杜撰罗马神话。Charon并不关系你的身份,他只确保你已经死掉就够了。

Euripides:哪你有没有一个更好的名字?

Athena:没,还没有。

Euripides:那就把这个认证服务叫“Charon ”吧。

Athena:好吧,那我就开始描述这个系统了。

我们假定你现在要用邮件服务。在这个系统里,你不能直接使用一个服务,除非Charon告诉那个服务你就是你所声明的那个人。并且除非你先向Charon认证,否则你也不能获取到那个服务。当你向Charon认证时,你同时得告诉Charon你想使用哪一个服务,就是说如果你想用邮件服务,你得明确告诉Charon。

接着,Charon要求你提供认证信息。你向Charon提供你的密码,然后Charon和注册在中央数据库中的密码进行对比,如果密码时匹配的,Charon认为你证实了你的身份。

接下来,Charon要告诉邮件服务你就是你所声明的那个人。因为Charon知道所有服务的密码,当然也包括邮件服务的。很明显Charon可以告诉你邮件服务的密码,当你向邮件服务发起请求时你可以用这个密码证明你已经向Charon认证过了。

现在的问题是,Charon不能直接给你密码,因为你知道这个密码后,下一次你想访问邮件服务,你就可以绕过Charon不用再认证了,之后你仍可以伪装别人,用别人的名字来访问邮件服务获取他的邮件了。

所以,Charon会给你一个邮件服务的票据(TICKET)而不是直接给你密码。这个票据里面包含了你的名字,并且会利用邮件服务的密码进行加密。

TICKET = {username} K_server

  • {X}K_Y 表示 用K_Y对X进行加密。

拿到票据后,你现在可以向邮件服务请求你的邮件了,你告诉邮件服务你的名字

请关注公众号获取更多资料


认证系统设计经典会话(一) https://www.cppentry.com/bencandy.php?fid=97&id=288683

首页 上一页 1 2 3 4 5 下一页 尾页 1/5/5
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇DDD领域驱动的前生今世 下一篇Java 考试系统项目源码 springboo..

评论

验 证 码:
表  情:
内  容: