天天看點

《Kerberos權威指南》中文精讀系列:第1章 - 概述第1章. 概述

自己的一點說明:

《Kerberos: The Definitive Guide(Kerberos權威指南)》一書,由O’Reilly出版社于2003年9月5日出版。距今已經過去了17年的時間。檢視這本書在外網的評論,非常有意思,在這本書出版的頭幾年中(2010年之前)的評論數量,反而是少于2010年後的評論數的。曾經Kerberos對于大部分的開發人員來說都是不必關心的東西,很多人甚至都不知道這個東西的存在,通常隻有伺服器的運維管理人員在配置Active Directory之類的東西時才會接觸到;但是随着大資料的流行,由于整個Hadoop生态圈在安全方面對于Kerberos的依賴,以及Kerberos認證必須入侵式改造代碼的特點,使得其在最近十年内走進了開發人員(特别是企業級應用的開發人員)的視野,折磨了無數剛入門的大資料開發人員。

對于這樣的基礎軟體設施的介紹書籍,這麼多年過去,仍然隻有這一本講解的最系統的書籍,實在是有些尴尬。雖然這本書已經出版多年,但是Kerberos 5的協定規範早在上個世紀末就已經大緻定型,這本書中大部分的章節仍然對如今的Kerberos 5非常有用。在接下來的文章中,将會對這本書中的有用章節進行中文化的翻譯,對于大資料開發人員不必關心的部分,會直接進行删減。其中有些描述已經不符合現在情況的部分,本人會進行一定的注解說明,請留意。

另外本人雖然已經閱讀完畢這本書,但是翻譯表達實際上又是另外一碼事了…翻譯的蹩腳的地方,請多包涵。

Kerberos權威指南

  • 第1章. 概述
    • 起源
      • 現代曆史
        • 分時模型
        • 用戶端-伺服器模型
        • 雅典娜項目
      • 什麼是Kerberos?
      • 目标
      • 進化
        • 早期的Kerberos (v1、v2、v3)
        • Kerberos 4
        • Kerberos 5
        • 新方向

第1章. 概述

你是誰?這個問題的答案很明顯,至少對人類來說是這樣。人類有能力通過幾種感官來區分彼此;最常見的是我們通過視覺來識别我們以前見過的人。我們還可以通過其他方式來區分彼此,比如肢體語言、說話方式和口音,以及人們之間分享的秘密。甚至有研究表明,新生兒僅通過氣味就能辨識母親和其他女性。我們識别周圍環境模式的能力,使得我們有能力确定或認證我們所認識的人的身份。

然而,當你把計算機代入這個畫面時,情況就發生了戲劇性的變化。計算機(至少是今天的計算機)沒有眼睛、耳朵或鼻子。即使它們有,目前最先進的模式識别在廣泛應用下仍然是非常不準确的。雖然在這方面有很多研究,但目前最常見的人對計算機的身份驗證方式,還是通過密碼。密碼,也被稱為共享秘密,是決定“鍵盤後面的人是否真的是他們聲稱的那個人”的關鍵資訊。雖然人類有時也使用這種共享秘密的方法——例如,一次秘密握手,或者可能是了解到鮮為人知的瑣事——但計算機幾乎完全使用共享秘密來驗證人的身份。

目前用于身份驗證的密碼存在兩個問題。首先是人的問題。我們不喜歡記住一長串複雜的數字、字母,甚至是組成安全密碼的符号。如果讓我們使用自己的裝置,我們會使用簡單的字典單詞,甚至可能是我們配偶的名字或生日作為密碼。不幸的是,一個真的不是秘密的“共享秘密”(比如你配偶的名字)很容易被想要在計算機上冒充你的攻擊者猜到。更嚴重的問題是,即便是在公司網絡中,每個人也都可以通路數十台機器,每台機器都需要自己的密碼。一般來說,随着密碼數量的增加,每個密碼的品質都會随着下降。

