kerberos的故事1

這是MIT(Massachusetts Institute of Technology)爲了幫助人們理解Kerberos的原理而寫的一篇對話集。 裏面有兩個虛構的人物:AthenaEuripides,通過Athena不斷的構思和Euripides不斷的尋找其中的漏洞,使大家明白了 Kerberos協議的原理。

  Athena: 雅典娜,智慧與技藝的女神。


  Euripides:歐里庇得斯希臘的悲劇詩人。


  譯文如下:
第一幕

  在一個小工作間裏。AthenaEuripides正在相鄰的終端上工作。

  Athena: 嗨,這個分時操作系統實在太慢了。我根本無法工作,因爲每個人都登上去了。


  Euripides: 不要對我報怨。我只是在這工作。


  Athena: 你知道我們需要什麼嗎?我們需要給每一個人一臺工作,這樣大家就不會擔心計算機的速度了。並且,我們需要一個網絡把所有的計算機都聯起來。


  Euripides: 好。那麼我們差不多要一千臺工作站
?

  Athena: 差不多吧。


  Euripides: 你知道一臺普通的工作站的硬盤有多大嗎?那裏放不下所有的軟件。


  Athena: 我已經有主意了。我們可以把系統軟件放到服務器上。當你登錄到工作站的時候,工作站會通過網絡與其中一臺服務器上的系統軟件聯繫。這樣的設置讓一組工作站都使用同一份系統軟件,並且利於系統軟件的升級。只需改動服務器就可以了。


  Euripides: 好的。個人的文件怎到辦呢?在分時操作系統上,我可以登錄並從終端上取走我的文件。我能到工作站上取我的文件嗎?我要象PC用戶一樣把我的文件放到磁盤上去嗎?我希望不。


  Athena: 我想我們可以其它機器來存文件。你可以到任何一臺機器上登錄去取你的文件。


  Euripides: 打印怎麼辦呢?每個工作站都要有自已的打印機嗎?誰來付錢?電子郵件呢?你怎麼把郵件送到所有的工作站上去呢
?

  Athena: .....很明顯我們沒錢爲每個人配一臺打印機,但我們有專門的機器做打印服務。你把請求送到服務器,它就爲你打印。郵件也可以這樣做。專門有一臺郵件服務器。你如果想要你的郵件,就聯繫郵件服務器,取走你的郵件。


  Euripides: 你的工作站系統聽起來很不錯。如果我有一臺,你知道我要做什麼嗎?我要找出你的用戶名,讓我的工作站認爲我就是你。然後我就去郵件服務器取走你的郵件。我會聯上你的文件服務器,移走你的文件,然後
--

  Athena: 你能做得到嗎
?

  Euripides: 當然!這些網絡服務器怎麼會知道我不是你
?

  Athena: 嗯,我不知道.我想我需要認真思考一下
.

  Euripides: 好吧。你想出來後告訴我.
第二幕

  Euripides的辦公室,第二天早上。Euripides坐在他的桌子旁邊,讀着他的郵件。Athena來敲門.

  Athena: 我已經想出怎樣保護一個開放的網絡系統,使象你那樣不道德的人不能用別人的名字使用網絡服務。


  Euripides: 真的嗎?坐吧。


  她坐下了。


  Athena: 在我開始描述之前,我可以爲我們的討論先做一個約定嗎
?

  Euripides: 什麼約定
?

  Athena: 好,假設我這樣說:"我想要我的郵件,於是我與郵件服務器聯繫,請求它把郵件送到我的工作站上來。"實際上我並沒有聯繫服務 器。我用一個程序來與服務器聯繫並取得我的郵件,這個程序就是這個服務的客戶端。 但我不想每次與服務器交互的時侯說:"客戶端怎樣怎樣".我只想說:" 我怎樣怎樣,"記住,客戶端在代表我做所有的事。這樣可以嗎
?

  Euripides: 當然。沒問題
.

  Athena: 好。那麼我要開始闡述我所解決的問題了。在一個開放的網絡環境中,提供服務的機器必須能夠識別請求服務的實體的身份。如果我去郵件服務器申請我的郵件,服務程序必須能夠驗證我就是我所申明的那個人。


  Euripides: 沒錯
.

  Athena: 你可以用一個笨辦法解決這個問題:服務器讓你輸入你的口令。通過輸口令的辦法我可以證明我是誰。


  Euripides: 那確實很笨拙。在像那樣的系統裏面,每一個服務器必須知道你的口令。如果網絡有一千個用戶,那每個服務器就要知道一千個口令。如果你想改變口令,你就必須聯繫所有服務器,通知它們修改口令。我想你的系統不會那麼笨。


  Athena: 我的系統沒那麼笨。它是象這樣工作的:不光人有口令,服務也有口令。每個用戶知道他們自已的口令,每個服務也知道它自已的口令。有一個認證服務知道所有的口令,用戶的和服務的。認證服務把口令保存在一個單獨的中央數據庫中。


  Euripides: 這個認證服務有一個名字嗎
?

  Athena: 我還沒想好。你想一個吧
?

  Euripides: 把死人送過冥河的人是誰
?

  
Athena: Charon?

  Euripides: 對,就是他。如果他不能證實你的身份的話,他就不會把你送過河。


  Athena: 你瞎編,是不是想重寫希臘神話。Charon不關心你的身份,他只是確定你死了沒有。


  Euripides: 你有更好的名字嗎
