翻轉電子書系列:資訊與網路安全概論  

翻轉工作室:粘添壽

第十四章 Kerberos 認證系統

 傳說中『地獄三頭神犬』 Kerberos 神威無比,看看祂如何阻擋外侵進入!!

14-1 認證協定與認證系統

14-1-1 認證協定與系統簡介

前面已介紹『鑰匙分配中心』(KDC)的基本觀念,接下來介紹幾種較常用的『KDC 認證協定』(KDC Authentication Protocol)。到目前為止,我們瞭解在一個 KDC 管轄範圍之內,使用者與 KDC 之間都擁有一把相同的『共享密鑰』,便利用此密鑰互相確定身份,然後KDC 再分配一把『會議鑰匙』(Session Key, KS)給使用者與伺服器(使用者要求服務的)雙方,它們完全利用此會議鑰匙來互相通訊。以下分別介紹 KDC 認證協定的幾種演算法。

圖 14-0 簡介

14-1-2 KDC 基本認證協定

我們以圖 14-1 (a) 說明 KDC 的基本構想。發起者(客戶端,如 Alice)向 KDC 提出希望與回應者(伺服器,如 Bob)通訊。首先 Alice 向 KDC 發出請求通往 Bob 的會議鑰匙(訊號 (1)),其中 IDA與 IDB表示雙方身份,待KDC 收到請求之後,分別以 Alice 與 Bob 的共享密鑰(KA與 KB)傳送會議鑰匙給雙方(訊號 (2) 與 (3),EKa[IDB || KS]、EKb[IDA || KS]),接下來,便可以利用該會議鑰匙來通訊,但其運作程序存在下列缺點:

圖 14-1 KDC 的基本構想與實現

比較可行的實現方式,是由發起者攜帶會議鑰匙給回應者,如圖 14-1 (b) 所示。當 KDC 收到發起者請求之後,祇傳遞會議鑰匙給發起者(訊號 (2)),但其中包含一把通往回應者(如 Bob)的『門票』(Ticket),其格式如下:

Ticket = EKb [IDA || KS]

然而,此門票是利用回應者的共享密鑰加密著,其中包含著發起者的身份識別與會議鑰匙,當然只有回應者可以解密得到其中訊息。發起者將此門票傳送給回應者之後,兩者便可以利用該會議鑰匙(KS)來通訊。由此可以看出,發起者與回應者之間一定採用相同的會議鑰匙通訊,而且回應者也不至於使用舊的鑰匙來通訊。

圖 14-1 (b) 認證協定還是有缺陷的地方,如果攻擊者可以攔截到門票(訊號 (3)),甚至不需要破解它,只要連續向回應者發出重複攻擊,也可以得到利用會議鑰匙(KS)加密的密文。如此一來,攻擊者只要稍加努力,便可得到許多明文與密文配對,欲找出會議鑰匙也不是困難的事;或是攻擊者偽裝成發起者身份,發送門票給回應者,回應者也很難辨別對方是冒充的。因此,並非只利用 KDC 來分配鑰匙就可以,通訊雙方還是需要確認所持有的鑰匙是否相同,如此一來,便牽涉到『相互認證』(Mutual Authentication)的問題。

14-2 Needham-Schroeder 認證協定

14-2-1 N-S 協定簡介

Needham 與 Schroeder 於 1978 年提出一種『多重盤問與回應』的認證協定 [110],它不但可以避免重播攻擊,也可以解決相互認證的問題。此認證協定大多承襲圖 14-1 (b) 的運作方式,但它利用隨機產生的亂數(Nonce,64 bits)標示每一個通訊連線,並作為測試對方所持有的會議鑰匙(盤問與回應)使用。圖 14-2 為 Needham-Schroeder 認證協定的運作程序,其執行步驟如下:(以訊號發送次序說明)

圖 14-2 Needham-Schroeder 認證協定

