Kerberos協(xié)議:
Kerberos協(xié)議主要用于計(jì)算機(jī)網(wǎng)絡(luò)的身份鑒別(Authentication), 其特點(diǎn)是用戶只需輸入一次身份驗(yàn)證信息就可以憑借此驗(yàn)證獲得的票據(jù)(ticket-granting ticket)訪問(wèn)多個(gè)服務(wù),即SSO(Single Sign On)。由于在每個(gè)Client和Service之間建立了共享密鑰,使得該協(xié)議具有相當(dāng)?shù)陌踩浴?br />
條件
先來(lái)看看Kerberos協(xié)議的前提條件:
如下圖所示,Client與KDC, KDC與Service 在協(xié)議工作前已經(jīng)有了各自的共享密鑰,并且由于協(xié)議中的消息無(wú)法穿透防火墻,這些條件就限制了Kerberos協(xié)議往往用于一個(gè)組織的內(nèi)部, 使其應(yīng)用場(chǎng)景不同于X.509 PKI。
過(guò)程
Kerberos協(xié)議分為兩個(gè)部分:
1 . Client向KDC發(fā)送自己的身份信息,KDC從Ticket Granting Service得到TGT(ticket-granting ticket), 并用協(xié)議開(kāi)始前Client與KDC之間的密鑰將TGT加密回復(fù)給Client。
此時(shí)只有真正的Client才能利用它與KDC之間的密鑰將加密后的TGT解密,從而獲得TGT。
(此過(guò)程避免了Client直接向KDC發(fā)送密碼,以求通過(guò)驗(yàn)證的不安全方式)
2. Client利用之前獲得的TGT向KDC請(qǐng)求其他Service的Ticket,從而通過(guò)其他Service的身份鑒別。
Kerberos協(xié)議的重點(diǎn)在于第二部分,簡(jiǎn)介如下:

1. Client將之前獲得TGT和要請(qǐng)求的服務(wù)信息(服務(wù)名等)發(fā)送給KDC,KDC中的Ticket Granting Service將為Client和Service之間生成一個(gè)Session Key用于Service對(duì)Client的身份鑒別。然后KDC將這個(gè)Session Key和用戶名,用戶地址(IP),服務(wù)名,有效期, 時(shí)間戳一起包裝成一個(gè)Ticket(這些信息最終用于Service對(duì)Client的身份鑒別)發(fā)送給Service, 不過(guò)Kerberos協(xié)議并沒(méi)有直接將Ticket發(fā)送給Service,而是通過(guò)Client轉(zhuǎn)發(fā)給Service.所以有了第二步。
2. 此時(shí)KDC將剛才的Ticket轉(zhuǎn)發(fā)給Client。由于這個(gè)Ticket是要給Service的,不能讓Client看到,所以KDC用協(xié)議開(kāi)始前KDC與Service之間的密鑰將Ticket加密后再發(fā)送給Client。同時(shí)為了讓Client和Service之間共享那個(gè)秘密(KDC在第一步為它們創(chuàng)建的Session Key), KDC用Client與它之間的密鑰將Session Key加密隨加密的Ticket一起返回給Client。
3. 為了完成Ticket的傳遞,Client將剛才收到的Ticket轉(zhuǎn)發(fā)到Service. 由于Client不知道KDC與Service之間的密鑰,所以它無(wú)法算改Ticket中的信息。同時(shí)Client將收到的Session Key解密出來(lái),然后將自己的用戶名,用戶地址(IP)打包成Authenticator用Session Key加密也發(fā)送給Service。
4. Service 收到Ticket后利用它與KDC之間的密鑰將Ticket中的信息解密出來(lái),從而獲得Session Key和用戶名,用戶地址(IP),服務(wù)名,有效期。然后再用Session Key將Authenticator解密從而獲得用戶名,用戶地址(IP)將其與之前Ticket中解密出來(lái)的用戶名,用戶地址(IP)做比較從而驗(yàn)證Client的身份。
5. 如果Service有返回結(jié)果,將其返回給Client。
總結(jié)
概括起來(lái)說(shuō)Kerberos協(xié)議主要做了兩件事
1. Ticket的安全傳遞。
2. Session Key的安全發(fā)布。
再加上時(shí)間戳的使用就很大程度上的保證了用戶鑒別的安全性。并且利用Session Key,在通過(guò)鑒別之后Client和Service之間傳遞的消息也可以獲得Confidentiality(機(jī)密性), Integrity(完整性)的保證。不過(guò)由于沒(méi)有使用非對(duì)稱(chēng)密鑰自然也就無(wú)法具有抗否認(rèn)性,這也限制了它的應(yīng)用。不過(guò)相對(duì)而言它比X.509 PKI的身份鑒別方式實(shí)施起來(lái)要簡(jiǎn)單多了。
推薦資料:
Kerberos的原理
Kerberos: An Authentication Service for Computer Networks
Web Services Security系列文章
posted on 2008-09-08 14:23
周銳 閱讀(275)
評(píng)論(0) 編輯 收藏 所屬分類(lèi):
Java 、
Spring