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

翻轉工作室:粘添壽

第十四章 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) 的運作方式,但它利用隨機產生的亂數(Nonce64 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)),並重複發送給 BobBob 由門票內的 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 傳送會議鑰匙給 AliceEKUa [EKRd [NA || KS || IDB] || NB]

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

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

14-4 Kerberos V4 認證系統

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

Kerberos 認證系統』(Kerberos Authentication System是由麻省理工學院(M. I. T)發展出來的,其命名係來自希臘神話中看守地獄入口那條三頭狗 Kerberos。設計 Kerberos最主要的目的是要讓使用者能安全地存取網路上資源,也是目前網路使用最廣泛的技術。到目前為止,Kerberos 較常用的有兩個版本,版本 4V4[26, 49, 111] 目前還被廣泛使用中,但僅能使用於 TCP/IP 網路;版本 5V5)已作了許多修正,使它更適合其他網路環境,並已制定成 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 傳送自己的簽署碼(AuthenticationAuthen_1A)、身份識別(IDB)與 TGT 門票(TicketTGS)給 TGS 伺服器,其中身份識別(IDB)表示欲前往的服務伺服器(假設 Bob)(訊號 (3)),簽署碼表示 Alice 自己簽署的身分證明,格式如下:

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

由上可知簽署碼是使用 Alice TGS 的會議鑰匙(KA, T)加密,其中包含 Alice 的身份識別(IDAADA)與時間戳記(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 V5RFC 15101993 年)並沒有將較新的演算法加入選項之中,規範內的完整性檢查的標準規範有:

由此可見,Kerberos V5 也不例外,大多以 MACMessage 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 節介紹);另外,加入完整性檢查有 CRCCyclic Redundancy Check[3]MD4 MD5 等演算法。

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

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

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

14-6 結論

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

14-14 安全性的通訊