由以上的敘述可以發現,訊號 (1) 與 (2) 是 KDC 分配鑰匙的運作程序;然而,訊號 (3) 到 (5) 是執行相互認證的程序。此協定最大的特點是,每一個訊號都在執行『盤問與回應』的機制,因此,又稱為『多重盤問與回應』協定。

Needham-Schroeder 認證協定的弱點,還是在發起者傳送門票給回應者的時候(訊號 (3))。假設攻擊者攔截到門票(訊號 (3)),它可以重複傳送此訊號給回應者(重播攻擊法);縱使該門票內含舊的鑰匙,回應者並無法分辨到底哪一把才是新的鑰匙,如此一來,攻擊者就可以阻斷回應者與發起者之間的通訊。

圖 14-3-0 三向式詢問法

14-2-2 N-S協定- 加入時間戳記

Needham-Schroeder 認證協定的問題是出現在遭受重播攻擊時,回應者無法分辨出所收到的門票是否過期,也就是無法辨別新舊鑰匙。有一個簡單的構想,是在門票上加入時間戳記 [49],當回應者收到門票時,便可利用時間戳記來判斷該門票是否過期,甚至由時間戳記可以看出所傳送的鑰匙是新的或舊的。加入時間戳記的 Needham-Schroeder 協定之運作程序如圖 14-3 所示,門票為:

Ticket = EKb [IDA || KS || T]

其中 T 是時間戳記。

圖 14-3 加入時間戳記的Needham-Schroeder 認證協定

雖然加入時間戳記可以解決一部份的問題,但亦衍生新的問題產生。為使時間戳記保持有效,通常參與通訊的設備之間的時序必須保持同步。如圖 14-3 中,發起者、KDC 中心與回應者之間的時序必須保持同步,縱然無法達到完全同步,最起碼保持在可容許範圍內。就封閉型的分散式系統而言,尚可達成,至於開放式的分散式系統,可就困難重重。

14-2-3 擴展型 N-S 協定

我們回到原來 Needham-Schroeder 協定的問題,關鍵在於回應者遭受重播攻擊時,無法辨別新舊門票。究其原因是回應者並不知道有人欲與他進行通訊,所以一旦回應者收到門票時,便立即與對方通訊。如果發起者能事先通知他,讓他有點準備,或許就能辨別新舊鑰匙。擴展型 Needham-Schroeder 認證協定,就是利用這種觀念發展出來的 [110],其運作程序如圖 14-4 所示。

我們可以比較圖 14-4 與圖 14-2 兩者之間的差異,圖 14-4 中訊號 (1) 與 (2) 是 Alice 事先通知 Bob,並由 Bob 得到一個亂數 NB(由 Bob 的主密鑰加密),而且KDC 也將該亂數植入門票內(訊號 (4)),如下:

Ticket = EKb [IDA || KS || NB]

當 Alice 利用此門票向 Bob 要求通訊時(訊號 (5)),Bob 便能由亂數 NB中知曉到底是哪一張門票。假設,攻擊者攔截到門票(訊號 (5)),並重複發送給 Bob,Bob 由門票內的 NB便可以分辨出新舊會議鑰匙。

圖 14-4 擴展型 Needham-Schroeder 認證協定

14-3 公開鑰匙認證協定

14-3-1 公開鑰匙認證協定簡介

上述所介紹的認證協定(如 Needham-Schroeder 協定)大多是使用於封閉型的分散式系統;在這些協定之中,使用者必須事先在 KDC 中心建立有帳戶,並且雙方利用使用者密碼所產生的『共享密鑰』(或稱使用者的主密鑰)來達成相互認證。但在開放式分散式系統中,使用者可能來自四面八方,且不可能事先在 KDC 中心建立帳戶,當然也不會有共享密鑰;在這種情況之下,如何來達成認證問題?以及如何分配會議鑰匙(Session Key)?關於公開鑰匙的認證協定,本書第四章已詳細介紹過,這裡僅介紹其鑰匙分配方法。