第二個問題是技術問題。當你輸入密碼時,計算機會給你一種很安全的錯覺,在螢幕上列印星号,或者什麼都不列印,有時這些資訊必須通過通信網絡傳到另一端的電腦上。計算機通過網絡發送密碼最常用的方法是發送“明文”密碼,即未經修改的密碼。如果每台計算機與它希望通信的其他計算機都有一個完全獨立的、專用的連接配接,那沒什麼問題;但實際上,計算機網絡是一個共享資源。在透明狀态下通過網絡發送密碼,類似于站在一個擁擠的房間裡對站在另一邊的朋友大喊大叫。

Kerberos是一個網絡身份驗證系統,可以幫助解決這兩個問題。它減少了每個使用者使用整個網絡時必須記住的密碼數量——隻需記住Kerberos密碼。此外,Kerberos結合了加密和消息完整性來解決第二個問題,確定敏感的身份驗證資料不會在網絡上透明地發送。Kerberos是整個網絡安全計劃的重要組成部分,通過提供安全的身份驗證機制,為最終使用者和管理者提供了明顯的好處。

但在進一步讨論之前,讓我們先回顧一下Kerberos的曆史。

起源

Kerberos一詞源于希臘神話,其中包含了Cerberus的傳說。Cerberus守護着冥王哈迪斯和他的妻子珀爾塞福涅統治的冥界。Cerberus長什麼樣取決于你問誰;赫西俄德聲稱Cerberus有五十個頭,而阿波羅多羅斯描述他是一種奇怪的生物的混合體,有三個狗形的頭,一條蛇一樣的尾巴,并且背上有蛇的頭。Cerberus通常被描繪成一個有三個頭的生物。不管怎樣,Cerberus是一個很少有人敢挑戰的邪惡生物。

希臘人相信當一個人死後,他的靈魂會被送到地獄度過永恒。當所有的靈魂都被送到地獄,那些靈魂美好的人将免于遭受永恒的懲罰。Cerberus,作為地獄的守門人,確定隻有死者的靈魂進入地獄,他確定靈魂一旦進入地獄就無法逃脫。

作為通往地獄的守門人,Cerberus對那些試圖進入的人進行身份驗證(以确定他們是死是活),并使用這種身份驗證來确定是否允許進入。與古代的Cerberus一樣,現代的Kerberos對那些試圖通路網絡資源的使用者進行身份驗證。

像神話中的其他偉大人物一樣,Cerberus有一個緻命的缺陷,使一些聰明的人能夠通過Cerberus進入地獄。我們将在第6章中回顧這個傳說并讨論一個這樣的故事和它的現代版本。

最後,如果這個古老的神話角色被命名為Cerberus,那麼為什麼現代的身份驗證系統稱為Kerberos?簡單地說,它們隻是同一個單詞的不同拼寫。為了區分古代神話和現代軟體系統,我們将把神話角色稱為Cerberus,把現代軟體系統稱為Kerberos。

現代曆史

Kerberos網絡身份驗證系統的現代起源要比Cerberus的古老神話更加平凡。Kerberos是20世紀80年代早期麻省理工學院(MIT)的一個研究項目。當時,麻省理工學院的教員們認識到,廣泛使用并且價格低廉的計算機将會改變計算機行業。

分時模型

傳統的計算機是一種大型的、昂貴的、集中的資源,終端使用者可以通過串行線連接配接的啞終端通路它。這被稱為分時模型(圖1-1)。

《Kerberos權威指南》中文精讀系列:第1章 - 概述第1章. 概述

圖1-1 分時模型

分時模型具有明顯的管理優勢。由于隻有一台計算機(盡管很大),維護使用者帳戶和權限很容易。要添加使用者帳戶,管理者隻需在計算機的密碼檔案中建立一個條目,使用者就可以立即通路。删除帳戶或更改密碼也同樣容易;根據定義,隻有一個管理點,因為隻涉及一台機器。

此外,分時模型在傳輸過程中不需要對密碼進行加密。使用者通過專用串行線連接配接到機器,每個使用者都有自己的啞終端連接配接到自己的串行線。由于通信媒介不是共享的,是以一個使用者無法監聽另一個使用者的通信,除非親自竊聽他們的串行線路。

用戶端-伺服器模型

