冠军

导航

Kerberos的原理 - 3

 

第三幕


第二天一早,Athena 在咖啡间遇上了Euripides。在 Euripides 倒咖啡的时候,Athena 拍了拍 Euripides.
Athena: 我有了一个新的 Charon 的版本来解决我们的问题。
Euripides: 真的吗?好快呀。
Athena: 好,你看,这些问题困扰了我一夜。
Euripides: 一定是你良心发现了。我们去那边的小会议室吧?
Athena: 好的。
两人去了小会议室。
Athena: 我要重新描述问题,但我要根据我们的需要进行适当的转换。
Athena 清了清嗓子。
Athena: 第一个限制:用户只输一次口令,在他们工作站启动的时候,这意味着当你需要申请新的服务的票时,不需输入你的口令。第二个限制:口令不能在网络上进行明文传输。
Euripides: 好的。
Athena: 我以第一项限制开始:你只需要输入你的口令一次。

我创造了一个新的网络服务来解决这个问题。 它叫做“票据授权”服务,这个服务把 Charon 的票给用户。使用 Charon  必须要有票:票据授权的票。

票据授权服务其实只是 Charon 的一个版本,它可以存取 Charon 的数据库。它是 Charon 的一部分,可以让你通过票而不是口令来进行认证。

总之,认证系统现在是象这样工作的:你登录到一个工作站,用一个叫 kinit 的程序与 Charon 服务器通讯。你向 Charon 证明你的身份,kinit 程序取得一张票据授权票。

现在你想从邮件服务器上取你的邮件。你还没有邮件服务器的票,所以你用“票据授权”票去取邮件服务的票。你不需要使用口令去取新的服务票。
Euripides: 每次我想要另一种网络服务的时候,我都要去取一张“票据授权”票吗?
Athena: 不。记住,上次我们已经同意票是能被重用的。一旦你要用到票据授权票,直接用就可以了。
Euripides: 好,有道理。既然你能重用票,一旦你得到了某个服务的票,你就无需再去取了。
Athena: 对啊,那不好吗?
Euripides: 好的,我没话说,只要你在取得票据授权票的时候没有用明文在网上传输你的口令。
Athena: 如我所说,我已解决了这个问题。听起来好像是,当我说我要和 Charon 联系取得票据授权票的时候,你就要在网络上传输明文密码。但其实不是这样的。 实际上是,当你用 kinit 程序取得票据授权票的时候,kinit 没有把你的口令送给 Charon 服务器,kinit 只送你的用户名
Euripides: 很好。
Athena: Charon 用用户名去查找你的口令。然后 Charon 就会组一个包含票据授权票的包。在送给你之前,Charon 用你的口令去把这个包加密。 你的工作站收到了包。你输入你的口令。kinit用你的口令对这个包进行解密。如果成功你就向 Charon 成功的进行了认证。你现在有了票据授权票,你可以用这张票来取得其它的票。
这些奇思妙想怎么样?
Euripides: 我不知道...我正在思考。你知道你的系统一部分工作得很好。你的系统只需要我认证一次。以后,Charon 会给我服务的票而我需要关心。天衣无缝,天衣无缝。

但服务票的设计还是有一些困扰我。服务票是可重用的。我同意它们应该能被重用,但重用的服务票,由于它们自身的性质,是非常危险的。
Athena: 什么意思?
Euripides: 这样看。假设你正在用一个不安全的工作站。在你登入后,你需要邮件服务票,打印票,和文件服务票。假设你无意中在你退出后留下了那些票。 现在假设我登录到那个工作站并且发现了那些票。我想制造一些麻烦,于是我就用你的名字登录了。既然那些票上是你的名字,那我就可以取你的邮件,打大量的文件。这些完全是因为这些票被偶然的放在了那里。 并且我还可以把这些票拷走,永远的使用它们。
Athena: 但是这很好解决。我们可以写一个程序,在用户退出的时候把票销毁掉,这些票也主不能再用了。
Euripides: 那么很明显你的统应该有一个票据销毁程序,让用户依赖这样的机制是非常愚蠢的。你不能指望用户在他们退出的时候会销毁票据。并且甚至不能依赖销毁票据本身,看下面的情况。 我有一个程序可以监视网络并且拷内别人的服务票据。假设我想牺牲你。我等你登到工作站的时候,打开我的程序并拷贝一份你的票。 我等你退出并离开。我把我的工作站的地址调整为你登录时用的地址。我让工作站认为我是你。我有你的票,你的用户名,你的地址。我可以用这些票来使用你的服务。
你离开工作站时销毁你的票已没关系。这些我偷来的票可以一直使用下去,因为你现在的票并没有可以使用多少次的期限,或可以使用多长的时间。
Athena: 哦,我明白你所说的了!票不能是永远合法的,因为它可能是一个非常大的安全隐患。我们应该限制每一张票可以用多长的时间,也许可以给每张票设一个有效期。
Euripides: 非常正确。我想票需要增加两项信息:生存期表示票多长时间内是合法的,和一个时间戳来说明 Charon 是什么时候发出这张票的。
Euripides走到了黑板写下了如下的内容:
  票{用户名:地址:服务名:有效期:时间戳}
Euripides: 现在当服务解开票时,它检查票的用户名,地址是否与发送者匹配,然后它用有效期和时间戳来检查票是否有效。
Athena: 很好。典型的票使用哪长的有效期呢?
Euripides: 我不知道。也许是一个典型工作站的工作周期。就八小时吧。
Athena: 那如果我在工作站呆的时间超过八小时,所有的票将会失效。包括票据授权票。那我就要重新向Charon作认证,在八小时以后。
Euripides: 是不是不合理?
Athena: 我想不是。好我们就定下来吧--票在八小时后失效。现在我有一个问题问你。假设我从网络上拷了 你的票......。
Euripides: (眨了眨眼睛)啊,Tina!你不会真的这样做吧?
Athena: 这只是为了讨论。我拷了你的票。现在我等你退出并离开。假设你有一个医生的约会或聚会要参加,你在两个小时后退出,并且你在退出之前销毁了你的票。
但我已经偷了你的票,它们还可以使用六小时。这给了我足够的时间用你的名义去取你的文件并打印一千份什么东西。 你看,时间戳工作的很好如果小偷选择在它失效以后来用的话。如果小偷能在它失效之前用......。
啊,好......当然,你是对的。
Athena: 我想我们遇上了一个大问题了。(她叹了口气)
停了一下。
Euripides: 我想这意味着你今晚要忙了。再来点咖啡?
Athena: 为什么不。

 

posted on 2010-10-04 23:55  冠军  阅读(909)  评论(0编辑  收藏  举报