簡單的說,與陌生人之間的認證則必須採用公開鑰匙系統,但公開鑰匙系統的加密和解密時間大約是秘密鑰匙系統的 100 到 1000 倍(鑰匙較長),所以利用公開鑰匙系統加密傳遞資料,效率將是非常的低。因此,必須結合兩套系統,在身份認證方面採用公開鑰匙系統,而在資料傳遞方面則使用秘密鑰匙(會議鑰匙)系統,成為『混合型密碼系統』(Hybrid Cryptosystem)。

14-3-2 AS 分配公開鑰匙

在系統之中建立一個『認證伺服器』(Authentication Server, AS)是最簡單的做法,由該伺服器負責認證客戶的公開鑰匙(或數位憑證)。AS 伺服器必須是一個較堅固的系統,至少不容易讓攻擊者入侵修改內部儲存的公開鑰匙,並且參與通訊者都能相信它。當然參與通訊者都必須持有自己的鑰匙配對,並且能夠安全地將公開鑰匙交與 AS 伺服器保管。圖 14-5 為簡單的認證程序,為了預防重播攻擊、或避免攻擊者使用已破解的會議鑰匙,因此,加入時間戳記 [49],其中發起者(假設為 Alice)的鑰匙配對是 {KRa, KUa}(前者為私有鑰匙,後者為公開鑰匙),AS 為 {KRs, KUs},回應者(如 Bob)是{KRb, KUb}。

圖 14-5 簡單的公開鑰匙認證

圖 14-5 的基本構想是,AS 分配可信賴的公開鑰匙,然而發起者確認對方公開鑰匙無誤之後,再傳送會議鑰匙給回應者;既然會議鑰匙是由發起者直接傳送給回應者,就沒有會議鑰匙洩漏的問題,其運作說明如下:

Alice 公開鑰匙:EKRs [IDA || KUa || T]

Bob 公開鑰匙:EKRs [IDB || KUb || T]

Alice 產生會議鑰匙:EKUb [EKRa [KS || T]]

圖 14-25 認證協定還是出現時序同步的老問題,然而,因為在開放性的分散式處理當中,欲達成時序同步並不容易,下面是較完整的認證協定介紹。

14-3-3 KDC 分配會議鑰匙

圖 14-6 為比較完整的公開鑰匙認證協定 [145],主要是利用亂數(Nonce)來取代時間戳記,並且由 KDC 分配會議鑰匙,因此KDC 同時肩負公開鑰匙的分配與會議鑰匙的產生。說明如下:

圖 14-6 公開鑰匙認證協定

Bob 公開鑰匙:EKRd [IDB || KUb]

Alice 向 Bob 表示身分:EKUb [NA || IDA]

Alice 公開鑰匙:EKRd [IDA || KUa]

KDC 產生會議鑰匙:EKUb [EKRd [NA || KS || IDB]]

Bob 傳送會議鑰匙給 Alice:EKUa [EKRd [NA || KS || IDB] || NB]

我們可以由 Alice 的觀點來看,當它利用 Bob 的公開鑰匙(KUb)傳送身份憑證 IDA與亂數 NA(訊號 (3)),再由 Bob 方面收到訊號 (6);接著,它將比較兩者 NA是否相同,如果相同,則可確認是哪一個請求訊號所回應的。如此一來,雖然攻擊者攔截到訊號 (6),再重播給 Alice,Alice 也可以分辨出它是舊的會議鑰匙。

由以上的介紹,我們很難說出哪一種認證協定是安全的,各種認證協定都是使用之後發現缺點,再不斷的改進。但可以確定的是安全性越高的認證協定,它的運作程序越複雜,至於應該採用哪一層次的認證協定,那就見仁見智了。接下來,將介紹使用非常普遍,安全性又高,但運作程序頗複雜的 Kerberos 協定。

14-4 Kerberos V4 認證系統

14-4-1 Kerberos 認證系統簡介