分組交換計算機網絡的出現極大地改變了使用者與計算機的互動方式。有了計算機網絡,使用者在他們的桌子上都有一台便宜的計算機,通過網絡連接配接到組織中的所有其他計算機。由于台式計算機還不是非常強大、專門的,功能更強大的伺服器計算機被用來為使用者提供諸如檔案存儲、列印和電子郵件等服務。

這種被廣泛稱為用戶端-伺服器的新計算模型為使用者和管理者提供了一些獨特的優勢(圖1-2)。終端使用者的可用性得到了提高,因為桌面計算機雖然性能不是很強大,但功能上足夠為伺服器計算機的資源提供菜單驅動的接口;與在啞終端或行列印機上鍵入密碼指令相比,有了顯著的進步。

《Kerberos權威指南》中文精讀系列:第1章 - 概述第1章. 概述

圖1-2 用戶端-伺服器模型

然而,麻省理工學院的教師們認識到,這種新模式需要一個引人注目的新軟體架構和一種新的計算思維方式:一種認識到計算能力不是集中在整個校園中的思維方式。

個人計算機和網絡的出現帶來的一個主要問題是終端使用者用戶端不再受信任。在傳統的分時模型中,終端使用者隻有一個啞終端,根本沒有處理能力。由于共享的所有使用者的計算機都在系統管理者的完全控制之下,是以可以信任它。

現在,由于所有終端使用者的桌子上都有價格低廉的個人電腦,系統管理者不再能夠完全控制所有的計算能力;實際上,終端使用者可以在他們的個人電腦上修改軟體的任何部分,甚至可以替換作業系統本身。由于終端使用者現在控制自己的計算機,他們可以向其他計算機發送假消息,監聽網絡上其他計算機之間的連接配接,并模拟其他使用者的身份。

雅典娜項目

來說說雅典娜項目。雅典娜項目是在1983年5月一個計算機供應商聯盟的支援下建立的,為期五年。雅典娜的重點是開發将計算機整合到麻省理工課程中的政策和軟體。特别是,雅典娜從一開始就被設計成一個網絡化的用戶端-伺服器系統。雖然“雅典娜項目”有一個明确的教育用途重點,但最終産生了至今仍在廣泛使用幾個軟體包。

如前文所述,在網絡上以明文傳遞密碼類似于在擁擠的房間裡大喊大叫。然而,這正是當時軟體的工作方式:标準的遠端登入協定(如Telnet和rlogin)通過網絡以明文發送使用者憑證。更糟糕的是,其他伺服器軟體,如rlogin,盲目地相信用戶端計算機發送給它的身份。是以,不道德的使用者可以(很容易地)編寫假冒的rlogin用戶端,以便能夠冒充網絡上的任何其他人。這在學術環境中是不可接受的,因為不誠實的使用者可以監聽網絡資訊來擷取其他使用者的密碼或竊取他人的工作。

此外,現在計算資源的分散性帶來了一個問題,即每個使用者都可以通路網絡上的多台計算機,每台計算機都需要自己的使用者名和密碼。這種模式與舊的分時模型形成了對比,在分時模型中,終端使用者的機器通過專用的串行線連接配接到一台中央計算機上,隻需要登入一次。

為了解決這些問題,雅典娜項目開發了用于網絡身份驗證的Kerberos協定。雅典娜項目的技術計劃部分概述了新服務的主要目标;也就是說,将通常在大型分時模型中常見的身份驗證服務,擴充到由伺服器和不受信任的終端使用者客戶機組成的分布式網絡。新的身份驗證系統必須将信任集中于受到嚴格控制和監視的機器中,并加密這些身份驗證伺服器與網絡上其他機器之間的任何敏感事務。

許多其他的包也來自于雅典娜項目的努力。雅典娜項目開發了X Window系統,該系統現在是每個Unix系統的圖形使用者界面的基礎。還有與分布式計算相關的其他包,包括Hesiod分布式名稱服務和Moira分布式網絡管理系統。

雅典娜項目和美國及世界其他大型大學的類似項目的結合,為這些機構提供了跨越所有主要網絡協定的先進的單點登入網絡基礎設施,包括電子郵件、檔案共享、甚至即時消息傳遞。在您自己的網絡中,通過使用Kerberos和支援Kerberos身份驗證的應用程式,您也可以實作這個目标。