?

  停了一下。


  Athena: 沒有,真的沒有。


  Euripides: 好,那我們就把這個認證服務“Charon”


  Athena: 好,我猜我該描述一下這個系統了吧,嗯
?

  比如說我們想要一種服務:郵件。在我的系統裏面你無法使用一種服務,除非Charon告訴服務你確實是你所申明的人。也就是說你必須得到 Charon的認證才能使用服務。當你向Charon請求認證的時候,你必須告訴Charon你要使用哪一個服務。如果你想用郵件,你要告訴 Charon Charon請你證明你的身份。於是你送給它你的密碼。Charon把你的密碼和它數據庫中的密碼相比較。如果相等,Charon就認爲 你通過了驗證。 Charon現在就要讓郵件服務知道你通過了驗證。既然Charon知道所有服務的密碼,它也知道郵件服務的密碼。Charon把郵件服 務的密碼給你,你就可以使用這個密碼使郵件服務相信你已通過驗證。 問題是,Charon不能直接給你密碼,因爲你會知道它。下次你想要郵件服務的時候, 你就會繞過Charon使用郵件服務而不需要認證。你也可以假裝某人來使用郵件服務。 所以不是直接給你郵件服務的密碼,Charon給你一張郵件服務的。這張票含有你的名字,並且名字是用郵件服務的密碼加密的。 拿到票,你就可以向郵件服務請求你的郵件。你向郵件服務提出請求,並用你的票來證明你 的身份。 服務用它自已的密碼來把票解密,如果票能被正確的解密,服務器將票裏的用戶名取出。服務把這個名字和隨票一起送上的用戶名進行比較。如果相符, 服務器就認爲你通過了驗證,就把你的郵件發給你。
你認爲怎麼樣?

  Euripides: 我有些問題。


  Athena: 我猜到了。請講。


  Euripides: 當服務解密一張票的時候,它如何知道它是被正確的解密的
?

  Athena: 我不知道。


  Euripides: 也許你應該在票裏包含有服務的名字。這樣當服務解密票的時候,它就可以通過能否在票中找到自已的名字來判斷解密是否正確。


  Athena: 很好。那票就應該是這個樣子
:

  (她把下面的東西寫在了一張紙上
)

  票-{用戶名:服務名
}

  Euripides: 那票就只包含用戶名和服務名
?

  Athena: 用服務的口令加密。


  Euripides: 我不認爲這些信息就可以讓票安全。


  Athena: 什麼意思
?

  Euripides: 假設你向Charon請求一張郵件服務的票。Charon準備了一張有你名字“tina”的票。假設在當票從 Charon傳給你的過程中我拷了一份。假設我讓我的工作站相信我的用戶名是”tina“。郵件客戶程序認爲我就是你。用你的名字郵件客戶程序用偷來的票 向郵件服務器提出請求。郵件服務器把票解密,認爲它是合法的。票裏的用戶名和發送該票的用戶名是匹配的。郵件服務器就會發給我你的郵件。


  Athena: !那可不太好。


  Euripides: 但是我想到了一個辦法來解決這個問題。或者說部分解決。我想Charon應該在票中包含更多的信息。除了用戶名,票還 應包含請求票的用戶的IP地址。這將給你增加一層安全性。 我來演示。假設現在我偷了你的票。這票有你工作站的IP地址,並且這地址配不上我的工作站的地 址。用你的名字我把偷來的票送給郵件服務器。服務程序把用戶名和網絡地址從票中解出,並試圖匹配用戶名和網絡地址。用戶名匹配可網絡地址不匹配。服務器拒 絕了這張票,因爲它明顯是偷來的。


  Athena: 英雄,英雄!我怎麼會沒想到。


  Euripides: 好了,這就是我要表述的。


  Athena: 那麼票應該是這個樣子的。


  她把下面的東西寫在了黑板上。

  票-{用戶名:地址:服務名
}

  Athena: 現在我真的很激動。讓我們來建一個Charon系統看看它是否工作
!

  Euripides: 沒那麼快。對於你的系統我還有些問題。


  Athena: 好吧。(Athena從她的椅子上探出了身子)快說。


  Euripides: 聽起來好像每次我想要得到服務我都要去取一張新票。如果我整天的工作,我可能不只一次的要取我的郵件。我每次取郵件都要去取一張新票嗎?如果真是這樣,我不喜歡你的系統。


  Athena: 啊。。。我不明白爲什麼票不能被重用。如果我已經得到了一張郵件服務的票,我可以一次又一次使用它。當郵件客戶程序用你的名字請求了服務,它就傳一份票的拷貝給服務。


  Euripides: 好一些。但我仍有問題。你似乎暗示我每次使用還沒有票的服務時,我都必須給Charon我的密碼我登錄後想取我的文 件。我向Charon請求我的票,這意味着我不得不使用我的密碼。然後我想讀我的郵件。又向Charon發一次請求,我又要輸一次我的密碼。現在假設我想 把我的郵件送去打印。我又要向Charon發一次請求。你知道了吧
?

  Athena: 啊,是的,我明白了。


  Euripides: 並且如果這還不夠糟的話,想想看:它好像是這樣,當每次你要向Charon認證的時候,你就要用明文在網絡上傳輸你的口令。像你這樣的聰明人可以監視網絡並且得到別人的口令。如果我得到你的口令,我就可以用你的名字來使用任何服務。


  Athena嘆了口氣。


  Athena: 確實有嚴重的問題。我想我該回設計室去了。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章