『Kerberos 認證系統』(Kerberos Authentication System)是由麻省理工學院(M. I. T)發展出來的,其命名係來自希臘神話中看守地獄入口那條三頭狗 Kerberos。設計 Kerberos最主要的目的是要讓使用者能安全地存取網路上資源,也是目前網路使用最廣泛的技術。到目前為止,Kerberos 較常用的有兩個版本,版本 4(V4)[26, 49, 111] 目前還被廣泛使用中,但僅能使用於 TCP/IP 網路;版本 5(V5)已作了許多修正,使它更適合其他網路環境,並已制定成 RFC 1510  標準規範。

基本上,Kerberos 祇採用秘密鑰匙系統認證用戶端,所以每一個使用者都必須在 Kerberos 伺服器上建立帳號名稱,並利用使用者密碼所建立的『主密鑰』,來確認使用者與伺服器之間的身份。因此屬於較封閉的分散式系統應用,但目前已有許多應用系統,將公開鑰匙系統植入 Kerberos 之中,但僅限於客戶端身份認證而已。從認證技術而言,Kerberos 主要延伸許多 Needham-Schroeder 協定的技術,並加入時間戳記作為防止重播攻擊。正因如此,在 Kerberos 系統上,參與認證的工作站或伺服器之間都必須保持時序的同步。

之前我們所介紹的認證程序,大多侷限於使用者(透過工作站)與伺服器之間身份的認證問題、以及會議鑰匙的分配工作。然而,在 Kerberos 認證協定上並沒有刻意劃分使用者(人)或機器(伺服器或工作站),它對每一個參與認證的實體(人或機器)都一視同仁,稱之為『主角』(Principal),這種觀念通常比較適合分散式處理。

我們可意識得到,Kerberos 可能是未來封閉型分散式系統(譬如,電子化辦公室)認證的主流;至於開放型的分散式系統(如 Internet 網路應用),則較頃向於 PKI 認證系統(利用數位憑證);但也未必如此,目前許多封閉式系統(如 Windows 2000)已將 Kerberos 與 PKI 系統整合使用。基本上,Kerberos 的認證程序算是複雜的,本章之前介紹了許多認證協定的運作程序,主要為 Kerberos 鋪路;本節以介紹 Kerberos V4為主,有了第四版本的概念之後,下一節再介紹第五版本可就容易多了。

14-4-2 Kerberos 動機

無論採用何種認證協定,主要的目標是確認通訊雙方的身份、與分配雙方通訊所需的會議鑰匙。我們採用了極複雜的運作程序,是為了要防止攻擊者從中破壞正常交易,至於如何達成上述兩個目標,其實到目前為止,也很難找出十全十美的方法。首先將攻擊者的破壞技巧歸類如下:

之前所介紹的幾種認證協定,大多著重於防止重播攻擊。假設,先撇開重播攻擊的問題,我們將圖 14-1 (b) 的基本認證程序加入了網路位址,便如圖 14-7 所示。其中ADA表示客戶工作站的位址,我們來討論一下可能出現的問題:

圖 14-7 附加網路位址的門票

第二個問題較簡單,我們先來討論第一個問題。記得我們在 14-5 節介紹過(如圖 14-20 所示),KDC 的概念是將客戶認證(與建立會議鑰匙)的工作分配給 KDC 伺服器管理;如果確定身份無誤之後,便可以發給客戶通往伺服器的門票,然而客戶是否有權利存取某一伺服器,仍需仰賴原伺服器自行管理(如建立 ACL 表)。如果我們另外建立一個伺服器,作為過濾客戶是否可以使用某一個伺服器的權利,此伺服器稱為『門票核准伺服器』(Ticket-Granting Server, TGS);如果該客戶有權利存取某一伺服器,則 TGS 便發給予通往該伺服器的門票。至於客戶存取該伺服器的權限如何,還是保存在原伺服器上管理。如此一來,原來 KDC 的工作便僅限於客戶身份的認證而已,因此,又稱為『認證伺服器』(Authentication Server, AS)。也就是說,我們將 KDC 的工作分配給 AS 與 TGS 兩個伺服器來承擔,如此一來,便可以解決客戶只要輸入一次密碼的問題。