什麼是Kerberos?

Kerberos提供的完整定義是安全的、單點登入的、可信的第三方互相身份驗證服務。這是什麼意思?讓我們把這個定義分解一下,然後快速地描述下每個部分。

安全的

Kerberos是安全的,因為它從不在網絡上明文傳輸密碼。Kerberos的獨特之處在于它使用票據、有時間限制的加密消息,這些消息可以向給定的伺服器證明使用者的身份,而不需要通過網絡發送密碼或在本地使用者的硬碟上緩存密碼。

單點登入的

單點登入意味着最終使用者隻需登入一次,就可以通路支援Kerberos的所有網絡資源。一旦使用者在登入會話開始時對Kerberos進行了身份驗證,那麼他的憑證就會透明地傳遞到他當天通路的所有其他資源。

可信的第三方

可信的第三方指的是Kerberos通過一個集中式身份驗證伺服器工作,網絡中的所有系統本質上都信任這個伺服器。所有身份驗證請求都通過集中式Kerberos伺服器路由。

互相身份驗證

互相身份驗證不僅確定鍵盤後面的人是他聲稱的人,而且還證明了與他通信的伺服器是他聲稱的那個人。互相身份驗證通過確定與使用者通信的服務是真實的,保護了敏感資訊的機密性。

這三個概念描述了Kerberos網絡身份驗證服務的基礎。在下一章中,我們将進一步研究這些概念和相關術語。

目标

Kerberos系統有幾個目标。它力求同時提高安全性和友善性。首先是将身份驗證集中到一個伺服器(或一組伺服器)的目标。Kerberos系統通過一組集中的密鑰分發中心(KDCs)進行操作。網絡上的每個KDC都包含一個資料庫,其中包含使用者名和密碼以及支援Kerberos的服務。集中這些資訊可以減輕管理者的負擔,因為他們現在隻需要維護這個單一的使用者名/密碼資料庫。此外,它還為安全管理者提供了一個優勢,他們現在隻有一小部分機器可以存儲使用者名和密碼,是以可以對這些機器進行相應的加強和保護。

Kerberos在不安全的網絡上提供了一種安全的身份驗證方法。Kerberos使用加密的票據來證明終端使用者和網絡伺服器的身份,而不是通過網絡發送明文密碼。這些票據由中央密鑰分發中心代表希望對網絡進行身份驗證的使用者進行生成。當使用Kerberos時,使用者密碼不會在網絡上以明文發送。

此外,使用Kerberos可以更容易地實作“三個A”中的其他兩個元素{三個A:授權(authorization)、審計(auditing)、身份驗證(authentication)}。雖然Kerberos并不直接提供授權或審計服務,但是Kerberos準确識别使用者和服務的能力允許程式員和管理者提供授權和審計,進而進一步增強網絡的安全性。在下一章中,我們将詳細讨論授權和審計到底是什麼。

進化

自從作為雅典娜項目的一部分首次提出以來,現代Kerberos協定經曆了幾次重大修改。在每個版本中,可用性、可擴充性和安全性方面都有了很大的改進。

早期的Kerberos (v1、v2、v3)

Kerberos的早期版本(版本4之前)是在MIT内部建立和使用的,用于測試目的。這些實作包含重要的限制,并且隻對檢查新想法和觀察開發和測試期間出現的實際問題有用。

Kerberos 4

在MIT之外分發的第一個Kerberos版本是Kerberos 4。Kerberos 4于1989年1月24日首次向公衆釋出,一些供應商采用了Kerberos 4,并将其包含在他們的作業系統中。此外,其他大型分布式軟體項目(如Andrew檔案系統)采用Kerberos 4背後的理念作為它們自己的身份驗證機制。

雅典娜的技術計劃中記錄了Kerberos 4協定的基礎。最終,協定的細節通過MIT釋出的參考實作中的源代碼被記錄下來。