14-4-3 Kerberos 基本構想

圖 14-8 為 Kerberos 的基本構想,運作程序的簡單程序是:客戶利用自己的主密鑰向 AS 伺服器申請到一張通往 TGS 伺服器的門票(TicketTGS),再利用此門票向 TGS 伺服器申請一張通往某伺服器的門票(TicketB),客戶端再利用伺服器的門票向該伺服器要求服務。兩張門票分別為:

TGS 門票:TicketTGS = EKtgs [IDA || ADA || IDTGS || TS1 || Lifetime1]

伺服器門票:TicketB = EKb [IDA || ADA || IDB || TS2 || Lifetime2]

其中 ID 與 AD 分別為身分識別與網路位址,TS 是時間戳記,Lifetime 為有效時間。接下來,我們來討論利用兩個伺服器的認證有何特性:(如圖 14-8 所示)

圖 14-8 Kerberos 的基本構想

門票都利用接收端的主密鑰加密著,譬如,客戶傳送給 TGS 門票便利用 TGS 的主密鑰(KTGS)加密著;另外。客戶傳送給伺服器的門票,也利用該伺服器(假設 Bob)的主密鑰(KB)加密著。客戶與攻擊者都無法窺視到門票的內容,當然無法冒充或竄改它。接下來的問題是有效期間要多長?如果太短的話,當門票逾時之後,客戶端必須再重新輸入密碼取得新的門票。但如果有效期間過長,客戶登出之後,攻擊者可以冒充它的帳戶來使用門票,之間取捨難定,不過一般大多定在 8 個小時左右。

我們瞭解圖 14-8 的基本構想之後,大略可以完成身份認證的問題。我們再將會議鑰匙分配的程序加入圖 14-8 中,並規範標準的加密演算法與門票的格式,便能制定出一個完整的認證協定,這就是建構 Kerberos 的基本構想。

14-4-4 Kerberos V4 認證程序

Kerberos 將參與工作的成員稱呼為『主角』(Principal),每個成員都擁有自己的『主密鑰』(Master Secret)。但基本上,它還是屬於主從式(Client/Server)架構的應用系統,其成員主要由下列四種實體(使用者或設備)所扮演而成:

就門票的類別可區分為下列兩大類:

瞭解 Kerberos 的元件之後,再來探討 Kerberos 認證協定可就容易多了。它的運作程序如圖 14-9 所示,我們將它分為登錄、取票、要求服務等三個步驟來討論,如下:

圖 14-9 Kerberos V4 協定之運作程序

【(A)登錄】

當使用者(假設 Alice)想要進入系統參與工作時,它必須進入 Kerberos 所管轄的範圍內,並由 Kerberos 認證身份。首先,Alice 傳送本身識別碼(或憑證、IDA)與希望取得 TGS 伺服器門票的識別碼(IDTGS)給 AS 伺服器,其中已加入預防重播攻擊的時間戳記(TS1)(訊號 (1))。AS 確認 Alice 的身份識別無誤後,便利用 Alice 主密鑰傳送通往 TGS 的 TGT 門票(TicketTGS)、以及 Alice 與 TGS 伺服器之間的會議鑰匙(KA, T)給 Alice(訊號 (2)),訊號格式如下:

 EKa [KA, T || IDTGS || TS2 || Lifetime1 || TicketTGS]

TGT 門票格式如下:

TicketTGS = EKtgs [KA, T || IDA || ADA || IDTGS || TS2 || Lifetime1]

其中 Lifetime1表示該門票的有效期限,KA, T是 AS 伺服器分配給 Alice 與 TGS 伺服器之間的會議鑰匙,ADA為 Alice 工作站的網路位址(IP 位址),AS 伺服器是由 Alice 所傳送過來的 IP 封包中取得。

 當訊號 (2) 到達 Alice 工作站時,工作站會要求 Alice 輸入密碼,並由輸入的密碼產生 Alice 的主密鑰(KA),再利用主密鑰解開訊號 (2) 的加密,同時取得相關訊息。由此可見,TGT 門票是利用 Alice 的主密鑰加密著,他人不易觀察裡面的內容。

【(B)取票】

Alice 經由 AS 確認身份,並取得通往 TGS 的 TGT 門票之後,它便成為 Kerberos 系統下的成員之一。在該門票的有效期間內,它都可以向 TGS 伺服器要求其它伺服器的門票,其要求步驟如下:首先 Alice 傳送自己的簽署碼(Authentication,Authen_1A)、身份識別(IDB)與 TGT 門票(TicketTGS)給 TGS 伺服器,其中身份識別(IDB)表示欲前往的服務伺服器(假設 Bob)(訊號 (3)),簽署碼表示 Alice 自己簽署的身分證明,格式如下:

Authen_1A = EKa, t [IDA || ADA || TS3]

由上可知簽署碼是使用 Alice 與 TGS 的會議鑰匙(KA, T)加密,其中包含 Alice 的身份識別(IDA、ADA)與時間戳記(TS3)。

TGS 伺服器檢視 TicketTGS門票中有效期限是否過期,如在有效期間內,則取出會議鑰匙(KA, T),並解開 Alice 的認證碼(Authen_1A),再核對認證碼與門票內有關 Alice 的身份識別是否正常。如果都正常的話,便發給 Alice 通往服務伺服器(Bob)的 ST 門票(訊號 (4)),ST 門票格式如下:

TicketB = EKb [KA, B || IDA || ADA || IDB || TS4 || Lifetime2 ]

由上可知ST 門票係利用 Bob 的主密鑰加密,他人無法窺視其內容,更何況要去竄改它。ST 門票中也包含著 TGS 發給 Alice 與 Bob 之間的會議鑰匙(KA, B),並包含著 Alice 與 Bob 的身份識別、該門票的有效期限(Lifetime2)與時間戳記(TS4)。

【(C)要求服務】

Alice 由 TGS 伺服器上取得通往 Bob 的 ST 門票之後,在該門票的有效期間內都可以向 Bob 要求服務,要求服務的步驟如下:首先 Alice 向 Bob 出示門票(TicketB)與自己的認證碼(Authen_2A)(訊號 (5)),認證碼的格式如下:

Authen_2A = EKa, b [IDA || ADA || TS5]

認證碼也是使用 Alice 與 Bob 的會議鑰匙(KA, B)加密。Bob 收到訊號 (5) 之後,再利用自己的主密鑰解開門票的加密,並核對是否在有效期間內,如果該門票尚未逾期,則取出會議鑰匙(KA, B),並利用該鑰匙解開認證碼的加密。接下來,Bob 比較 ST 門票內所註明的身份識別是否與認證碼相同,如果相同的話,則可確定發送該門票者確實是 Alice 沒錯。但 Bob 必須確認該會議鑰匙是否與 Alice 共享的,因此,Bob 可利用會議鑰匙回送時間戳記減一的值給 Alice(訊號 (6)),作為達到『相互認證』(Mutual Authentication)的功能。

由上述的介紹,可以發現每一筆訊號都加入了時間戳記,以防止重播攻擊。門票也註明了有效期限,如此更能減低使用者退出後,攻擊者仿冒的機會。當然攻擊者欲攔截門票來仿冒也有其困難,譬如,攻擊者攔截訊號 (3)(或訊號 (5)),取得門票之後,再偽裝成 Alice 傳送給 TGS 伺服器(或Bob),但它沒 Alice 的認證碼也是枉然。

14-4-5 多重Kerberos 領域