但是,由于美國政府對加密軟體的出口管制限制,Kerberos 4不能出口到美國以外的地方。因為Kerberos 4使用DES加密,是以美國以外的組織不能合法地從MIT下載下傳Kerberos 4軟體。作為回應,MIT開發團隊剝離了Kerberos 4中的所有加密代碼,以建立一個專門的、可出口的版本。澳洲邦德大學的Eric Young采用了Kerberos 4的簡化版本,并添加了他自己的DES實作建立了“eBones”。由于eBones包含在美國以外開發的加密軟體,是以不受美國加密出口管制的限制,可以在世界任何地方合法使用。

今天,Kerberos 4仍然有幾種實作。原來的MIT Kerberos 4實作現在處于維護模式,并被正式認為是“已死亡”的。在瑞典開發的kth-krb發行版仍在積極開發中,強烈建議新使用者安裝和使用更進階的Kerberos 5。在本書中,Kerberos 4的讨論僅限于第3章中對協定的讨論。本書的大部分内容涉及的是Kerberos的下一個版本Kerberos 5。

【譯注:Kerberos 4的生命周期在2006/10/19已經宣告完全終止,詳情可參閱https://web.mit.edu/kerberos/krb4-end-of-life.html】

Kerberos 5

Kerberos 5是為了添加協定版本4中沒有的特性和安全性增強而開發的。Kerberos 5是Kerberos協定的最新版本,并被記錄在RFC 1510中。

為了糾正Kerberos 4協定中的缺陷,添加了幾個新特性。包括:

  • 一個基于ASN.1的,更好的連線協定
  • 憑證轉發和委托
  • 緩存重播
  • 更靈活的跨域身份驗證
  • 可擴充的加密類型
  • 預身份驗證

(不要擔心,我們稍後将在第3章、第6章和第8章中更詳細地讨論這些特性。)

除了由MIT提供的參考實作之外,還有許多其他Kerberos 5實作被開發出來,有些是商業實作,有些是開源實作。本書涉及的實作包括MIT、Heimdal、Microsoft (Windows 2000及以上)和Apple (Mac OS X及以上)。

不幸的是,盡管從2000年1月開始,圍繞美國加密出口的規則在開源軟體上已經放寬,但MIT的分發版仍然隻對美國居民開放。

【譯注:目前MIT的分發版已經對美利堅合衆國出口管制條例明确規定禁止出口的國家和個人以外的使用者開放,被禁止出口的國家包括但不限于古巴、伊朗、北韓、蘇丹、叙利亞等國以及這些國家的居民和國民。詳情請參考United States Export Administration Regulations (EAR), 15 CFR 730-774】

由于MIT的律師的過分謹慎,瑞典的一個小組正在開發和分發Heimdal Kerberos 5發行版,它不受任何出口管制法律的限制。

【譯注:在Debian、FreeBSD和Samba中預設使用的就是Heimdal Kerberos 5,而在Red Hat中預設使用的都是MIT Kerberos】

新方向

Kerberos協定正在不斷地變化和發展,以結合最新的技術和從實際實作經驗中吸取的經驗教訓,來面對可用的計算能力不斷提高而成本不斷降低的新挑戰。目前,Internet Engineering Task Force (IETF) Kerberos工作組的一組開發人員正在開發一組新的規範。撰寫本文時,Kerberos工作組正處于編寫名為Kerberos澄清文檔的最後階段,該文檔将取代RFC 1510,成為新的Kerberos 5标準文檔。Kerberos澄清文檔還包括幾個擴充Kerberos協定的新特性,為目前Kerberos 5實作的未來發展和互操作性提供了支援。

除了Kerberos澄清文檔之外,Kerberos工作組還研究了Kerberos協定的幾個附加擴充,這些擴充作為獨立的Internet草案文檔釋出。其中一些擴充已經基于草案的早期版本實作了,比如微軟在Windows 2000、XP和2003中包含的公鑰擴充。我們将在第10章中讨論Kerberos的這些未來方向以及一些作為Internet标準提出的新擴充。

Kerberos協定的這些附加特性和改進,確定了它作為最廣泛實作的單點登入身份驗證協定的持續成功。此外,通過在最新版本的Microsoft Windows中采用Kerberos, Kerberos現在在中小型網絡中得到了更廣泛的普及。

繼續閱讀