Kerberos 將每一系統所管轄的範圍稱之為『領域』(Realm);每一領域內,至少包含一部 AS 伺服器、若干個 TGS 伺服器、以及所管轄的使用者與服務伺服器。基本上,使用者都必須向 AS 伺服器登錄帳戶,才正式成為該領域下的使用者,又稱為『領域使用者』;另一方面,服務伺服器必須向 AS 與 TGS 登錄,領域使用者才可以存取道該伺服器的資源,所有領域之內的成員又通稱為『主角』(Principle)。因此,針對任何一個使用者或伺服器(或工作站)都標示為『Realm/Principle』,譬如,『CIS/User_1』,則表示該成員是 CIS 領域下的 User_1 帳戶。

就領域的概念而言,各個成員可構成一個獨立的環境,由 AS 與 TGS 伺服器(兩者的組合又稱為 Kerberos 伺服器)來管轄領域內所有資源的分配;一般情況,我們都會將組織單位內工作性相同的人員與設備規劃成一個領域,也大多以組織內的子單位來劃分,如此一來,管理者就可清楚分配資源的使用權限。但如果組織內存在著多個領域,則領域之間如何來達成資源共享的問題,則有賴『多重 Kerberos』(Kerberi)機制來達成,如圖 14-10 所示。增加了 Kerberi 的關係,我們可將 Kerberos 的特性歸類如下:

圖 14-10 多重 Kerberos 領域的關係

利用信任關係,使 Kerberos 伺服器與對方 TGS 伺服器之間共享秘密鑰匙,如此一來,領域之間的存取問題就簡單多了。然而,應用伺服器與 Kerberos 之間的共享鑰匙是由 TGS 伺服器負責,因此,與原來領域內存取的不同點,僅在於 TGS 伺服器的分配門票上。我們用圖 14-11 說明領域之間存取的運作程序,並假設領域雙方都互相信任,其運作程序與圖 14-9 大致上相同,僅就跨領域之間的程序說明如下:

圖 14-11 跨越領域的運作程序

14-5 Kerberos V5 認證系統

隨著 Kerberos 漸漸普遍,系統亦不斷的擴張下,第四版本已漸不符新環境的需求,Kerberos V5 因而被發展出來,且已被發佈為 RFC 1510,許多應用系統也已率先安裝該版本,用來處理客戶與系統之間的認證問題。

14-5-1 Kerberos V5 系統簡介

制定 V5 的主要目的是為了解決 V4 兩個缺點:環境與技術上的缺點 [86],以下分別說明之:

14-5-2 Kerberos V5 運作程序

大致上,版本 V5 的運作程序與 V4 相同,祇不過在訊息方面增加一些參數;V5 的運作程序如圖 14-12 所示(請先參考 V4 的運作程序,圖 14-9),在此先討論增加的那些參數:

圖 14-12 Kerberos V5 協定之運作程序

版本 V5 將各種訊息都給予一個特殊的名稱(如圖 14-12 所示),並把『認證伺服器』(Authentication Server, AS)所授與通往『門票核准伺服器』(Ticket- Granting Server, TGS)的門票,稱之為『門票核准票』(Ticket-Granting Ticket, TGT),亦將TGS 所發行通往應用伺服器的門票,稱之為『服務門票』(Service Ticket, ST)。我們以圖 14-12 來說明其特殊功能:

TicketTGS = EKtgs [Flages || KA, TGS || RealmA || IDA || Times || Authen_Data]

TicketB = EKb [Flages || KA, B || RealmA || IDA || Times || Authen_Data]

Authen_1A = EKa, tgs [IDA || RealmA || TS1]

Authen_2A = EKa, b [IDA || RealmA || TS2 || Subkey || Seq#]

14-5-3 Ticket 旗號

無論是 TGT 或 ST 門票都如圖 14-13 的格式,在 RFC 1510 中是利用 ASN.1 語法所描述;我們用圖形來描述它,或許能讓讀者更容易接受。未加密的部分包含有:版本(Version)、領域(Realm)、持有者名稱(Principal Name);其它加密的參數已在前面介紹過,這裡不再重複。至於『門票旗號』(Ticket Flags)是作為表示該門票的屬性,以位元設定(True 或 False)表示某一功能的啟動否。較重要的旗號有:

圖 14-13 門票的格式

14-5-4 安全機制選項

Kerberos V4 的加密演算法係採用非標準的 DES 模式 —『傳導式密文區塊串接』(Propagating Cipher Block Chaining, PCBC)模式,並已證明該模式不夠安全 [84]。Kerberos V5 提供選項欄位,可讓客戶依照傳輸資料安全性的需求,協議不同的密碼系統,並且這些密碼都屬於標準規範,較容易與其他應用系統銜接。Kerberos 將安全性區分為:『檢查集』(Checksum)與『加密系統』(Encryption)等兩個層次,其中檢查集僅包含完整性功能,加密系統則包含隱密性與完整性功能。

【(A)檢查集】

目前 Kerberos V5(RFC 1510,1993 年)並沒有將較新的演算法加入選項之中,規範內的完整性檢查的標準規範有:

由此可見,Kerberos V5 也不例外,大多以 MAC(Message Authentication Code) 來製作完整性檢查的認證碼(除了 CRC-32 之外)。但為了增加複雜度,V5 將每一筆訊息之前加入一個『混亂碼』(Confounder),再經過雜湊演算法計算,同時將此混亂碼一併傳送給對方。

我們以 RSA-MD5-DES 為範例,來說明產生完整性檢查碼的方法與認證步驟。MAC 產生方法如下:

接收者收到訊息之後,如何利用訊息中的 MAC 來確認訊息完整性,步驟如下:

由上述的範例可以看出,V5 的安全性比 V4 的 PCBC 安全性高許多。

【(B)加密系統】

Kerberos V5 的加密系統(Encryption)亦包含檢查碼(Checksum),所以除了提供隱密性功能,亦包含完整性檢查的功能;在 RFC 1510 上規範有下列加密系統:

基本上,還是以 DES 加密系統的 CBC 操作模式為基礎(請參考 2-7-2 節介紹);另外,加入完整性檢查有 CRC(Cyclic Redundancy Check)[3]、MD4 與 MD5 等演算法。

接下來,我們來探討 Kerberos 加密系統的製作方法,步驟如下:

其中 Checksum 欄位可能是 32 bits(CRC-32)或 128 bits(MD4、MD5);Padding 欄位是將整個訊息補滿 64 bits 倍數的亂數。

雖然目前 Kerberos V5 並未將安全性較高的加密系統(如 ASE)或 MAC 演算法(如 SHA-1)加入規範之中,但我們相信這些系統應該漸漸會被植入 V5 系統之內。

14-6 結論

用戶認證算是比較複雜的運作系統,主要目的是要確認對方的身份、以及分配會議鑰匙;亦是,經過認證身份之後,再依照所分配的會議鑰匙來通訊。因此,一般安全性的通訊,可將通訊連線分為兩個階段,如圖 14-14 所示。第一階段係利用使用者主密鑰(KA、或稱共享密鑰)或公開鑰匙來確認身份。參與認證工作的系統可以是一個專屬系統(如 Kerberos)、或是將認證協定植入應用系統內(如 IKE 協定,第十七章介紹),由應用系統自行處理。經過第一階段處理無誤之後,使用者與應用伺服器兩者已取得會議鑰匙(KS),再進入第二階段處理。然而,第二階段主要採秘密鑰匙系統作傳輸資料,如此才可以提高傳輸效率,既然所分配的會議鑰匙可能只使用一次(或短時間使用),攻擊者欲於短時間內破解會議鑰匙,談何容易。此外,第二階段也許會採用不同的密碼系統(如 DES、ASE 或 RSA),各種密碼系統的鑰匙長度也不一樣,因此,認證系統在分配會議鑰匙時,應該會考慮到鑰匙的長度。但為了能合乎不同系統的需求,一般認證系統所分配鑰匙的長度都取較高位元(如 128 bits);至於如何由此較長的鑰匙中,擷取出所需要會議鑰匙的長度(如 64 bits),可依照各應用系統的協定來規劃。

圖 14-14 安全性的通訊